From c16b10236ed7605c37d57b6e15347a83e47b5778 Mon Sep 17 00:00:00 2001 From: Dimitrios Stoupis Date: Sat, 30 Nov 2019 16:55:32 +0000 Subject: [PATCH 1/2] Modified the HTML code to show a more friendly environment --- oauth/authorize.php | 103 +++++--------- oauth/connexion.php | 77 ----------- oauth/form_prompt.html | 41 ++++++ oauth/images/auth_icon.png | Bin 0 -> 46266 bytes oauth/images/prompt_icon.png | Bin 0 -> 45263 bytes oauth/index.php | 151 ++++++++++++--------- oauth/style.css | 252 +++++++++++++++++++++++++++-------- 7 files changed, 356 insertions(+), 268 deletions(-) delete mode 100644 oauth/connexion.php create mode 100644 oauth/form_prompt.html create mode 100644 oauth/images/auth_icon.png create mode 100644 oauth/images/prompt_icon.png diff --git a/oauth/authorize.php b/oauth/authorize.php index 1b1defd..f903eb9 100644 --- a/oauth/authorize.php +++ b/oauth/authorize.php @@ -35,78 +35,45 @@ if (empty($_POST)) { exit(' - - - - Authorisation Mattermost - + + + Mattermost - LDAP Authorization - + + + -
- - - - - - - -
  - + +
+
+

LDAP Authentication

+
+ authentication icon +
+
+

Authorize Mattermost to get the following data:

+
+ + + +
+   Full Name
+   E-mail
+   For the user ' . $_SESSION['uid'] . '
+
+
-
-
Mattermost desires access to your LDAP data:
- - -
- - - - - - - - - - - - - - - - - - -
- -
- -
-   -
- Login as : ' . $_SESSION['uid'] . ' -
- -
- Requested Data :
-   -> Username,
-   -> Full Name,
-   -> Email - -
 
-
-
- -
- - - - -
- +
+ + +
+ + + -'); + '); } // print the authorization code if the user has authorized your client @@ -122,4 +89,4 @@ if ($is_authorized) } // Send message in case of error -$response->send(); \ No newline at end of file +$response->send(); diff --git a/oauth/connexion.php b/oauth/connexion.php deleted file mode 100644 index 57edba1..0000000 --- a/oauth/connexion.php +++ /dev/null @@ -1,77 +0,0 @@ - - */ - -// include our LDAP object -require_once __DIR__.'/LDAP/LDAP.php'; -require_once __DIR__.'/LDAP/config_ldap.php'; - - -// Verify all fields have been filled -if (empty($_POST['user']) || empty($_POST['password'])) -{ - echo 'Please fill in your Username and Password

'; - echo 'Click here to come back to login page'; -} -else -{ - // Check received data length (to prevent code injection) - if (strlen($_POST['user']) > 15) - { - echo 'Username has incorrect format ... Please try again

'; - echo 'Click here to come back to login page'; - } - elseif (strlen($_POST['password']) > 50 || strlen($_POST['password']) <= 7) - { - echo 'Password has incorrect format ... Please try again

'; - echo 'Click here to come back to login page'; - } - else - { - // Remove every html tag and useless space on username (to prevent XSS) - $user=strip_tags(trim($_POST['user'])); - - $user=$_POST['user']; - $password=$_POST['password']; - - // Open a LDAP connection - $ldap = new LDAP($ldap_host,$ldap_port,$ldap_version); - - // Check user credential on LDAP - try{ - $authenticated = $ldap->checkLogin($user,$password,$ldap_search_attribute,$ldap_filter,$ldap_base_dn,$ldap_bind_dn,$ldap_bind_pass); - } - catch (Exception $e) - { - $resp = json_encode(array("error" => "Impossible to get data", "message" => $e->getMessage())); - $authenticated = false; - } - - // If user is authenticated - if ($authenticated) - { - $_SESSION['uid']=$user; - - // If user came here with an autorize request, redirect him to the authorize page. Else prompt a simple message. - if (isset($_SESSION['auth_page'])) - { - $auth_page=$_SESSION['auth_page']; - header('Location: ' . $auth_page); - exit(); - } - else - { - echo "Congratulation you are authenticated !

However there is nothing to do here ..."; - } - } - // check login on LDAP has failed. Login and password were invalid or LDAP is unreachable - else - { - echo "Authentication failed ... Check your username and password.
If error persist contact your administrator.

"; - echo 'Click here to come back to login page'; - echo '


' . $resp; - } - } -} diff --git a/oauth/form_prompt.html b/oauth/form_prompt.html new file mode 100644 index 0000000..433fdc0 --- /dev/null +++ b/oauth/form_prompt.html @@ -0,0 +1,41 @@ + + + + + LDAP Connection Interface + + + + + + + +
+
+

LDAP Authentication

+
+ authentication icon +
+
+ +
+
+ + +

+ +
+ + +

