import { User, CredentialId, Ticket, Credential, Base64UrlString } from '@digitalpersona/core'; import { Service } from '../../private'; import { Attribute, AttributeAction } from '../../common'; /** * DigitalPersona Web Enroll (DPWebEnroll) service interface. */ export interface IEnrollService { GetUserCredentials(user: User): Promise; GetEnrollmentData(user: User, credentialId: CredentialId): Promise; CreateUser(securityOfficer: Ticket, user: User, password: string): Promise; DeleteUser(securityOfficer: Ticket, user: User): Promise; EnrollUserCredentials(securityOfficer: Ticket, owner: Ticket, credential: Credential): Promise; DeleteUserCredentials(securityOfficer: Ticket, owner: Ticket, credential: Credential): Promise; EnrollAltusUserCredentials(securityOfficer: Ticket, user: User, credential: Credential): Promise; DeleteAltusUserCredentials(securityOfficer: Ticket, user: User, credential: Credential): Promise; GetUserAttribute(ticket: Ticket, user: User, attributeName: string): Promise; PutUserAttribute(ticket: Ticket, user: User, attribute: Attribute, action: AttributeAction): Promise; UnlockUser(user: User, credential: Credential): Promise; CustomAction(ticket: Ticket, user: User, credential: Credential, actionId: number): Promise; IsEnrollmentAllowed(securityOfficer: Ticket, user: User, credentialId: CredentialId): Promise; } /** * DigitalPersona Web Enroll (DPWebEnroll) service client wrapper. */ export class EnrollService extends Service implements IEnrollService { /** Constructs a service wrapper. * @param endpointUrl - a URL to the DPWebClaims service. */ constructor(endpointUrl: string) { super(endpointUrl); } /** @inheritdoc */ public GetUserCredentials(user: User): Promise { return this.endpoint .get("GetUserCredentials", { user: user.name, type: user.type }) .then(result => result.GetUserCredentialsResult); } /** @inheritdoc */ public GetEnrollmentData(user: User, credentialId: CredentialId): Promise { return this.endpoint .get("GetEnrollmentData", { user: user.name, type: user.type, cred_id: credentialId }) .then(result => result.GetEnrollmentDataResult); } /** @inheritdoc */ public CreateUser(secOfficer: Ticket, user: User, password: string): Promise { return this.endpoint .put("CreateUser", null, { secOfficer, user, password }); } /** @inheritdoc */ public DeleteUser(secOfficer: Ticket, user: User): Promise { return this.endpoint .del("DeleteUser", null, { secOfficer, user }); } /** @inheritdoc */ public EnrollUserCredentials(secOfficer: Ticket, owner: Ticket, credential: Credential): Promise { return this.endpoint .put("EnrollUserCredentials", null, { secOfficer, owner, credential }); } /** @inheritdoc */ public DeleteUserCredentials(secOfficer: Ticket, owner: Ticket, credential: Credential): Promise { return this.endpoint .del("DeleteUserCredentials", null, { secOfficer, owner, credential }); } /** @inheritdoc */ public EnrollAltusUserCredentials(secOfficer: Ticket, user: User, credential: Credential): Promise { return this.endpoint .put("EnrollAltusUserCredentials", null, { secOfficer, user, credential }); } /** @inheritdoc */ public DeleteAltusUserCredentials(secOfficer: Ticket, user: User, credential: Credential): Promise { return this.endpoint .del("DeleteAltusUserCredentials", null, { secOfficer, user, credential }); } /** @inheritdoc */ public GetUserAttribute(ticket: Ticket, user: User, attributeName: string): Promise { return this.endpoint .post("GetUserAttribute", null, { ticket, user, attributeName }) .then(result => ({ name: attributeName, data: result.GetUserAttributeResult, })); } /** @inheritdoc */ public PutUserAttribute( ticket: Ticket, user: User, attribute: Attribute, action: AttributeAction, ): Promise { return this.endpoint .put("PutUserAttribute", null, { ticket, user, action, attributeName: attribute.name, attributeData: attribute.data }); } /** @inheritdoc */ public UnlockUser(user: User, credential: Credential): Promise { return this.endpoint .post("UnlockUser", null, { user, credential }); } /** @inheritdoc */ public CustomAction(ticket: Ticket, user: User, credential: Credential, actionId: number): Promise { return this.endpoint .post("CustomAction", null, { ticket, user, credential, actionId }) .then(result => result.CustomActionResult); } /** @inheritdoc */ public IsEnrollmentAllowed(secOfficer: Ticket, user: User, credentialId: CredentialId): Promise { return this.endpoint .post("IsEnrollmentAllowed", null, { secOfficer, user, credentialId }); } }