Skip to content

Commit a12327c

Browse files
feature: change password service
1 parent 85ff9ce commit a12327c

4 files changed

Lines changed: 88 additions & 63 deletions

File tree

.github/workflows/release.yml

Lines changed: 43 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -42,53 +42,51 @@ jobs:
4242
uses: softprops/action-gh-release@v2
4343
env:
4444
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
45-
46-
deploy:
47-
runs-on: ubuntu-latest
48-
needs: build
49-
steps:
50-
- uses: actions/checkout@v4
5145

52-
- name: Add SSH key
53-
run: |
54-
mkdir -p ~/.ssh
55-
echo "${{ secrets.HELIOS_SSH }}" > ~/.ssh/helios_ssh
56-
chmod 600 ~/.ssh/helios_ssh
46+
# deploy:
47+
# runs-on: ubuntu-latest
48+
# needs: build
49+
# steps:
50+
# - uses: actions/checkout@v4
5751

58-
- name: Form environment variables
59-
run: |
60-
echo "GHCR_PAT=\"${{ secrets.GHCR_PAT }}\"" >> .env
61-
echo "MASTER_BACKEND_PORT=\"${{ secrets.MASTER_BACKEND_PORT }}\"" >> .env
62-
echo "MASTER_BACKEND_URL=\"${{ secrets.MASTER_BACKEND_URL }}\"" >> .env
63-
echo "MASTER_METRICS_PORT=\"${{ secrets.MASTER_METRICS_PORT }}\"" >> .env
64-
echo "MASTER_METRICS_URL=\"${{ secrets.MASTER_METRICS_URL }}\"" >> .env
65-
echo "DATABASE_PORT=\"${{ secrets.DATABASE_PORT }}\"" >> .env
66-
echo "DATABASE_NAME=\"${{ secrets.DATABASE_NAME }}\"" >> .env
67-
echo "DATABASE_USER=\"${{ secrets.DATABASE_USER }}\"" >> .env
68-
echo "DATABASE_PASSWORD=\"${{ secrets.DATABASE_PASSWORD }}\"" >> .env
69-
echo "DATABASE_HOST=\"${{ secrets.DATABASE_HOST }}\"" >> .env
70-
echo "DATABASE_URL=\"${{ secrets.DATABASE_URL }}\"" >> .env
71-
echo "JWT_ACCESS_SECRET=\"${{ secrets.JWT_ACCESS_SECRET }}\"" >> .env
72-
echo "JWT_REFRESH_SECRET=\"${{ secrets.JWT_REFRESH_SECRET }}\"" >> .env
73-
echo "RUST_ENV=\"${{ secrets.RUST_ENV }}\"" >> .env
74-
echo "HELIOS_DOMAIN=\"${{ secrets.HELIOS_DOMAIN }}\"" >> .env
75-
echo "DO_AUTH_TOKEN=\"${{ secrets.DO_AUTH_TOKEN }}\"" >> .env
76-
echo "TRAEFIK_AUTH=\"${{ secrets.TRAEFIK_AUTH }}\"" >> .env
77-
echo "GRAFANA_USER=\"${{ secrets.GRAFANA_USER }}\"" >> .env
78-
echo "GRAFANA_PASSWORD=\"${{ secrets.GRAFANA_PASSWORD }}\"" >> .env
52+
# - name: Add SSH key
53+
# run: |
54+
# mkdir -p ~/.ssh
55+
# echo "${{ secrets.HELIOS_SSH }}" > ~/.ssh/helios_ssh
56+
# chmod 600 ~/.ssh/helios_ssh
7957

