Implemented password changing.

git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4472 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
Cory McWilliams 2023-09-22 22:59:26 +00:00
parent 74a3efe78d
commit 4c6b44eb30
3 changed files with 45 additions and 8 deletions

View File

@ -89,9 +89,12 @@
<input type="radio" name="tab" id="guest" value="Guest" ?checked=${this.tab == 'guest'} @change=${() => self.tab_changed('guest')}></input> <input type="radio" name="tab" id="guest" value="Guest" ?checked=${this.tab == 'guest'} @change=${() => self.tab_changed('guest')}></input>
<label for="guest" id="guest_label">Guest</label> <label for="guest" id="guest_label">Guest</label>
<input type="radio" name="tab" id="change" value="Change Password" ?checked=${this.tab == 'change'} @change=${() => self.tab_changed('change')}></input>
<label for="change" id="change_label">Change Password</label>
</div> </div>
<div ?hidden=${this.tab != 'login' && this.tab != 'register'}> <div ?hidden=${this.tab != 'login' && this.tab != 'register' && this.tab != 'change'}>
<div id="error" ?hidden=${this.error === undefined} class="error"> <div id="error" ?hidden=${this.error === undefined} class="error">
${this.error} ${this.error}
</div> </div>
@ -99,14 +102,18 @@
<label for="name">Name:</label> <label for="name">Name:</label>
<input type="text" id="name" name="name"></input> <input type="text" id="name" name="name"></input>
<label for="password">Password:</label> <label for="password">${this.tab == 'change' ? 'Old ' : ''}Password:</label>
<input type="password" id="password" name="password"></input> <input type="password" id="password" name="password"></input>
<label ?hidden=${this.tab != 'register'} for="confirm">Confirm Password:</label> <label ?hidden=${this.tab != 'change'} for="new_password">New Password:</label>
<input ?hidden=${this.tab != 'register'} type="password" id="confirm" name="confirm"></input> <input ?hidden=${this.tab != 'change'} type="new_password" id="new_password" name="new_password"></input>
<label ?hidden=${this.tab != 'register' && this.tab != 'change'} for="confirm">Confirm ${this.tab == 'change' ? 'New ' : ''}Password:</label>
<input ?hidden=${this.tab != 'register' && this.tab != 'change'} type="password" id="confirm" name="confirm"></input>
<input id="loginButton" type="submit" name="submit" value="Login"></input> <input id="loginButton" type="submit" name="submit" value="Login"></input>
<input type="hidden" name="register" value="${this.tab == 'register' ? 1 : 0}"></input> <input type="hidden" name="register" value="${this.tab == 'register' ? 1 : 0}"></input>
<input type="hidden" name="change" value="${this.tab == 'change' ? 1 : 0}"></input>
</form> </form>
</div> </div>
<div ?hidden=${this.tab != 'guest'}> <div ?hidden=${this.tab != 'guest'}>

View File

@ -141,7 +141,7 @@ function handler(request, response) {
if (formData.submit == "Login") { if (formData.submit == "Login") {
let account = gDatabase.get("user:" + formData.name); let account = gDatabase.get("user:" + formData.name);
account = account ? JSON.parse(account) : account; account = account ? JSON.parse(account) : account;
if (formData.register == "1") { if (formData.register == '1') {
if (!account && if (!account &&
isNameValid(formData.name) && isNameValid(formData.name) &&
formData.password == formData.confirm) { formData.password == formData.confirm) {
@ -160,12 +160,23 @@ function handler(request, response) {
} }
session = makeJwt({name: formData.name}); session = makeJwt({name: formData.name});
account = {password: hashPassword(formData.password)}; account = {password: hashPassword(formData.password)};
gDatabase.set("user:" + formData.name, JSON.stringify(account)); gDatabase.set('user:' + formData.name, JSON.stringify(account));
if (noAdministrator()) { if (noAdministrator()) {
makeAdministrator(formData.name); makeAdministrator(formData.name);
} }
} else { } else {
loginError = "Error registering account."; loginError = 'Error registering account.';
}
} else if (formData.change == '1') {
if (account &&
isNameValid(formData.name) &&
formData.new_password == formData.confirm &&
verifyPassword(formData.password, account.password)) {
session = makeJwt({name: formData.name});
account = {password: hashPassword(formData.new_password)};
gDatabase.set('user:' + formData.name, JSON.stringify(account));
} else {
loginError = 'Error changing password.';
} }
} else { } else {
if (account && if (account &&
@ -176,7 +187,7 @@ function handler(request, response) {
makeAdministrator(formData.name); makeAdministrator(formData.name);
} }
} else { } else {
loginError = "Invalid username or password."; loginError = 'Invalid username or password.';
} }
} }
} else { } else {

View File

@ -101,6 +101,25 @@ try:
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'loginButton').click() driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'loginButton').click()
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'error') driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'error')
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'change_label').click()
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'name').send_keys('test_user')
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'password').send_keys('test_password')
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'new_password').send_keys('new_password')
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'confirm').send_keys('new_password')
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'loginButton').click()
wait.until(expected_conditions.presence_of_element_located((By.ID, 'document')))
driver.find_element(By.TAG_NAME, 'tf-navigation').shadow_root.find_element(By.LINK_TEXT, 'logout test_user').click()
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'login_label').click()
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'name').send_keys('test_user')
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'password').send_keys('test_password')
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'loginButton').click()
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'error')
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'login_label').click()
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'name').send_keys('test_user')
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'password').send_keys('new_password')
driver.find_element(By.TAG_NAME, 'tf-auth').shadow_root.find_element(By.ID, 'loginButton').click()
wait.until(expected_conditions.presence_of_element_located((By.ID, 'document')))
print('SUCCESS.') print('SUCCESS.')
finally: finally:
driver.close() driver.close()