From 8ebe560e7363fc4f59c439fcf3bef902e9421b4d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Janis=20Da=CC=88hne?= <janis.daehne@informatik.uni-halle.de>
Date: Tue, 15 Jun 2021 14:41:51 +0200
Subject: [PATCH] - added new auth version

---
 src/components/login/loginForm.tsx            | 22 ++++++++++---------
 .../ownInformationSettingsView.tsx            |  4 ++++
 src/constants.ts                              |  2 +-
 src/helpers/cryptoHelper.ts                   |  9 ++++++++
 .../getUserDataAndSettingsReducer.ts          |  2 ++
 .../settingsSite/settingsSiteReducers.ts      |  2 ++
 .../settingsSite/userDataCopyReducer.ts       |  4 ++++
 .../userDataCopyReducerValidation.ts          |  4 +++-
 src/types/login.ts                            |  3 ++-
 src/types/userData.ts                         |  5 +++++
 10 files changed, 44 insertions(+), 13 deletions(-)

diff --git a/src/components/login/loginForm.tsx b/src/components/login/loginForm.tsx
index 6e65a2aa..a4de878c 100644
--- a/src/components/login/loginForm.tsx
+++ b/src/components/login/loginForm.tsx
@@ -39,6 +39,7 @@ import {LoginTimeoutHelper} from '../../helpers/loginTimeoutHelper'
 import {initial} from '../../state/reducers/settingsSite/settingsSiteReducers'
 import {reset_Global} from '../../state/reducers/globalActions'
 import * as constants from '../../constants'
+import {hashBase64} from '../../helpers/cryptoHelper'
 
 
 //const css = require('./styles.styl');
@@ -127,7 +128,8 @@ class LoginForm extends React.Component<Props, any> {
                              token: this.props.id,
                              password: this.props.loginProvider === `ldap`
                                        ?  this.props.pw
-                                       : cryptoHelper.hash(this.props.pw)
+                                       : cryptoHelper.hash(this.props.pw),
+                              passwordBase64: cryptoHelper.hashBase64(this.props.pw)
                            },
             this.props.loginProvider
           )
@@ -224,15 +226,15 @@ class LoginForm extends React.Component<Props, any> {
                           this.props.setLoginProvider('normal')
                         }}
                       />
-                      <Radio
-                        label={getI18n(this.props.langId, 'LDAP')}
-                        name='loginProvider'
-                        value='ldap'
-                        checked={this.props.loginProvider === 'ldap'}
-                        onChange={(e,data) => {
-                          this.props.setLoginProvider('ldap')
-                        }}
-                      />
+                      {/*<Radio*/}
+                      {/*  label={getI18n(this.props.langId, 'LDAP')}*/}
+                      {/*  name='loginProvider'*/}
+                      {/*  value='ldap'*/}
+                      {/*  checked={this.props.loginProvider === 'ldap'}*/}
+                      {/*  onChange={(e,data) => {*/}
+                      {/*    this.props.setLoginProvider('ldap')*/}
+                      {/*  }}*/}
+                      {/*/>*/}
                     </div>
                   </Form.Field>
 
diff --git a/src/components/sites/ownSettingsSite/ownInformationSettingsView.tsx b/src/components/sites/ownSettingsSite/ownInformationSettingsView.tsx
index 2f667733..471acef7 100644
--- a/src/components/sites/ownSettingsSite/ownInformationSettingsView.tsx
+++ b/src/components/sites/ownSettingsSite/ownInformationSettingsView.tsx
@@ -117,7 +117,11 @@ class OwnInformationSettingsView extends React.Component<Props, any> {
                                                           email: this.props.userDataCopy.email,
                                                           oldPassword: cryptoHelper.hash(
                                                             this.props.userDataCopy.oldPassword),
+                                                         oldPasswordBase64: cryptoHelper.hashBase64(
+                                                           this.props.userDataCopy.oldPassword),
                                                           newPassword: cryptoHelper.hash(
+                                                            this.props.userDataCopy.newPassword),
+                                                          newPasswordBase64: cryptoHelper.hashBase64(
                                                             this.props.userDataCopy.newPassword)
                                                         })
                        }}
diff --git a/src/constants.ts b/src/constants.ts
index 6ca35e4f..7170316d 100644
--- a/src/constants.ts
+++ b/src/constants.ts
@@ -13,7 +13,7 @@ import Logger from './helpers/logger'
  * y - breaking changes / new features
  * z - fixes, small changes
  */
-export const versionString = '2.12.0'
+export const versionString = '2.13.0'
 
 
 export const supportMail = 'yapex@informatik.uni-halle.de'
diff --git a/src/helpers/cryptoHelper.ts b/src/helpers/cryptoHelper.ts
index d5d904d4..199f6568 100644
--- a/src/helpers/cryptoHelper.ts
+++ b/src/helpers/cryptoHelper.ts
@@ -18,3 +18,12 @@ export function hash(pw: string): string {
 
   return crypto.SHA512(pw).toString(crypto.enc.Hex)
 }