80-
- name: Setup to DigitalOcean
81-
run: |
82-
ssh -o StrictHostKeyChecking=no -i ~/.ssh/helios_ssh -p ${{ secrets.SSH_PORT }} ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "echo ${{ secrets.GHCR_PAT }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin"
83-
ssh -o StrictHostKeyChecking=no -i ~/.ssh/helios_ssh -p ${{ secrets.SSH_PORT }} ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "rm -rf docker-compose.yml .env compose/"
84-
scp -o StrictHostKeyChecking=no -i ~/.ssh/helios_ssh -P ${{ secrets.SSH_PORT }} docker-compose.yml ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:~/docker-compose.yml
85-
scp -o StrictHostKeyChecking=no -i ~/.ssh/helios_ssh -P ${{ secrets.SSH_PORT }} .env ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:~/.env
86-
scp -o StrictHostKeyChecking=no -i ~/.ssh/helios_ssh -P ${{ secrets.SSH_PORT }} -r compose/ ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:~/compose/
87-
88-
- name: Deploy to DigitalOcean
89-
run: |
90-
ssh -o StrictHostKeyChecking=no -i ~/.ssh/helios_ssh -p ${{ secrets.SSH_PORT }} ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "docker compose down"
91-
ssh -o StrictHostKeyChecking=no -i ~/.ssh/helios_ssh -p ${{ secrets.SSH_PORT }} ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "docker compose pull"
92-
ssh -o StrictHostKeyChecking=no -i ~/.ssh/helios_ssh -p ${{ secrets.SSH_PORT }} ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "docker compose up -d --build"
58+
# - name: Form environment variables
59+
# run: |
60+
# echo "GHCR_PAT=\"${{ secrets.GHCR_PAT }}\"" >> .env
61+
# echo "MASTER_BACKEND_PORT=\"${{ secrets.MASTER_BACKEND_PORT }}\"" >> .env
62+
# echo "MASTER_BACKEND_URL=\"${{ secrets.MASTER_BACKEND_URL }}\"" >> .env
63+
# echo "MASTER_METRICS_PORT=\"${{ secrets.MASTER_METRICS_PORT }}\"" >> .env
64+
# echo "MASTER_METRICS_URL=\"${{ secrets.MASTER_METRICS_URL }}\"" >> .env
65+
# echo "DATABASE_PORT=\"${{ secrets.DATABASE_PORT }}\"" >> .env
66+
# echo "DATABASE_NAME=\"${{ secrets.DATABASE_NAME }}\"" >> .env
67+
# echo "DATABASE_USER=\"${{ secrets.DATABASE_USER }}\"" >> .env
68+
# echo "DATABASE_PASSWORD=\"${{ secrets.DATABASE_PASSWORD }}\"" >> .env
69+
# echo "DATABASE_HOST=\"${{ secrets.DATABASE_HOST }}\"" >> .env
70+
# echo "DATABASE_URL=\"${{ secrets.DATABASE_URL }}\"" >> .env
71+
# echo "JWT_ACCESS_SECRET=\"${{ secrets.JWT_ACCESS_SECRET }}\"" >> .env
72+
# echo "JWT_REFRESH_SECRET=\"${{ secrets.JWT_REFRESH_SECRET }}\"" >> .env
73+
# echo "RUST_ENV=\"${{ secrets.RUST_ENV }}\"" >> .env
74+
# echo "HELIOS_DOMAIN=\"${{ secrets.HELIOS_DOMAIN }}\"" >> .env
75+
# echo "DO_AUTH_TOKEN=\"${{ secrets.DO_AUTH_TOKEN }}\"" >> .env
76+
# echo "TRAEFIK_AUTH=\"${{ secrets.TRAEFIK_AUTH }}\"" >> .env
77+
# echo "GRAFANA_USER=\"${{ secrets.GRAFANA_USER }}\"" >> .env
78+
# echo "GRAFANA_PASSWORD=\"${{ secrets.GRAFANA_PASSWORD }}\"" >> .env
9379

80+
# - name: Setup to DigitalOcean
81+
# run: |
82+
# ssh -o StrictHostKeyChecking=no -i ~/.ssh/helios_ssh -p ${{ secrets.SSH_PORT }} ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "echo ${{ secrets.GHCR_PAT }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin"
83+
# ssh -o StrictHostKeyChecking=no -i ~/.ssh/helios_ssh -p ${{ secrets.SSH_PORT }} ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "rm -rf docker-compose.yml .env compose/"
84+
# scp -o StrictHostKeyChecking=no -i ~/.ssh/helios_ssh -P ${{ secrets.SSH_PORT }} docker-compose.yml ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:~/docker-compose.yml
85+
# scp -o StrictHostKeyChecking=no -i ~/.ssh/helios_ssh -P ${{ secrets.SSH_PORT }} .env ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:~/.env
86+
# scp -o StrictHostKeyChecking=no -i ~/.ssh/helios_ssh -P ${{ secrets.SSH_PORT }} -r compose/ ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:~/compose/
9487

88+
# - name: Deploy to DigitalOcean
89+
# run: |
90+
# ssh -o StrictHostKeyChecking=no -i ~/.ssh/helios_ssh -p ${{ secrets.SSH_PORT }} ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "docker compose down"
91+
# ssh -o StrictHostKeyChecking=no -i ~/.ssh/helios_ssh -p ${{ secrets.SSH_PORT }} ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "docker compose pull"
92+
# ssh -o StrictHostKeyChecking=no -i ~/.ssh/helios_ssh -p ${{ secrets.SSH_PORT }} ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "docker compose up -d --build"

