mirror of
https://gitlab.com/comunic/comunicapiv3
synced 2024-11-22 21:39:21 +00:00
Can create admin account from API
This commit is contained in:
parent
cbf8d9b100
commit
e0b953ba01
20
src/api_data/admin/admin_res_create_account.rs
Normal file
20
src/api_data/admin/admin_res_create_account.rs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
//! # Administrator account creation result
|
||||||
|
//!
|
||||||
|
//! @author Pierre Hubert
|
||||||
|
|
||||||
|
use serde::Serialize;
|
||||||
|
|
||||||
|
use crate::data::admin::AdminID;
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
pub struct AdminResCreateAccount {
|
||||||
|
id: u64
|
||||||
|
}
|
||||||
|
|
||||||
|
impl AdminResCreateAccount {
|
||||||
|
pub fn new(id: AdminID) -> Self {
|
||||||
|
Self {
|
||||||
|
id: id.id()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -9,3 +9,4 @@ pub mod admin_info_api;
|
|||||||
pub mod admin_keys_api;
|
pub mod admin_keys_api;
|
||||||
pub mod admin_res_create_reset_token;
|
pub mod admin_res_create_reset_token;
|
||||||
pub mod admin_role_api;
|
pub mod admin_role_api;
|
||||||
|
pub mod admin_res_create_account;
|
@ -7,14 +7,25 @@ use crate::api_data::admin::admin_auth_options::AdminAuthOptions;
|
|||||||
use crate::api_data::admin::admin_auth_success::AdminAuthSuccess;
|
use crate::api_data::admin::admin_auth_success::AdminAuthSuccess;
|
||||||
use crate::api_data::admin::admin_id_api::AdminIDAPI;
|
use crate::api_data::admin::admin_id_api::AdminIDAPI;
|
||||||
use crate::api_data::admin::admin_info_api::AdminInfoAPI;
|
use crate::api_data::admin::admin_info_api::AdminInfoAPI;
|
||||||
|
use crate::api_data::admin::admin_res_create_account::AdminResCreateAccount;
|
||||||
use crate::api_data::admin::admin_res_create_reset_token::AdminResCreateResetToken;
|
use crate::api_data::admin::admin_res_create_reset_token::AdminResCreateResetToken;
|
||||||
use crate::data::admin::NewAdminGeneralSettings;
|
use crate::data::admin::{NewAdmin, NewAdminGeneralSettings};
|
||||||
use crate::data::base_request_handler::BaseRequestHandler;
|
use crate::data::base_request_handler::BaseRequestHandler;
|
||||||
use crate::data::http_request_handler::HttpRequestHandler;
|
use crate::data::http_request_handler::HttpRequestHandler;
|
||||||
use crate::helpers::{admin_access_token_helper, admin_account_helper, admin_account_key_helper};
|
use crate::helpers::{admin_access_token_helper, admin_account_helper, admin_account_key_helper};
|
||||||
use crate::routes::RequestResult;
|
use crate::routes::RequestResult;
|
||||||
use crate::utils::date_utils::time;
|
use crate::utils::date_utils::time;
|
||||||
|
|
||||||
|
/// Create a new administrator account
|
||||||
|
pub fn create(r: &mut HttpRequestHandler) -> RequestResult {
|
||||||
|
let email = r.post_email("mail")?;
|
||||||
|
let name = r.post_string_opt("name", 3, true)?;
|
||||||
|
|
||||||
|
let admin_id = admin_account_helper::create(&NewAdmin { name, email })?;
|
||||||
|
|
||||||
|
r.set_response(AdminResCreateAccount::new(admin_id))
|
||||||
|
}
|
||||||
|
|
||||||
/// Get admin auth options
|
/// Get admin auth options
|
||||||
pub fn get_auth_options(r: &mut HttpRequestHandler) -> RequestResult {
|
pub fn get_auth_options(r: &mut HttpRequestHandler) -> RequestResult {
|
||||||
let mail = r.post_email("mail")?;
|
let mail = r.post_email("mail")?;
|
||||||
|
@ -20,8 +20,6 @@ pub fn get_list(r: &mut HttpRequestHandler) -> RequestResult {
|
|||||||
|
|
||||||
/// Toggle the status of a role for an admin
|
/// Toggle the status of a role for an admin
|
||||||
pub fn toggle(r: &mut HttpRequestHandler) -> RequestResult {
|
pub fn toggle(r: &mut HttpRequestHandler) -> RequestResult {
|
||||||
r.check_admin_has_role(AdminRole::MANAGE_ADMINS)?;
|
|
||||||
|
|
||||||
let admin_id = r.post_admin_id("adminID")?;
|
let admin_id = r.post_admin_id("adminID")?;
|
||||||
let enable = r.post_bool("enable")?;
|
let enable = r.post_bool("enable")?;
|
||||||
let role_str = r.post_string("role")?;
|
let role_str = r.post_string("role")?;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
|
|
||||||
|
use crate::constants::admin::AdminRole;
|
||||||
use crate::controllers::{account_controller, comments_controller, conversations_controller, forez_controller, friends_controller, groups_controller, likes_controller, notifications_controller, posts_controller, push_notifications_controller, search_controller, server_controller, settings_controller, surveys_controller, user_controller, user_ws_controller, virtual_directory_controller, web_app_controller};
|
use crate::controllers::{account_controller, comments_controller, conversations_controller, forez_controller, friends_controller, groups_controller, likes_controller, notifications_controller, posts_controller, push_notifications_controller, search_controller, server_controller, settings_controller, surveys_controller, user_controller, user_ws_controller, virtual_directory_controller, web_app_controller};
|
||||||
use crate::controllers::admin::*;
|
use crate::controllers::admin::*;
|
||||||
use crate::data::http_request_handler::HttpRequestHandler;
|
use crate::data::http_request_handler::HttpRequestHandler;
|
||||||
@ -81,6 +82,9 @@ pub struct Route {
|
|||||||
|
|
||||||
/// Request rate policy
|
/// Request rate policy
|
||||||
pub limit_policy: LimitPolicy,
|
pub limit_policy: LimitPolicy,
|
||||||
|
|
||||||
|
/// Administrator role required to use the route
|
||||||
|
pub admin_role: Option<AdminRole>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Route {
|
impl Route {
|
||||||
@ -92,6 +96,7 @@ impl Route {
|
|||||||
uri,
|
uri,
|
||||||
func,
|
func,
|
||||||
limit_policy: LimitPolicy::NONE,
|
limit_policy: LimitPolicy::NONE,
|
||||||
|
admin_role: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,6 +108,7 @@ impl Route {
|
|||||||
uri,
|
uri,
|
||||||
func,
|
func,
|
||||||
limit_policy: LimitPolicy::NONE,
|
limit_policy: LimitPolicy::NONE,
|
||||||
|
admin_role: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,6 +120,7 @@ impl Route {
|
|||||||
uri,
|
uri,
|
||||||
func,
|
func,
|
||||||
limit_policy,
|
limit_policy,
|
||||||
|
admin_role: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,6 +132,7 @@ impl Route {
|
|||||||
uri,
|
uri,
|
||||||
func,
|
func,
|
||||||
limit_policy: LimitPolicy::NONE,
|
limit_policy: LimitPolicy::NONE,
|
||||||
|
admin_role: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,6 +144,7 @@ impl Route {
|
|||||||
uri,
|
uri,
|
||||||
func,
|
func,
|
||||||
limit_policy,
|
limit_policy,
|
||||||
|
admin_role: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -147,6 +156,7 @@ impl Route {
|
|||||||
uri,
|
uri,
|
||||||
func,
|
func,
|
||||||
limit_policy,
|
limit_policy,
|
||||||
|
admin_role: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,6 +168,19 @@ impl Route {
|
|||||||
uri,
|
uri,
|
||||||
func,
|
func,
|
||||||
limit_policy: LimitPolicy::NONE,
|
limit_policy: LimitPolicy::NONE,
|
||||||
|
admin_role: None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn admin_post_restricted(uri: &'static str, func: RequestProcess, role: AdminRole) -> Route {
|
||||||
|
Route {
|
||||||
|
scope: RouteScope::ADMIN,
|
||||||
|
method: POST,
|
||||||
|
need_login: true,
|
||||||
|
uri,
|
||||||
|
func,
|
||||||
|
limit_policy: LimitPolicy::NONE,
|
||||||
|
admin_role: Some(role),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -350,6 +373,7 @@ pub fn get_routes() -> Vec<Route> {
|
|||||||
Route::limited_admin_post_without_login("/admin/accounts/auth_options", Box::new(admin_account_controller::get_auth_options), LimitPolicy::FAILURE(5)),
|
Route::limited_admin_post_without_login("/admin/accounts/auth_options", Box::new(admin_account_controller::get_auth_options), LimitPolicy::FAILURE(5)),
|
||||||
Route::limited_admin_post_without_login("/admin/accounts/auth_with_reset_token", Box::new(admin_account_controller::auth_with_reset_token), LimitPolicy::FAILURE(5)),
|
Route::limited_admin_post_without_login("/admin/accounts/auth_with_reset_token", Box::new(admin_account_controller::auth_with_reset_token), LimitPolicy::FAILURE(5)),
|
||||||
Route::admin_post("/admin/accounts/sign_out", Box::new(admin_account_controller::sign_out)),
|
Route::admin_post("/admin/accounts/sign_out", Box::new(admin_account_controller::sign_out)),
|
||||||
|
Route::admin_post_restricted("/admin/accounts/create", Box::new(admin_account_controller::create), AdminRole::MANAGE_ADMINS),
|
||||||
Route::admin_post("/admin/accounts/id", Box::new(admin_account_controller::get_admin_id)),
|
Route::admin_post("/admin/accounts/id", Box::new(admin_account_controller::get_admin_id)),
|
||||||
Route::admin_post("/admin/accounts/list", Box::new(admin_account_controller::get_list)),
|
Route::admin_post("/admin/accounts/list", Box::new(admin_account_controller::get_list)),
|
||||||
Route::admin_post("/admin/accounts/info", Box::new(admin_account_controller::get_admin_info)),
|
Route::admin_post("/admin/accounts/info", Box::new(admin_account_controller::get_admin_info)),
|
||||||
@ -366,6 +390,6 @@ pub fn get_routes() -> Vec<Route> {
|
|||||||
|
|
||||||
// Admin roles controller
|
// Admin roles controller
|
||||||
Route::admin_post("/admin/roles/list", Box::new(admin_roles_controller::get_list)),
|
Route::admin_post("/admin/roles/list", Box::new(admin_roles_controller::get_list)),
|
||||||
Route::admin_post("/admin/roles/toggle", Box::new(admin_roles_controller::toggle)),
|
Route::admin_post_restricted("/admin/roles/toggle", Box::new(admin_roles_controller::toggle), AdminRole::MANAGE_ADMINS),
|
||||||
]
|
]
|
||||||
}
|
}
|
@ -230,6 +230,10 @@ fn process_simple_route(route: &Route, req: &mut HttpRequestHandler) -> RequestR
|
|||||||
if route.need_login {
|
if route.need_login {
|
||||||
req.check_admin_access_token()?;
|
req.check_admin_access_token()?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let Some(role) = route.admin_role {
|
||||||
|
req.check_admin_has_role(role)?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user