Add authentication from upstream providers #107

Merged
pierre merged 25 commits from feat-upstream-providers into master 2023-04-27 10:10:29 +00:00
5 changed files with 34 additions and 36 deletions
Showing only changes of commit d46997de14 - Show all commits

View File

@ -18,29 +18,29 @@ use crate::utils::string_utils::rand_str;
#[derive(Template)]
#[template(path = "settings/clients_list.html")]
struct ClientsListTemplate {
_p: BaseSettingsPage,
struct ClientsListTemplate<'a> {
_p: BaseSettingsPage<'a>,
clients: Vec<Client>,
}
#[derive(Template)]
#[template(path = "settings/providers_list.html")]
struct ProvidersListTemplate {
_p: BaseSettingsPage,
struct ProvidersListTemplate<'a> {
_p: BaseSettingsPage<'a>,
providers: Vec<Provider>,
}
#[derive(Template)]
#[template(path = "settings/users_list.html")]
struct UsersListTemplate {
_p: BaseSettingsPage,
struct UsersListTemplate<'a> {
_p: BaseSettingsPage<'a>,
users: Vec<User>,
}
#[derive(Template)]
#[template(path = "settings/edit_user.html")]
struct EditUserTemplate {
_p: BaseSettingsPage,
struct EditUserTemplate<'a> {
_p: BaseSettingsPage<'a>,
u: User,
clients: Vec<Client>,
providers: Vec<Provider>,

View File

@ -12,31 +12,29 @@ use crate::data::current_user::CurrentUser;
use crate::data::remote_ip::RemoteIP;
use crate::data::user::User;
pub(crate) struct BaseSettingsPage {
pub(crate) struct BaseSettingsPage<'a> {
pub danger_message: Option<String>,
pub success_message: Option<String>,
pub page_title: &'static str,
pub app_name: &'static str,
pub is_admin: bool,
pub user_name: String,
pub user: &'a User,
pub version: &'static str,
pub ip_location_api: Option<&'static str>,
}
impl BaseSettingsPage {
impl<'a> BaseSettingsPage<'a> {
pub fn get(
page_title: &'static str,
user: &User,
user: &'a User,
danger_message: Option<String>,
success_message: Option<String>,
) -> BaseSettingsPage {
) -> BaseSettingsPage<'a> {
Self {
danger_message,
success_message,
page_title,
app_name: APP_NAME,
is_admin: user.admin,
user_name: user.username.to_string(),
user,
version: env!("CARGO_PKG_VERSION"),
ip_location_api: AppConfig::get().ip_location_service.as_deref(),
}
@ -45,15 +43,14 @@ impl BaseSettingsPage {
#[derive(Template)]
#[template(path = "settings/account_details.html")]
struct AccountDetailsPage {
_p: BaseSettingsPage,
u: User,
struct AccountDetailsPage<'a> {
_p: BaseSettingsPage<'a>,
}
#[derive(Template)]
#[template(path = "settings/change_password.html")]
struct ChangePasswordPage {
_p: BaseSettingsPage,
struct ChangePasswordPage<'a> {
_p: BaseSettingsPage<'a>,
min_pwd_len: usize,
}
@ -63,7 +60,6 @@ pub async fn account_settings_details_route(user: CurrentUser) -> impl Responder
HttpResponse::Ok().body(
AccountDetailsPage {
_p: BaseSettingsPage::get("Account details", &user, None, None),
u: user,
}
.render()
.unwrap(),

View File

@ -17,14 +17,14 @@ use crate::data::webauthn_manager::WebAuthManagerReq;
#[derive(Template)]
#[template(path = "settings/two_factors_page.html")]
struct TwoFactorsPage<'a> {
_p: BaseSettingsPage,
_p: BaseSettingsPage<'a>,
user: &'a User,
}
#[derive(Template)]
#[template(path = "settings/add_2fa_totp_page.html")]
struct AddTotpPage {
_p: BaseSettingsPage,
struct AddTotpPage<'a> {
_p: BaseSettingsPage<'a>,
qr_code: String,
account_name: String,
secret_key: String,
@ -33,8 +33,8 @@ struct AddTotpPage {
#[derive(Template)]
#[template(path = "settings/add_webauthn_page.html")]
struct AddWebauhtnPage {
_p: BaseSettingsPage,
struct AddWebauhtnPage<'a> {
_p: BaseSettingsPage<'a>,
opaque_state: String,
challenge_json: String,
max_name_len: usize,

View File

@ -5,27 +5,27 @@
<tbody>
<tr>
<th scope="row">User ID</th>
<td>{{ u.uid.0 }}</td>
<td>{{ _p.user.uid.0 }}</td>
</tr>
<tr>
<th scope="row">First name</th>
<td>{{ u.first_name }}</td>
<td>{{ _p.user.first_name }}</td>
</tr>
<tr>
<th scope="row">Last name</th>
<td>{{ u.last_name }}</td>
<td>{{ _p.user.last_name }}</td>
</tr>
<tr>
<th scope="row">Username</th>
<td>{{ u.username }}</td>
<td>{{ _p.user.username }}</td>
</tr>
<tr>
<th scope="row">Email</th>
<td>{{ u.email }}</td>
<td>{{ _p.user.email }}</td>
</tr>
<tr>
<th scope="row">Account type</th>
<td>{% if u.admin %}Admin{% else %}Regular user{% endif %}</td>
<td>{% if _p.user.admin %}Admin{% else %}Regular user{% endif %}</td>
</tr>
</tbody>
</table>

View File

@ -14,7 +14,7 @@
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto link-dark text-decoration-none">
<span class="fs-4">{{ _p.app_name }}</span>
</a>
{% if _p.is_admin %}
{% if _p.user.admin %}
<span>Version {{ _p.version }}</span>
{% endif %}
<hr>
@ -24,18 +24,20 @@
Account details
</a>
</li>
{% if _p.user.allow_local_login %}
<li>
<a href="/settings/change_password" class="nav-link link-dark">
Change password
</a>
</li>
{% endif %}
<li>
<a href="/settings/two_factors" class="nav-link link-dark">
Two-factor authentication
</a>
</li>
{% if _p.is_admin %}
{% if _p.user.admin %}
<hr/>
<li>
<a href="/admin/clients" class="nav-link link-dark">
@ -59,7 +61,7 @@
<a href="#" class="d-flex align-items-center link-dark text-decoration-none dropdown-toggle" id="dropdownUser"
data-bs-toggle="dropdown" aria-expanded="false">
<img src="/assets/img/account.png" alt="" width="32" height="32" class="rounded-circle me-2">
<strong>{{ _p.user_name }}</strong>
<strong>{{ _p.user.username }}</strong>
</a>
<ul class="dropdown-menu text-small shadow" aria-labelledby="dropdownUser">
<li><a class="dropdown-item" href="/logout">Sign out</a></li>