mirror of
https://github.com/bitwarden/browser
synced 2025-12-12 06:13:38 +00:00
* [SG-171] Login with a device request: Desktop (#3999) * Move LoginWithDeviceComponent to libs * Create login module * Remove login component from previous location * Move startPasswordlessLogin method to base class * Register route for login with device component * Add new localizations * Add Login with Device page styles * Add desktop login with device component * Spacing fix * Add content box around page * Update wording of helper text * Make resend timeout a class variable * SG-173 - Login device approval desktop (#4232) * SG-173 Implemented UI and login for login approval request * SG-173 - Show login approval after login * SG-173 Fetch login requests if the setting is true * SG-173 Add subheading to new setting * SG-173 Handle modal dismiss denying login request * SG-173 Fix pr comments * SG-173 Implemented desktop alerts * SG-173 Replicated behaviour of openViewRef * SG-173 Fixed previous commit * SG-173 PR fix * SG-173 Fix PR comment * SG-173 Added missing service injection * SG-173 Added logo to notifications * SG-173 Fix PR comments * [SG-910] Override self hosted check for desktop (#4405) * Override base component self hosted check * Add selfhost check to environment service * [SG-170] Login with Device Request - Browser (#4198) * work: ui stuff * fix: use parent * fix: words * [SG-987] [SG-988] [SG-989] Fix passwordless login request (#4573) * SG-987 Fix notification text and button options * SG-988 Fix approval and decline confirmation toasts * SG-989 Fix methods called * SG-988 Undo previous commit * [SG-1034] [Defect] - Vault is empty upon login confirmation (#4646) * fix: sync after login * undo: whoops --------- Co-authored-by: Carlos Gonçalves <cgoncalves@bitwarden.com> Co-authored-by: Brandon Maharaj <bmaharaj@bitwarden.com> Co-authored-by: Todd Martin <106564991+trmartin4@users.noreply.github.com>
60 lines
2.0 KiB
TypeScript
60 lines
2.0 KiB
TypeScript
import { DeviceType } from "../../enums/deviceType";
|
|
|
|
import { BaseResponse } from "./base.response";
|
|
|
|
const RequestTimeOut = 60000 * 15; //15 Minutes
|
|
|
|
export class AuthRequestResponse extends BaseResponse {
|
|
id: string;
|
|
publicKey: string;
|
|
requestDeviceType: DeviceType;
|
|
requestIpAddress: string;
|
|
key: string;
|
|
masterPasswordHash: string;
|
|
creationDate: string;
|
|
requestApproved?: boolean;
|
|
requestFingerprint?: string;
|
|
responseDate?: string;
|
|
isAnswered: boolean;
|
|
isExpired: boolean;
|
|
|
|
constructor(response: any) {
|
|
super(response);
|
|
this.id = this.getResponseProperty("Id");
|
|
this.publicKey = this.getResponseProperty("PublicKey");
|
|
this.requestDeviceType = this.getResponseProperty("RequestDeviceType");
|
|
this.requestIpAddress = this.getResponseProperty("RequestIpAddress");
|
|
this.key = this.getResponseProperty("Key");
|
|
this.masterPasswordHash = this.getResponseProperty("MasterPasswordHash");
|
|
this.creationDate = this.getResponseProperty("CreationDate");
|
|
this.requestApproved = this.getResponseProperty("RequestApproved");
|
|
this.requestFingerprint = this.getResponseProperty("RequestFingerprint");
|
|
this.responseDate = this.getResponseProperty("ResponseDate");
|
|
|
|
const requestDate = new Date(this.creationDate);
|
|
const requestDateUTC = Date.UTC(
|
|
requestDate.getUTCFullYear(),
|
|
requestDate.getUTCMonth(),
|
|
requestDate.getDate(),
|
|
requestDate.getUTCHours(),
|
|
requestDate.getUTCMinutes(),
|
|
requestDate.getUTCSeconds(),
|
|
requestDate.getUTCMilliseconds()
|
|
);
|
|
|
|
const dateNow = new Date(Date.now());
|
|
const dateNowUTC = Date.UTC(
|
|
dateNow.getUTCFullYear(),
|
|
dateNow.getUTCMonth(),
|
|
dateNow.getDate(),
|
|
dateNow.getUTCHours(),
|
|
dateNow.getUTCMinutes(),
|
|
dateNow.getUTCSeconds(),
|
|
dateNow.getUTCMilliseconds()
|
|
);
|
|
|
|
this.isExpired = dateNowUTC - requestDateUTC >= RequestTimeOut;
|
|
this.isAnswered = this.requestApproved != null && this.responseDate != null;
|
|
}
|
|
}
|