+ +
+
+ + +
+
+
+ + diff --git a/oauth/images/auth_icon.png b/oauth/images/auth_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..28e98fd93444f8a0137dc87af0a9aa147157b5cd GIT binary patch literal 46266 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 +/** + * @author Denis CLAVIER + * A modified verion by dimst23 + */ - - - - - LDAP Connection Interface - - -

- - - - - - -
  - +// include our LDAP object +require_once __DIR__.'/LDAP/LDAP.php'; +require_once __DIR__.'/LDAP/config_ldap.php'; - - - -
-
LDAP Authentification
- +$prompt_template = new DOMDocument(); +$prompt_template->loadHTMLFile('form_prompt.html'); -
- - - - - - - - - - - - - - - - - - - -
- -
- -
-   -
- Username:  - - -
- Password:  - - -
 
-
- -
- -
-
- - \ No newline at end of file + +function messageShow($html_template, $message = 'No Msg') { + $modification_node = $html_template->getElementsByTagName('div')->item(5); + $page_fragment = $html_template->createDocumentFragment(); + $page_fragment->appendXML($message); + + $modification_node->appendChild($page_fragment); + + echo $html_template->saveHTML(); +} + + +// Verify all fields have been filled +if (empty($_POST['user']) || empty($_POST['password'])) +{ + if (empty($_POST['user'])) { + messageShow($prompt_template, 'Username field can\'t be empty.'); + } else { + messageShow($prompt_template, 'Password field can\'t be empty.'); + } +} +else +{ + // Check received data length (to prevent code injection) + if (strlen($_POST['user']) > 15) + { + messageShow($prompt_template, 'Username has incorrect format ... Please try again'); + } + elseif (strlen($_POST['password']) > 50 || strlen($_POST['password']) <= 7) + { + messageShow($prompt_template, 'Password has incorrect format ... Please try again'); + } + else + { + // Remove every html tag and useless space on username (to prevent XSS) + $user=strip_tags(trim($_POST['user'])); + + $user=$_POST['user']; + $password=$_POST['password']; + + // Open a LDAP connection + $ldap = new LDAP($ldap_host,$ldap_port,$ldap_version); + + // Check user credential on LDAP + try{ + $authenticated = $ldap->checkLogin($user,$password,$ldap_search_attribute,$ldap_filter,$ldap_base_dn,$ldap_bind_dn,$ldap_bind_pass); + } + catch (Exception $e) + { + $authenticated = false; + } + + // If user is authenticated + if ($authenticated) + { + $_SESSION['uid']=$user; + + // If user came here with an autorize request, redirect him to the authorize page. Else prompt a simple message. + if (isset($_SESSION['auth_page'])) + { + $auth_page=$_SESSION['auth_page']; + header('Location: ' . $auth_page); + exit(); + } + else + { + messageShow($prompt_template, 'Congratulation you are authenticated !

However there is nothing to do here ...'); + } + } + // check login on LDAP has failed. Login and password were invalid or LDAP is unreachable + else + { + messageShow($prompt_template, 'Authentication failed ... Check your username and password.
If the error persists contact your administrator.

