Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

NFR: Misc updates to imap authentication

オープン
#199 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
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 の本文から書いたものです。

説明

0. Needs triage enhancement

Objectives:

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 はありません

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

nextcloud/user_external のほかの issue

nextcloud/user_external の issue をすべて見る

似ている issue

JavaScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。