From 87bc02c6cd482a28aa175d269d48a849ca9eb399 Mon Sep 17 00:00:00 2001
From: Joas Schilling <nickvergessen@owncloud.com>
Date: Mon, 7 Dec 2015 15:37:26 +0100
Subject: [PATCH] Allow specifying a custom reset-password-url

---
 config/config.sample.php |  8 ++++++++
 core/js/config.php       |  1 +
 core/js/lostpassword.js  | 12 ++++++++----
 lib/private/util.php     |  8 +++++---
 4 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/config/config.sample.php b/config/config.sample.php
index 034a1ebddbf..c3abe3a2b87 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -213,6 +213,14 @@ $CONFIG = array(
 	)
 ),
 
+/**
+ * If your user backend does not allow to reset the password (e.g. when it's a
+ * read-only user backend like LDAP), you can specify a custom link, where the
+ * user is redirected to, when clicking the "reset password" link after a failed
+ * login-attempt.
+ */
+'lost_password_link' => 'https://example.org/link/to/password/reset',
+
 /**
  * Mail Parameters
  *
diff --git a/core/js/config.php b/core/js/config.php
index 8956689e74e..e51ae903729 100644
--- a/core/js/config.php
+++ b/core/js/config.php
@@ -141,6 +141,7 @@ $array = array(
 			'version'			=> implode('.', OC_Util::getVersion()),
 			'versionstring'		=> OC_Util::getVersionString(),
 			'enable_avatars'	=> \OC::$server->getConfig()->getSystemValue('enable_avatars', true),
+			'lost_password_link'=> \OC::$server->getConfig()->getSystemValue('lost_password_link', null),
 			'modRewriteWorking'	=> (getenv('front_controller_active') === 'true'),
 		)
 	),
diff --git a/core/js/lostpassword.js b/core/js/lostpassword.js
index 294a9d8c1cf..df28c2308cb 100644
--- a/core/js/lostpassword.js
+++ b/core/js/lostpassword.js
@@ -13,22 +13,26 @@ OC.Lostpassword = {
 	resetErrorMsg : t('core', 'Password can not be changed. Please contact your administrator.'),
 
 	init : function() {
-		$('#lost-password').click(OC.Lostpassword.sendLink);
+		$('#lost-password').click(OC.Lostpassword.resetLink);
 		$('#reset-password #submit').click(OC.Lostpassword.resetPassword);
 	},
 
-	sendLink : function(event){
+	resetLink : function(event){
 		event.preventDefault();
 		if (!$('#user').val().length){
 			$('#submit').trigger('click');
 		} else {
-			$.post(
+			if (OC.config['lost_password_link']) {
+				window.location = OC.config['lost_password_link'];
+			} else {
+				$.post(
 					OC.generateUrl('/lostpassword/email'),
 					{
 						user : $('#user').val()
 					},
 					OC.Lostpassword.sendLinkDone
-			);
+				);
+			}
 		}
 	},
 
diff --git a/lib/private/util.php b/lib/private/util.php
index 532730998c6..c31ad63b9be 100644
--- a/lib/private/util.php
+++ b/lib/private/util.php
@@ -948,9 +948,11 @@ class OC_Util {
 		}
 
 		$parameters['canResetPassword'] = true;
-		$user = \OC::$server->getUserManager()->get($_REQUEST['user']);
-		if ($user instanceof IUser) {
-			$parameters['canResetPassword'] = $user->canChangePassword();
+		if (!\OC::$server->getSystemConfig()->getValue('lost_password_link')) {
+			$user = \OC::$server->getUserManager()->get($_REQUEST['user']);
+			if ($user instanceof IUser) {
+				$parameters['canResetPassword'] = $user->canChangePassword();
+			}
 		}
 
 		$parameters['alt_login'] = OC_App::getAlternativeLogIns();
-- 
GitLab