mirror of
https://github.com/LizardByte/Sunshine.git
synced 2025-01-16 16:21:02 +00:00
87774333f3
Co-authored-by: TheElixZammuto <6505622+TheElixZammuto@users.noreply.github.com>
122 lines
3.8 KiB
HTML
122 lines
3.8 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<%- header %>
|
|
<style>
|
|
.config-page {
|
|
padding: 1em;
|
|
border: 1px solid #dee2e6;
|
|
border-top: none;
|
|
}
|
|
|
|
.buttons {
|
|
padding: 1em 0;
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body id="app" v-cloak>
|
|
<Navbar></Navbar>
|
|
<div class="container">
|
|
<h1 class="my-4">{{ $t('password.password_change') }}</h1>
|
|
<form @submit.prevent="save">
|
|
<div class="card d-flex p-4 flex-row">
|
|
<div class="col-md-6 px-4">
|
|
<h4>{{ $t('password.current_creds') }}</h4>
|
|
<div class="mb-3">
|
|
<label for="currentUsername" class="form-label">{{ $t('_common.username') }}</label>
|
|
<input required type="text" class="form-control" id="currentUsername"
|
|
v-model="passwordData.currentUsername" />
|
|
<div class="form-text"> </div>
|
|
</div>
|
|
<div class="mb-3">
|
|
<label for="currentPassword" class="form-label">{{ $t('_common.password') }}</label>
|
|
<input autocomplete="current-password" type="password" class="form-control" id="currentPassword"
|
|
v-model="passwordData.currentPassword" />
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6 px-4">
|
|
<h4>{{ $t('password.new_creds') }}</h4>
|
|
<div class="mb-3">
|
|
<label for="newUsername" class="form-label">{{ $t('_common.username') }}</label>
|
|
<input type="text" class="form-control" id="newUsername" v-model="passwordData.newUsername" />
|
|
<div class="form-text">{{ $t('password.new_username_desc') }}</div>
|
|
</div>
|
|
<div class="mb-3">
|
|
<label for="newPassword" class="form-label">{{ $t('_common.password') }}</label>
|
|
<input autocomplete="new-password" required type="password" class="form-control" id="newPassword"
|
|
v-model="passwordData.newPassword" />
|
|
</div>
|
|
<div class="mb-3">
|
|
<label for="confirmNewPassword" class="form-label">{{ $t('password.confirm_password') }}</label>
|
|
<input autocomplete="new-password" required type="password" class="form-control" id="confirmNewPassword"
|
|
v-model="passwordData.confirmNewPassword" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="alert alert-danger" v-if="error"><b>Error: </b>{{error}}</div>
|
|
<div class="alert alert-success" v-if="success">
|
|
<b>{{ $t('_common.success') }}</b> {{ $t('password.success_msg') }}
|
|
</div>
|
|
<div class="mb-3 buttons">
|
|
<button class="btn btn-primary">{{ $t('_common.save') }}</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</body>
|
|
<script type="module">
|
|
import { createApp } from 'vue'
|
|
import i18n from './locale.js'
|
|
import Navbar from './Navbar.vue'
|
|
|
|
const app = createApp({
|
|
components: {
|
|
Navbar
|
|
},
|
|
data() {
|
|
return {
|
|
error: null,
|
|
success: false,
|
|
passwordData: {
|
|
currentUsername: "",
|
|
currentPassword: "",
|
|
newUsername: "",
|
|
newPassword: "",
|
|
confirmNewPassword: "",
|
|
},
|
|
};
|
|
},
|
|
methods: {
|
|
save() {
|
|
this.error = null;
|
|
fetch("/api/password", {
|
|
method: "POST",
|
|
body: JSON.stringify(this.passwordData),
|
|
}).then((r) => {
|
|
if (r.status == 200) {
|
|
r.json().then((rj) => {
|
|
if (rj.status.toString() === "true") {
|
|
this.success = true;
|
|
setTimeout(() => {
|
|
document.location.reload();
|
|
}, 5000);
|
|
} else {
|
|
this.error = rj.error;
|
|
}
|
|
});
|
|
} else {
|
|
this.error = "Internal Server Error";
|
|
}
|
|
});
|
|
},
|
|
},
|
|
});
|
|
|
|
//Wait for locale initialization, then render
|
|
i18n().then(i18n => {
|
|
app.use(i18n);
|
|
app.mount('#app');
|
|
});
|
|
</script>
|