+
+export function hashBase64(pw: string): string {
+
+  if (!crypto) {
+    throw new Error('no cryptojs found !')
+  }
+
+  return crypto.SHA256(pw).toString(crypto.enc.Base64)
+}
diff --git a/src/state/reducers/settingsSite/getUserDataAndSettingsReducer.ts b/src/state/reducers/settingsSite/getUserDataAndSettingsReducer.ts
index d7342a99..de31b981 100644
--- a/src/state/reducers/settingsSite/getUserDataAndSettingsReducer.ts
+++ b/src/state/reducers/settingsSite/getUserDataAndSettingsReducer.ts
@@ -61,8 +61,10 @@ export function reducer(state: State = initial, action: AllActions): State {
         userDataCopy: {
           email: action.payload.email,
           oldPassword: '',
+          oldPasswordBase64: '',
           newPassword: '',
           newPasswordCheck: '',
+          newPasswordBase64: '',
           isValid: false
         },
         userSettingsCopy: action.payload.settings
diff --git a/src/state/reducers/settingsSite/settingsSiteReducers.ts b/src/state/reducers/settingsSite/settingsSiteReducers.ts
index a7b8e60c..254a3f26 100644
--- a/src/state/reducers/settingsSite/settingsSiteReducers.ts
+++ b/src/state/reducers/settingsSite/settingsSiteReducers.ts
@@ -140,8 +140,10 @@ export function reducer(state: State = initial, action: AllActions): State {
         userDataCopy: {
           email: action.userData.email,
           oldPassword: '',
+          oldPasswordBase64: '',
           newPassword: '',
           newPasswordCheck: '',
+          newPasswordBase64: '',
           isValid: false
         },
         userSettingsCopy: action.userData.settings
diff --git a/src/state/reducers/settingsSite/userDataCopyReducer.ts b/src/state/reducers/settingsSite/userDataCopyReducer.ts
index 98e2704c..de6120b9 100644
--- a/src/state/reducers/settingsSite/userDataCopyReducer.ts
+++ b/src/state/reducers/settingsSite/userDataCopyReducer.ts
@@ -19,7 +19,9 @@ export const initial: State = {
   email: '',
   newPassword: '',
   oldPassword: '',
+  oldPasswordBase64: '',
   newPasswordCheck: '',
+  newPasswordBase64: '',
   isValid: false
 }
 
@@ -27,6 +29,8 @@ export const validationRules = getValidationCollection<EmailAndPasswordTuple>({
   email: [isEmailAndNotEmpty],
   newPassword: [isEmptyOrNotSpaces],
   oldPassword: [],
+  oldPasswordBase64: [],
+  newPasswordBase64: [],
 })
 
 
diff --git a/src/state/reducers/settingsSite/userDataCopyReducerValidation.ts b/src/state/reducers/settingsSite/userDataCopyReducerValidation.ts
index a5fd3e74..6705a96c 100644
--- a/src/state/reducers/settingsSite/userDataCopyReducerValidation.ts
+++ b/src/state/reducers/settingsSite/userDataCopyReducerValidation.ts
@@ -7,4 +7,6 @@ export const validationMessageKeys = getValidationMessagesCollection<EmailAndPas
   email: getI18n(globalState.getState().i18nState.langId,'Field value is not a valid email'),
   newPassword: getI18n(globalState.getState().i18nState.langId,'Field must not be empty or just whitespaces'),
   oldPassword: '', //can be empty if the user is new??
-})
\ No newline at end of file
+  oldPasswordBase64: '',
+  newPasswordBase64: '',
+})
diff --git a/src/types/login.ts b/src/types/login.ts
index 99a3a875..1b687072 100644
--- a/src/types/login.ts
+++ b/src/types/login.ts
@@ -11,6 +11,7 @@
 export interface LoginCredentialsForBackend {
   readonly token: string
   readonly password: string
+  readonly passwordBase64: string
 }
 
 export interface RegisterUserForBackend {
@@ -19,4 +20,4 @@ export interface RegisterUserForBackend {
   readonly firstName: string
   readonly lastName: string
   readonly email: string
-}
\ No newline at end of file
+}
diff --git a/src/types/userData.ts b/src/types/userData.ts
index 50301141..b24634ab 100644
--- a/src/types/userData.ts
+++ b/src/types/userData.ts
@@ -152,10 +152,15 @@ export interface EmailAndPasswordTuple {
    * the old password to verify that the user is allowed to change his/her password
    */
   readonly oldPassword: string
+  readonly oldPasswordBase64: string
   /**
    * the new password
    */
   readonly newPassword: string
+  /**
+   * password base64 encoded
+   */
+  readonly newPasswordBase64: string
 }
 /**
  * the data to set the new user data (called by an admin)
-- 
GitLab