2021-07-12 17:18:06 +02:00
|
|
|
//! # Admin : users management controller
|
|
|
|
//!
|
|
|
|
//! @author Pierre Hubert
|
|
|
|
|
2021-07-13 17:40:03 +02:00
|
|
|
use crate::api_data::admin::admin_create_password_reset_link_api::AdminCreatedPasswordResetLinkApi;
|
2021-07-12 17:50:14 +02:00
|
|
|
use crate::api_data::admin::admin_search_user_result_api::AdminSearchUserResult;
|
|
|
|
use crate::api_data::admin::admin_user_info_api::AdminUserInfoAPI;
|
2021-07-12 17:18:06 +02:00
|
|
|
use crate::constants::admin::AdminRole;
|
2021-07-12 19:00:41 +02:00
|
|
|
use crate::data::admin_action_log::AdminAction;
|
2021-07-12 17:50:14 +02:00
|
|
|
use crate::data::base_request_handler::BaseRequestHandler;
|
2021-07-13 17:28:48 +02:00
|
|
|
use crate::data::config::conf;
|
2021-07-12 17:50:14 +02:00
|
|
|
use crate::data::http_request_handler::HttpRequestHandler;
|
2021-07-13 16:54:38 +02:00
|
|
|
use crate::helpers::{account_helper, user_helper};
|
2021-07-12 19:00:41 +02:00
|
|
|
use crate::helpers::admin_log_helper::log_admin_action;
|
2021-07-12 17:50:14 +02:00
|
|
|
use crate::routes::RequestResult;
|
2021-07-12 17:18:06 +02:00
|
|
|
|
|
|
|
/// Search for user
|
|
|
|
pub fn search(r: &mut HttpRequestHandler) -> RequestResult {
|
|
|
|
r.check_admin_has_role(AdminRole::MANAGE_USERS)?;
|
|
|
|
|
|
|
|
let name = r.post_string_opt("name", 0, true)?;
|
|
|
|
let email = r.post_string_opt("email", 0, true)?;
|
|
|
|
|
|
|
|
let results = user_helper::search_user_admin(&name, &email, 50)?;
|
|
|
|
|
|
|
|
r.set_response(results.into_iter().map(AdminSearchUserResult::new).collect::<Vec<_>>())
|
2021-07-12 17:50:14 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/// Get information about a single user
|
|
|
|
pub fn get_single(r: &mut HttpRequestHandler) -> RequestResult {
|
|
|
|
r.check_admin_has_role(AdminRole::MANAGE_USERS)?;
|
|
|
|
|
|
|
|
let user_id = r.post_user_id("user_id")?;
|
|
|
|
let user = user_helper::find_user_by_id(&user_id)?;
|
|
|
|
|
2021-07-12 19:00:41 +02:00
|
|
|
log_admin_action(r.admin_id()?, &r.remote_ip(),
|
|
|
|
AdminAction::AccessUserPage { user_id, user_name: user.full_name() })?;
|
|
|
|
|
2021-07-12 17:50:14 +02:00
|
|
|
r.set_response(AdminUserInfoAPI::new(user))
|
2021-07-13 16:54:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/// Change the email address of a Comunic user
|
|
|
|
pub fn change_email_address(r: &mut HttpRequestHandler) -> RequestResult {
|
|
|
|
r.check_admin_has_role(AdminRole::MANAGE_USERS)?;
|
|
|
|
|
|
|
|
let user_id = r.post_user_id("user_id")?;
|
|
|
|
let user = user_helper::find_user_by_id(&user_id)?;
|
|
|
|
let new_mail = r.post_email("new_mail")?;
|
|
|
|
|
|
|
|
// We check if the email address is already used
|
|
|
|
if user_helper::find_user_by_email(&new_mail).is_ok() {
|
|
|
|
r.bad_request(format!("The email address {} is already attributed!", new_mail))?;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Do the update
|
|
|
|
account_helper::set_email(user_id, &new_mail)?;
|
|
|
|
|
|
|
|
log_admin_action(r.admin_id()?, &r.remote_ip(),
|
|
|
|
AdminAction::ChangedEmailAddress {
|
|
|
|
user_id,
|
|
|
|
user_name: user.full_name(),
|
|
|
|
old_mail: user.email,
|
|
|
|
new_mail,
|
|
|
|
})?;
|
|
|
|
|
|
|
|
r.ok()
|
2021-07-13 17:28:48 +02:00
|
|
|
}
|
|
|
|
|
2021-07-13 17:40:03 +02:00
|
|
|
/// Create a password reset link for a Comunic user
|
|
|
|
pub fn create_password_reset_link(r: &mut HttpRequestHandler) -> RequestResult {
|
2021-07-13 17:28:48 +02:00
|
|
|
r.check_admin_has_role(AdminRole::MANAGE_USERS)?;
|
|
|
|
|
|
|
|
let user_id = r.post_user_id("user_id")?;
|
|
|
|
let user = user_helper::find_user_by_id(&user_id)?;
|
|
|
|
|
|
|
|
let token = account_helper::generate_password_reset_token(&user_id)?;
|
2021-07-13 17:40:03 +02:00
|
|
|
let reset_link = conf().password_reset_url.replace("{TOKEN}", &token);
|
2021-07-13 17:28:48 +02:00
|
|
|
|
|
|
|
log_admin_action(r.admin_id()?, &r.remote_ip(),
|
|
|
|
AdminAction::CreatePasswordRecoveryLink { user_id, user_name: user.full_name() })?;
|
|
|
|
|
2021-07-13 17:40:03 +02:00
|
|
|
r.set_response(AdminCreatedPasswordResetLinkApi::new(reset_link))
|
2021-07-12 17:18:06 +02:00
|
|
|
}
|