mirror of
				https://github.com/dani-garcia/vaultwarden.git
				synced 2025-11-04 12:18:20 +02:00 
			
		
		
		
	Merge pull request #3397 from nikolaevn/feature/add-admin-reinvite-endpoint
support `/users/<uuid>/invite/resend` admin api
This commit is contained in:
		@@ -53,7 +53,8 @@ pub fn routes() -> Vec<Route> {
 | 
			
		||||
        organizations_overview,
 | 
			
		||||
        delete_organization,
 | 
			
		||||
        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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[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)]
 | 
			
		||||
struct UserOrgTypeData {
 | 
			
		||||
    user_type: NumberOrString,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										21
									
								
								src/static/scripts/admin_users.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								src/static/scripts/admin_users.js
									
									
									
									
										vendored
									
									
								
							@@ -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 = {
 | 
			
		||||
    "0": {
 | 
			
		||||
        "name": "Owner",
 | 
			
		||||
@@ -228,6 +246,9 @@ function initUserTable() {
 | 
			
		||||
    document.querySelectorAll("button[vw-enable-user]").forEach(btn => {
 | 
			
		||||
        btn.addEventListener("click", enableUser);
 | 
			
		||||
    });
 | 
			
		||||
    document.querySelectorAll("button[vw-resend-user-invite]").forEach(btn => {
 | 
			
		||||
        btn.addEventListener("click", resendUserInvite);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    if (jdenticon) {
 | 
			
		||||
        jdenticon();
 | 
			
		||||
 
 | 
			
		||||
@@ -72,6 +72,9 @@
 | 
			
		||||
                                {{else}}
 | 
			
		||||
                                <button type="button" class="btn btn-sm btn-link p-0 border-0 float-right" vw-enable-user>Enable User</button><br>
 | 
			
		||||
                                {{/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>
 | 
			
		||||
                        </td>
 | 
			
		||||
                    </tr>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user