Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import { OrganizationInviteLinkAcceptRequest } from "../models/requests/organization-invite-link-accept.request";
import { OrganizationInviteLinkCreateRequest } from "../models/requests/organization-invite-link-create.request";
import { OrganizationInviteLinkInviteRequest } from "../models/requests/organization-invite-link-invite.request";
import { OrganizationInviteLinkRefreshRequest } from "../models/requests/organization-invite-link-refresh.request";
import { OrganizationInviteLinkUpdateRequest } from "../models/requests/organization-invite-link-update.request";
import { OrganizationInviteLinkValidateEmailDomainRequest } from "../models/requests/organization-invite-link-validate-email-domain.request";
import { OrganizationInviteLinkInviteResponse } from "../models/responses/organization-invite-link-invite.response";
import { OrganizationInviteLinkStatusResponseModel } from "../models/responses/organization-invite-link-status.response";
import { OrganizationInviteLinkValidateEmailDomainResponse } from "../models/responses/organization-invite-link-validate-email-domain.response";
import { OrganizationInviteLinkResponseModel } from "../models/responses/organization-invite-link.response";
Expand Down Expand Up @@ -42,4 +44,9 @@ export abstract class OrganizationInviteLinkApiService {

/** Accept an invite link, joining the authenticated user to the organization */
abstract accept(request: OrganizationInviteLinkAcceptRequest): Promise<void>;

/** Retrieve the opaque invite for an invite link */
abstract getInvite(
request: OrganizationInviteLinkInviteRequest,
): Promise<OrganizationInviteLinkInviteResponse>;
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
export * from "./organization-invite-link-accept.request";
export * from "./organization-invite-link-create.request";
export * from "./organization-invite-link-invite.request";
export * from "./organization-invite-link-refresh.request";
export * from "./organization-invite-link-update.request";
export * from "./organization-invite-link-validate-email-domain.request";
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { OrganizationId } from "@bitwarden/common/types/guid";

/**
* The data required to retrieve the invite for an organization's invite link. The server uses
* these to locate the link and validate that the requesting user is allowed to retrieve its invite.
*/
export class OrganizationInviteLinkInviteRequest {
/** The ID of the organization whose invite link the invite is being retrieved for. */
organizationId: OrganizationId;

/** The secret code embedded in the invite link. */
code: string;

constructor(c: { organizationId: OrganizationId; code: string }) {
this.organizationId = c.organizationId;
this.code = c.code;
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
export * from "./organization-invite-link-invite.response";
export * from "./organization-invite-link-status.response";
export * from "./organization-invite-link.response";
export * from "./organization-invite-link-validate-email-domain.response";
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { BaseResponse } from "@bitwarden/common/models/response/base.response";
import { Invite } from "@bitwarden/sdk-internal";

/**
* The invite for an organization's invite link. The invite is an opaque cryptographic value that
* the server stores and transports but never inspects; it is decrypted client-side to reconstruct
* and confirm the invite link.
*/
export class OrganizationInviteLinkInviteResponse extends BaseResponse {
/** The opaque, encrypted invite. */
invite: Invite;

constructor(response: any) {
super(response);
this.invite = this.getResponseProperty("Invite") as Invite;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@ import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { OrganizationInviteLinkApiService } from "../abstractions/organization-invite-link-api.service";
import { OrganizationInviteLinkAcceptRequest } from "../models/requests/organization-invite-link-accept.request";
import { OrganizationInviteLinkCreateRequest } from "../models/requests/organization-invite-link-create.request";
import { OrganizationInviteLinkInviteRequest } from "../models/requests/organization-invite-link-invite.request";
import { OrganizationInviteLinkRefreshRequest } from "../models/requests/organization-invite-link-refresh.request";
import { OrganizationInviteLinkUpdateRequest } from "../models/requests/organization-invite-link-update.request";
import { OrganizationInviteLinkValidateEmailDomainRequest } from "../models/requests/organization-invite-link-validate-email-domain.request";
import { OrganizationInviteLinkInviteResponse } from "../models/responses/organization-invite-link-invite.response";
import { OrganizationInviteLinkStatusResponseModel } from "../models/responses/organization-invite-link-status.response";
import { OrganizationInviteLinkValidateEmailDomainResponse } from "../models/responses/organization-invite-link-validate-email-domain.response";
import { OrganizationInviteLinkResponseModel } from "../models/responses/organization-invite-link.response";
Expand Down Expand Up @@ -109,4 +111,17 @@ export class DefaultOrganizationInviteLinkApiService implements OrganizationInvi
false,
);
}

async getInvite(
request: OrganizationInviteLinkInviteRequest,
): Promise<OrganizationInviteLinkInviteResponse> {
const r = await this.apiService.send(
"POST",
"/organizations/users/invite-link/invite",
request,
true,
true,
);
return new OrganizationInviteLinkInviteResponse(r);
}
}
Loading