'); + } + } +} diff --git a/oauth/style.css b/oauth/style.css index 8b3765c..bc25c46 100644 --- a/oauth/style.css +++ b/oauth/style.css @@ -1,57 +1,195 @@ -html -{ - height: 100%; - margin: 0; -} - -body { - font-family:"Tahoma","Arial", serif; - font-size:8px; - font-weight: normal; - color: black; - text-decoration:none; - background-color: white; - height: 100%; - margin: 0; -} - - -.LoginTitle { - color: #000000; - font-family : "Tahoma","Arial", serif; - font-size : 18pt; - font-weight: normal; -} - -.LoginUsername { - color: #000000; - font-family : "Tahoma","Arial", serif; - font-size : 14pt; - font-weight: normal; -} - -.LoginComment { - color: #000000; - font-family : "Tahoma","Arial", serif; - font-size : 8pt; - font-weight: normal; -} - -.GreenButton -{ - color: white; - font-family : "Tahoma", "Arial", serif; - font-size : 10pt; - font-weight: normal; - height: 28px; - background: transparent url(images/ButtonGreen.png) repeat-x left top; - border: solid 1px #50B4AE; - font-weight: bold; -} - -.messageLogin { - color: Yellow; - font-family : "Tahoma", "Arial", serif; - font-size : 8pt; - font-weight: bold; -} +:root { + --form_bg: #ffffff; + --input_bg: #E5E5E5; + --input_hover:#eaeaea; + --accept_bg: #1FCC44; + --accept_hover: #40e263; + --deny_bg: #cc1f1f; + --deny_hover: #e24040; + --icon_color:#6b6b6b; +} + +html { + height: 100%; + margin: 0; +} + + +/* Overide browser defaults */ +* { + padding: 0; + margin: 0; + box-sizing: border-box; +} + + + +/* Style the form wrapper */ +body { + /* Set custom font */ + font-family: 'Roboto', sans-serif; + margin: auto; + text-align: center; +} + +table { + margin-left: auto; + margin-right: auto; + font-size: larger; + border-style: solid; + border-width: 2px; + margin-top: 5%; +} + + + + + +/* Display the image centered on the left */ +#form_icon, +#form_icon_prompt { + /* Center the image */ + display: flex; + justify-content: center; + align-items: center; + margin-top: 5%; +} + +#form_icon img { + width: 100%; + max-width: 450px; +} + +#form_icon_prompt img { + width: 50%; + max-width: 350px; +} + + +/* Style the form_credentials */ +#form_credentials { + /* Center the content */ + display: inline-block; + justify-content: center; + align-items: center; + position: absolute; + transform: translate(-50%, 25%); +} + + + +/* Style input fields */ +.input_container { + background-color: var(--input_bg); + + /* Vertically align icon and text inside the div*/ + display: flex; + align-items: center; + padding-left: 20px; +} + +.input_container:hover { + background-color: var(--input_hover); +} + +.input_container, +#input_accept, +#input_deny, +#input_login { + height: 60px; + + /* Make the borders more round */ + border-radius: 12px; + width: 100%; +} + + +.input_field { + /* Customize the input tag with lighter font and some padding*/ + color: var(--icon_color); + background-color: inherit; + width: 95%; + border: none; + font-size: 1.3rem; + font-weight: 400; + padding-left: 6.5%; +} + +.input_field:hover, +.input_field:focus { + /* Remove the outline */ + outline: none; +} + +#input_accept, +#input_deny, +#input_login { + /* Submit button has a different color and different padding */ + background-color: var(--accept_bg); + padding-left: 0; + font-weight: bold; + color: white; + text-transform: capitalize; + text-align: center; + display: inline-block; + margin-top: 25%; + margin-right: 2%; + width: 50%; +} + +#input_accept:hover, +#input_deny:hover, +#input_login:hover { + /* Simple color transition on hover */ + transition: background-color, 500ms; + cursor: pointer; +} + +#input_accept, +#input_deny { + width: 45%; + margin-top: 6%; +} + +#input_deny { + background-color: var(--deny_bg); +} + +#input_deny:hover { + background-color: var(--deny_hover); +} + + +/* General page styling */ +h1, +span { + text-align: center; + padding-bottom: 2%; + padding-top: 0%; + font-weight: bolder; + font-size: 300%; +} + + +i { + color: var(--icon_color); +} + + + + +/* Make it responsive */ +@media screen and (max-width:768px) { + + /* Make the layout a single column and add some margin to the wrapper */ + #form_wrapper { + grid-template-columns: 1fr; + margin-left: 10px; + margin-right: 10px; + } + + /* On small screens we don't display the image */ + #form_icon { + display: flex; + } +} From 73b9880eb4efd47f2519211045e20838e906d75f Mon Sep 17 00:00:00 2001 From: Dimitrios Stoupis Date: Sat, 30 Nov 2019 17:05:16 +0000 Subject: [PATCH 2/2] Format the error message --- oauth/form_prompt.html | 2 +- oauth/style.css | 24 ++++++++---------------- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/oauth/form_prompt.html b/oauth/form_prompt.html index 433fdc0..62ca3e8 100644 --- a/oauth/form_prompt.html +++ b/oauth/form_prompt.html @@ -30,7 +30,7 @@
-
+
diff --git a/oauth/style.css b/oauth/style.css index bc25c46..2a92f76 100644 --- a/oauth/style.css +++ b/oauth/style.css @@ -1,5 +1,4 @@ :root { - --form_bg: #ffffff; --input_bg: #E5E5E5; --input_hover:#eaeaea; --accept_bg: #1FCC44; @@ -14,7 +13,6 @@ html { margin: 0; } - /* Overide browser defaults */ * { padding: 0; @@ -22,8 +20,6 @@ html { box-sizing: border-box; } - - /* Style the form wrapper */ body { /* Set custom font */ @@ -41,14 +37,9 @@ table { margin-top: 5%; } - - - - -/* Display the image centered on the left */ +/* Format the different images*/ #form_icon, #form_icon_prompt { - /* Center the image */ display: flex; justify-content: center; align-items: center; @@ -76,8 +67,6 @@ table { transform: translate(-50%, 25%); } - - /* Style input fields */ .input_container { background-color: var(--input_bg); @@ -103,7 +92,6 @@ table { width: 100%; } - .input_field { /* Customize the input tag with lighter font and some padding*/ color: var(--icon_color); @@ -159,6 +147,13 @@ table { background-color: var(--deny_hover); } +/* Format the error messages */ +.err_msg { + color: red; + font-weight: bold; + font-size: 110%; +} + /* General page styling */ h1, @@ -175,9 +170,6 @@ i { color: var(--icon_color); } - - - /* Make it responsive */ @media screen and (max-width:768px) {