feat: change password support

This commit is contained in:
Timothy J. Baek 2023-12-29 00:12:30 -08:00
parent 450b9b6aef
commit 9bd48ffd93
3 changed files with 108 additions and 1 deletions

View file

@ -64,6 +64,11 @@ class SigninForm(BaseModel):
password: str password: str
class UpdatePasswordForm(BaseModel):
password: str
new_password: str
class SignupForm(BaseModel): class SignupForm(BaseModel):
name: str name: str
email: str email: str
@ -109,7 +114,24 @@ class AuthsTable:
except: except:
return None return None
def delete_auth_by_id(self, id: str) -> Optional[UserModel]: def update_user_password_by_id(
self, id: str, password: str, new_password: str
) -> bool:
try:
auth = Auth.get(Auth.id == id, Auth.active == True)
if auth:
if verify_password(password, auth.password):
query = Auth.update(password=new_password).where(Auth.id == id)
result = query.execute()
print(result)
return True
else:
return False
return True
except:
return False
def delete_auth_by_id(self, id: str) -> bool:
try: try:
# Delete User # Delete User
result = Users.delete_user_by_id(id) result = Users.delete_user_by_id(id)

View file

@ -11,6 +11,7 @@ import uuid
from apps.web.models.auths import ( from apps.web.models.auths import (
SigninForm, SigninForm,
SignupForm, SignupForm,
UpdatePasswordForm,
UserResponse, UserResponse,
SigninResponse, SigninResponse,
Auths, Auths,
@ -53,6 +54,24 @@ async def get_session_user(cred=Depends(bearer_scheme)):
) )
############################
# Update Password
############################
@router.post("/update/password", response_model=bool)
async def update_password(form_data: UpdatePasswordForm, cred=Depends(bearer_scheme)):
token = cred.credentials
user = Users.get_user_by_token(token)
if user:
hashed = get_password_hash(form_data.new_password)
return Auths.update_user_password_by_id(user.id, form_data.password, hashed)
else:
raise HTTPException(400, detail=ERROR_MESSAGES.INVALID_CRED)
############################ ############################
# SignIn # SignIn
############################ ############################

View file

@ -118,6 +118,11 @@
let authType = 'Basic'; let authType = 'Basic';
let authContent = ''; let authContent = '';
// Account
let currentPassword = '';
let newPassword = '';
let newPasswordConfirm = '';
// About // About
let ollamaVersion = ''; let ollamaVersion = '';
@ -1843,6 +1848,67 @@
</button> </button>
</div> </div>
</form> </form>
{:else if selectedTab === 'account'}
<form
class="flex flex-col h-full text-sm"
on:submit|preventDefault={() => {
console.log('change save');
}}
>
<div class=" mb-2.5 font-medium">Change Password</div>
<div class=" space-y-1.5">
<div class="flex flex-col w-full">
<div class=" mb-1 text-xs text-gray-500">Current Password</div>
<div class="flex-1">
<input
class="w-full rounded py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-800 outline-none"
type="password"
bind:value={currentPassword}
autocomplete="current-password"
required
/>
</div>
</div>
<div class="flex flex-col w-full">
<div class=" mb-1 text-xs text-gray-500">New Password</div>
<div class="flex-1">
<input
class="w-full rounded py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-800 outline-none"
type="password"
bind:value={newPassword}
autocomplete="new-password"
required
/>
</div>
</div>
<div class="flex flex-col w-full">
<div class=" mb-1 text-xs text-gray-500">Confirm Password</div>
<div class="flex-1">
<input
class="w-full rounded py-2 px-4 text-sm dark:text-gray-300 dark:bg-gray-800 outline-none"
type="password"
bind:value={newPasswordConfirm}
autocomplete="off"
required
/>
</div>
</div>
</div>
<div class="mt-3 flex justify-end">
<button
class=" px-4 py-2 text-xs bg-gray-800 hover:bg-gray-900 dark:bg-gray-700 dark:hover:bg-gray-800 text-gray-100 transition rounded-md font-medium"
>
Update password
</button>
</div>
</form>
{:else if selectedTab === 'about'} {:else if selectedTab === 'about'}
<div class="flex flex-col h-full justify-between space-y-3 text-sm mb-6"> <div class="flex flex-col h-full justify-between space-y-3 text-sm mb-6">
<div class=" space-y-3"> <div class=" space-y-3">