NFR: Misc updates to imap authentication
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 45/100
- issue の種類
- 機能追加
- 明瞭さ
- おおむね明確
- 活発さ
- 停滞
- 技術スタック
- php
調査の方向性
Start in lib/IMAP.php and review the constructor and authentication flow against the proposed addEmail and authSeparator settings. Verify the username, Nextcloud user ID, email, and domain-group behavior for each objective; completion requires addressing the three listed objectives, though no test file or IMAP test server is provided.
索引モデルが issue の本文から書いたものです。
説明
Objectives:
- avoid creation of accounts without the domain [Bug 128] (https://github.com/nextcloud/user_external/issues/128)
- add an email address to created users automatically
- allow a separator other than '@' during the actual IMAP authentication [Bug 150] (https://github.com/nextcloud/user_external/issues/150)
Summary:
Add two new config variables
- $addEmail (arg6) true: create email address matching login if login contains '@'
- $authSeparator (arg7) replace '@' with '$authSeparator' when authenticating to the IMAP server
(Note: I don't have any server to test this against...)
update lib/IMAP.php
Collect the new variables
diff -u IMAP.php apps/user_external/lib/IMAP.php
--- IMAP.php 2022-04-29 09:29:43.573148672 -0400
+++ apps/user_external/lib/IMAP.php 2022-04-29 09:41:59.878674898 -0400
@@ -25,6 +25,8 @@
private $domain;
private $stripeDomain;
private $groupDomain;
+ private $addEmail;
+ private $authSeparator;
/**
* Create new IMAP authentication provider
@@ -36,7 +38,7 @@
* @param boolean $stripeDomain (whether to stripe the domain part from the username or not)
* @param boolean $groupDomain (whether to add the usere to a group corresponding to the domain of the address)
*/
- public function __construct($mailbox, $port = null, $sslmode = null, $domain = null, $stripeDomain = true, $groupDomain = false) {
+ public function __construct($mailbox, $port = null, $sslmode = null, $domain = null, $stripeDomain = true, $groupDomain = false, $addEmail = false, $authSeparator = null) {
parent::__construct($mailbox);
$this->mailbox = $mailbox;
$this->port = $port === null ? 143 : $port;
@@ -44,6 +46,8 @@
$this->domain = $domain === null ? '' : $domain;
$this->stripeDomain = $stripeDomain;
$this->groupDomain = $groupDomain;
+ $this->addEmail = $addEmail;
+ $this->authSeparator = $authSeparator;
}
Look for the configured authSeparator in the login field and replace it with an '@' to be used for the NC username and email.
/**
@@ -61,12 +65,21 @@
$uid = str_replace("%40", "@", $uid);
}
+ $authseparator = strlen($this->authSeparator) == 1 ? $this->authSeparator : '@';
+
+ // Replace $authseparator with '@' in case the user used the wrong separator...
+ if (!(strpos($uid, '@') !== false) && (strpos($uid, $authseparator) !== false)) {
+ $uid = str_replace($authseparator, "@", $uid);
+ }
+
Set $useremail whenever we set $username. Use $authSeparator in $username for authentication to the IMAP server (addresses [Bug 150] (https://github.com/nextcloud/user_external/issues/150), but I have no server to test against )
$pieces = explode('@', $uid);
if ($this->domain !== '') {
if (count($pieces) === 1) {
- $username = $uid . '@' . $this->domain;
+ $username = $pieces[0] . $authseparator . $this->domain;
+ $useremail = $pieces[0] . '@' . $this->domain;
} elseif (count($pieces) === 2 && $pieces[1] === $this->domain) {
- $username = $uid;
+ $username = $pieces[0] . $authseparator . $pieces[1];
+ $useremail = $pieces[0] . '@' . $pieces[1];
if ($this->stripeDomain) {
$uid = $pieces[0];
}
@@ -79,8 +92,14 @@
}
} else {
$username = $uid;
+ $useremail = $uid;
}
Force the NC user id to match the full email (addresses Bug 128 )
-
+ if ($this->stripeDomain) {
+ $uid = $pieces[0];
+ } else {
+ $uid = $useremail;
+ }
+
$groups = [];
if ($this->groupDomain && $pieces[1]) {
$groups[] = $pieces[1];
Save the user's email in NC config if there's an '@' in it and $addEmail is true
@@ -104,6 +123,10 @@
curl_close($ch);
$uid = mb_strtolower($uid);
$this->storeUser($uid, $groups);
+ if ($this->addEmail && (strpos($useremail,'@') !== false) ) {
+ $config = \OC::$server->getConfig();
+ $config->setUserValue( $uid, 'settings', 'email', $useremail);
+ }
return $uid;
} else {
\OC::$server->getLogger()->error(
- 主要言語
- JavaScript
- スター
- 121
- フォーク
- 73
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
nextcloud/user_external のほかの issue
-
0. Needs triage bug
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
nextcloud/user_external#298 · リアクション 1 件 ·
-
NC 35 compatibilityオープン0. Needs triage enhancement
難易度 3/5 1〜2日 初心者へのやさしさ 35/100
nextcloud/user_external#311 · コメント 2 件 · リアクション 4 件 ·
-
0. Needs triage bug
難易度 3/5 1〜2日 初心者へのやさしさ 68/100
nextcloud/user_external#310 · コメント 2 件 ·
-
v4.0.0 released!オープン
難易度 1/5 1時間未満 初心者へのやさしさ 20/100
nextcloud/user_external#295 · リアクション 3 件 ·
-
0. Needs triage bug
難易度 3/5 1〜2日 初心者へのやさしさ 52/100
nextcloud/user_external#281 · コメント 6 件 · リアクション 3 件 ·
nextcloud/user_external の issue をすべて見る
似ている issue
-
check:passed feeds:remove
難易度 1/5 1時間未満 初心者へのやさしさ 65/100
iptv-org/database#37176 · コメント 1 件 · リアクション 1 件 ·
メンテナーはふだん 9 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
hawk-digital-environments/HAWKI#443 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
メンテナーはふだん 1 日以内に返信
-
feedback simulation workshop
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
githubnext/gh-aw-workshop#4370 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
AltimateAI/vscode-dbt-power-user#2089 ·