1
0
Fork 0

Merge pull request #3397 from nikolaevn/feature/add-admin-reinvite-endpoint

support `/users/<uuid>/invite/resend` admin api
Dieser Commit ist enthalten in:
Daniel García 2023-04-02 15:21:51 +02:00 committet von GitHub
Commit d1ecf03f44
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 4AEE18F83AFDEB23
3 geänderte Dateien mit 44 neuen und 1 gelöschten Zeilen

Datei anzeigen

@ -53,7 +53,8 @@ pub fn routes() -> Vec<Route> {
organizations_overview, organizations_overview,
delete_organization, delete_organization,
diagnostics, diagnostics,
get_diagnostics_config get_diagnostics_config,
resend_user_invite,
] ]
} }
@ -435,6 +436,24 @@ async fn remove_2fa(uuid: String, _token: AdminToken, mut conn: DbConn) -> Empty
user.save(&mut conn).await user.save(&mut conn).await
} }
#[post("/users/<uuid>/invite/resend")]
async fn resend_user_invite(uuid: String, _token: AdminToken, mut conn: DbConn) -> EmptyResult {
if let Some(user) = User::find_by_uuid(&uuid, &mut conn).await {
//TODO: replace this with user.status check when it will be available (PR#3397)
if !user.password_hash.is_empty() {
err_code!("User already accepted invitation", Status::BadRequest.code);
}
if CONFIG.mail_enabled() {
mail::send_invite(&user.email, &user.uuid, None, None, &CONFIG.invitation_org_name(), None).await
} else {
Ok(())
}
} else {
err_code!("User doesn't exist", Status::NotFound.code);
}
}
#[derive(Deserialize, Debug)] #[derive(Deserialize, Debug)]
struct UserOrgTypeData { struct UserOrgTypeData {
user_type: NumberOrString, user_type: NumberOrString,

Datei anzeigen

@ -120,6 +120,24 @@ function inviteUser(event) {
); );
} }
function resendUserInvite (event) {
event.preventDefault();
event.stopPropagation();
const id = event.target.parentNode.dataset.vwUserUuid;
const email = event.target.parentNode.dataset.vwUserEmail;
if (!id || !email) {
alert("Required parameters not found!");
return false;
}
const confirmed = confirm(`Are you sure you want to resend invitation for "${email}"?`);
if (confirmed) {
_post(`${BASE_URL}/admin/users/${id}/invite/resend`,
"Invite sent successfully",
"Error resend invite"
);
}
}
const ORG_TYPES = { const ORG_TYPES = {
"0": { "0": {
"name": "Owner", "name": "Owner",
@ -228,6 +246,9 @@ function initUserTable() {
document.querySelectorAll("button[vw-enable-user]").forEach(btn => { document.querySelectorAll("button[vw-enable-user]").forEach(btn => {
btn.addEventListener("click", enableUser); btn.addEventListener("click", enableUser);
}); });
document.querySelectorAll("button[vw-resend-user-invite]").forEach(btn => {
btn.addEventListener("click", resendUserInvite);
});
if (jdenticon) { if (jdenticon) {
jdenticon(); jdenticon();

Datei anzeigen

@ -72,6 +72,9 @@
{{else}} {{else}}
<button type="button" class="btn btn-sm btn-link p-0 border-0 float-right" vw-enable-user>Enable User</button><br> <button type="button" class="btn btn-sm btn-link p-0 border-0 float-right" vw-enable-user>Enable User</button><br>
{{/if}} {{/if}}
{{#case _Status 1}}
<button type="button" class="btn btn-sm btn-link p-0 border-0 float-right" vw-resend-user-invite>Resend invite</button><br>
{{/case}}
</span> </span>
</td> </td>
</tr> </tr>