src/enums/errors/external/auth.rs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ use crate::{dto::response::error::Response, enums::errors::internal};
1111
pub enum Auth {
1212
WrongToken,
1313
WrongPassword,
14-
WrongEmail,
15-
TokenCreation,
1614
UserNotFound,
1715
UserAlreadyExists,
1816
PasswordIsSame,
@@ -26,8 +24,6 @@ impl std::fmt::Display for Auth {
2624
match self {
2725
Auth::WrongToken => write!(f, "WrongToken"),
2826
Auth::WrongPassword => write!(f, "WrongPassword"),
29-
Auth::WrongEmail => write!(f, "WrongEmail"),
30-
Auth::TokenCreation => write!(f, "TokenCreation"),
3127
Auth::UserNotFound => write!(f, "UserNotFound"),
3228
Auth::UserAlreadyExists => write!(f, "UserAlreadyExists"),
3329
Auth::PasswordIsSame => write!(f, "PasswordIsSame"),
@@ -43,8 +39,6 @@ impl IntoResponse for Auth {
4339
let (status, message) = match self {
4440
Auth::WrongToken => (StatusCode::UNAUTHORIZED, "Wrong token"),
4541
Auth::WrongPassword => (StatusCode::UNAUTHORIZED, "Wrong password"),
46-
Auth::WrongEmail => (StatusCode::UNAUTHORIZED, "Wrong email"),
47-
Auth::TokenCreation => (StatusCode::INTERNAL_SERVER_ERROR, "Token creation error"),
4842
Auth::UserNotFound => (StatusCode::NOT_FOUND, "User not found"),
4943
Auth::UserAlreadyExists => (StatusCode::CONFLICT, "User already exists"),
5044
Auth::PasswordIsSame => (StatusCode::CONFLICT, "Password is the same"),
@@ -69,8 +63,6 @@ impl From<internal::Auth> for Auth {
6963
fn from(error: internal::Auth) -> Self {
7064
match error {
7165
internal::Auth::WrongPassword => Auth::WrongPassword,
72-
internal::Auth::WrongEmail => Auth::WrongEmail,
73-
internal::Auth::TokenCreation => Auth::TokenCreation,
7466
internal::Auth::UserNotFound => Auth::UserNotFound,
7567
internal::Auth::UserAlreadyExists => Auth::UserAlreadyExists,
7668
internal::Auth::PasswordIsSame => Auth::PasswordIsSame,

src/enums/errors/internal/auth.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
#[derive(Debug, Clone)]
2+
#[allow(clippy::enum_variant_names)]
23
pub enum Auth {
34
WrongPassword,
4-
WrongEmail,
5-
TokenCreation,
65
UserNotFound,
76
UserAlreadyExists,
87
PasswordIsSame,
@@ -15,8 +14,6 @@ impl std::fmt::Display for Auth {
1514
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1615
match self {
1716
Auth::WrongPassword => write!(f, "Wrong password"),
18-
Auth::WrongEmail => write!(f, "Wrong email"),
19-
Auth::TokenCreation => write!(f, "Token creation error"),
2017
Auth::UserNotFound => write!(f, "User not found"),
2118
Auth::UserAlreadyExists => write!(f, "User already exists"),
2219
Auth::PasswordIsSame => write!(f, "Password is the same"),
Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,49 @@
1+
use diesel::prelude::*;
2+
use tracing::{error, info};
13
use uuid::Uuid;
24

3-
use crate::{data::models::User, enums::errors::internal::Result};
5+
use crate::{
6+
data::schema,
7+
enums::errors::internal::{Auth, Error, Result},
8+
utils::hash,
9+
};
10+
11+
use super::get_by_id;
412

513
pub async fn change_password(
6-
_pool: &deadpool_diesel::postgres::Pool,
7-
_user_id: &Uuid,
8-
_new_password: &str,
9-
) -> Result<User> {
10-
todo!()
14+
pool: &deadpool_diesel::postgres::Pool,
15+
user_id: &Uuid,
16+
new_password: &str,
17+
) -> Result<()> {
18+
let conn = pool.get().await?;
19+
let user = get_by_id(pool, user_id).await?;
20+
21+
if user.classic_auth.is_none() {
22+
return Err(Error::Auth(Auth::NoClassicAuth));
23+
}
24+
25+
if hash::verify_password(new_password, &user.classic_auth.unwrap().password_hash)
26+
.await
27+
.is_ok()
28+
{
29+
error!("Password is the same for user: {}", user_id);
30+
return Err(Error::Auth(Auth::PasswordIsSame));
31+
}
32+
33+
let new_password_hash = hash::hash_password(new_password).await?;
34+
let user_id = *user_id;
35+
36+
conn.interact(move |_| {
37+
let _ = diesel::update(schema::user::table.find(user_id))
38+
.set(schema::user::updated_at.eq(diesel::dsl::now));
39+
let _ = diesel::update(
40+
schema::classic_auth::table.filter(schema::classic_auth::user_id.eq(user_id)),
41+
)
42+
.set(schema::classic_auth::password_hash.eq(new_password_hash));
43+
})
44+
.await?;
45+
46+
info!("Password changed successfully for user: {}", user_id);
47+
48+
Ok(())
1149
}

0 commit comments

Comments
 (0)