From 322dcf76ae7de4c7633d0828ec8f062ee856e5c4 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Thu, 21 Jun 2018 14:28:49 -0400 Subject: [PATCH] apis for change email and change password --- src/abstractions/api.service.ts | 6 +++ src/models/request/emailRequest.ts | 7 +++ src/models/request/emailTokenRequest.ts | 4 ++ src/models/request/passwordRequest.ts | 5 ++ src/services/api.service.ts | 66 +++++++++++++++++++++++++ 5 files changed, 88 insertions(+) create mode 100644 src/models/request/emailRequest.ts create mode 100644 src/models/request/emailTokenRequest.ts create mode 100644 src/models/request/passwordRequest.ts diff --git a/src/abstractions/api.service.ts b/src/abstractions/api.service.ts index 9f650c1a56..150e4eee75 100644 --- a/src/abstractions/api.service.ts +++ b/src/abstractions/api.service.ts @@ -6,9 +6,12 @@ import { CipherBulkShareRequest } from '../models/request/cipherBulkShareRequest import { CipherCollectionsRequest } from '../models/request/cipherCollectionsRequest'; import { CipherRequest } from '../models/request/cipherRequest'; import { CipherShareRequest } from '../models/request/cipherShareRequest'; +import { EmailRequest } from '../models/request/emailRequest'; +import { EmailTokenRequest } from '../models/request/emailTokenRequest'; import { FolderRequest } from '../models/request/folderRequest'; import { ImportDirectoryRequest } from '../models/request/importDirectoryRequest'; import { PasswordHintRequest } from '../models/request/passwordHintRequest'; +import { PasswordRequest } from '../models/request/passwordRequest'; import { RegisterRequest } from '../models/request/registerRequest'; import { TokenRequest } from '../models/request/tokenRequest'; import { TwoFactorEmailRequest } from '../models/request/twoFactorEmailRequest'; @@ -32,6 +35,9 @@ export abstract class ApiService { postTwoFactorEmail: (request: TwoFactorEmailRequest) => Promise; getProfile: () => Promise; putProfile: (request: UpdateProfileRequest) => Promise; + postEmailToken: (request: EmailTokenRequest) => Promise; + postEmail: (request: EmailRequest) => Promise; + postPassword: (request: PasswordRequest) => Promise; getAccountRevisionDate: () => Promise; postPasswordHint: (request: PasswordHintRequest) => Promise; postRegister: (request: RegisterRequest) => Promise; diff --git a/src/models/request/emailRequest.ts b/src/models/request/emailRequest.ts new file mode 100644 index 0000000000..da9e6f7829 --- /dev/null +++ b/src/models/request/emailRequest.ts @@ -0,0 +1,7 @@ +export class EmailRequest { + newEmail: string; + masterPasswordHash: string; + newMasterPasswordHash: string; + token: string; + key: string; +} diff --git a/src/models/request/emailTokenRequest.ts b/src/models/request/emailTokenRequest.ts new file mode 100644 index 0000000000..98235680cf --- /dev/null +++ b/src/models/request/emailTokenRequest.ts @@ -0,0 +1,4 @@ +export class EmailTokenRequest { + newEmail: string; + masterPasswordHash: string; +} diff --git a/src/models/request/passwordRequest.ts b/src/models/request/passwordRequest.ts new file mode 100644 index 0000000000..5e79e83d14 --- /dev/null +++ b/src/models/request/passwordRequest.ts @@ -0,0 +1,5 @@ +export class PasswordRequest { + masterPasswordHash: string; + newMasterPasswordHash: string; + key: string; +} diff --git a/src/services/api.service.ts b/src/services/api.service.ts index 747904ec11..a52b00a3b2 100644 --- a/src/services/api.service.ts +++ b/src/services/api.service.ts @@ -12,9 +12,12 @@ import { CipherBulkShareRequest } from '../models/request/cipherBulkShareRequest import { CipherCollectionsRequest } from '../models/request/cipherCollectionsRequest'; import { CipherRequest } from '../models/request/cipherRequest'; import { CipherShareRequest } from '../models/request/cipherShareRequest'; +import { EmailRequest } from '../models/request/emailRequest'; +import { EmailTokenRequest } from '../models/request/emailTokenRequest'; import { FolderRequest } from '../models/request/folderRequest'; import { ImportDirectoryRequest } from '../models/request/importDirectoryRequest'; import { PasswordHintRequest } from '../models/request/passwordHintRequest'; +import { PasswordRequest } from '../models/request/passwordRequest'; import { RegisterRequest } from '../models/request/registerRequest'; import { TokenRequest } from '../models/request/tokenRequest'; import { TwoFactorEmailRequest } from '../models/request/twoFactorEmailRequest'; @@ -197,6 +200,69 @@ export class ApiService implements ApiServiceAbstraction { } } + async postEmailToken(request: EmailTokenRequest): Promise { + const authHeader = await this.handleTokenState(); + const response = await fetch(new Request(this.apiBaseUrl + '/accounts/email-token', { + body: JSON.stringify(request), + cache: 'no-cache', + credentials: this.getCredentials(), + headers: new Headers({ + 'Accept': 'application/json', + 'Content-Type': 'application/json; charset=utf-8', + 'Authorization': authHeader, + 'Device-Type': this.deviceType, + }), + method: 'POST', + })); + + if (response.status !== 200) { + const error = await this.handleError(response, false); + return Promise.reject(error); + } + } + + async postEmail(request: EmailRequest): Promise { + const authHeader = await this.handleTokenState(); + const response = await fetch(new Request(this.apiBaseUrl + '/accounts/email', { + body: JSON.stringify(request), + cache: 'no-cache', + credentials: this.getCredentials(), + headers: new Headers({ + 'Accept': 'application/json', + 'Content-Type': 'application/json; charset=utf-8', + 'Authorization': authHeader, + 'Device-Type': this.deviceType, + }), + method: 'POST', + })); + + if (response.status !== 200) { + const error = await this.handleError(response, false); + return Promise.reject(error); + } + } + + async postPassword(request: PasswordRequest): Promise { + const authHeader = await this.handleTokenState(); + const response = await fetch(new Request(this.apiBaseUrl + '/accounts/password', { + body: JSON.stringify(request), + cache: 'no-cache', + credentials: this.getCredentials(), + headers: new Headers({ + 'Accept': 'application/json', + 'Content-Type': 'application/json; charset=utf-8', + 'Authorization': authHeader, + 'Device-Type': this.deviceType, + }), + method: 'POST', + })); + + if (response.status !== 200) { + const error = await this.handleError(response, false); + return Promise.reject(error); + } + } + async getAccountRevisionDate(): Promise { const authHeader = await this.handleTokenState(); const response = await fetch(new Request(this.apiBaseUrl + '/accounts/revision-date', {