@quick-game/cli
Version:
Command line interface for rapid qg development
203 lines • 8.7 kB
JavaScript
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import * as i18n from '../../core/i18n/i18n.js';
import * as SDK from '../../core/sdk/sdk.js';
const UIStrings = {
/**
*@description Text in Security Panel of the Security panel
*/
theSecurityOfThisPageIsUnknown: 'The security of this page is unknown.',
/**
*@description Text in Security Panel of the Security panel
*/
thisPageIsNotSecure: 'This page is not secure.',
/**
*@description Text in Security Panel of the Security panel
*/
thisPageIsSecureValidHttps: 'This page is secure (valid HTTPS).',
/**
*@description Text in Security Panel of the Security panel
*/
thisPageIsNotSecureBrokenHttps: 'This page is not secure (broken HTTPS).',
/**
*@description Description of an SSL cipher that contains a separate (bulk) cipher and MAC.
*@example {AES_256_CBC} PH1
*@example {HMAC-SHA1} PH2
*/
cipherWithMAC: '{PH1} with {PH2}',
/**
*@description Description of an SSL Key and its Key Exchange Group.
*@example {ECDHE_RSA} PH1
*@example {X25519} PH2
*/
keyExchangeWithGroup: '{PH1} with {PH2}',
};
const str_ = i18n.i18n.registerUIStrings('panels/security/SecurityModel.ts', UIStrings);
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
const i18nLazyString = i18n.i18n.getLazilyComputedLocalizedString.bind(undefined, str_);
export class SecurityModel extends SDK.SDKModel.SDKModel {
dispatcher;
securityAgent;
constructor(target) {
super(target);
this.dispatcher = new SecurityDispatcher(this);
this.securityAgent = target.securityAgent();
target.registerSecurityDispatcher(this.dispatcher);
void this.securityAgent.invoke_enable();
}
resourceTreeModel() {
return this.target().model(SDK.ResourceTreeModel.ResourceTreeModel);
}
networkManager() {
return this.target().model(SDK.NetworkManager.NetworkManager);
}
// eslint-disable-next-line @typescript-eslint/naming-convention
static SecurityStateComparator(a, b) {
const securityStateMap = getOrCreateSecurityStateOrdinalMap();
const aScore = a && securityStateMap.get(a) || 0;
const bScore = b && securityStateMap.get(b) || 0;
return aScore - bScore;
}
}
let securityStateToOrdinal = null;
const getOrCreateSecurityStateOrdinalMap = () => {
if (!securityStateToOrdinal) {
securityStateToOrdinal = new Map();
const ordering = [
"info" /* Protocol.Security.SecurityState.Info */,
"insecure-broken" /* Protocol.Security.SecurityState.InsecureBroken */,
"insecure" /* Protocol.Security.SecurityState.Insecure */,
"neutral" /* Protocol.Security.SecurityState.Neutral */,
"secure" /* Protocol.Security.SecurityState.Secure */,
"unknown" /* Protocol.Security.SecurityState.Unknown */,
];
for (let i = 0; i < ordering.length; i++) {
securityStateToOrdinal.set(ordering[i], i + 1);
}
}
return securityStateToOrdinal;
};
SDK.SDKModel.SDKModel.register(SecurityModel, { capabilities: SDK.Target.Capability.Security, autostart: false });
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export var Events;
(function (Events) {
Events["VisibleSecurityStateChanged"] = "VisibleSecurityStateChanged";
})(Events || (Events = {}));
export const SummaryMessages = {
["unknown" /* Protocol.Security.SecurityState.Unknown */]: i18nLazyString(UIStrings.theSecurityOfThisPageIsUnknown),
["insecure" /* Protocol.Security.SecurityState.Insecure */]: i18nLazyString(UIStrings.thisPageIsNotSecure),
["neutral" /* Protocol.Security.SecurityState.Neutral */]: i18nLazyString(UIStrings.thisPageIsNotSecure),
["secure" /* Protocol.Security.SecurityState.Secure */]: i18nLazyString(UIStrings.thisPageIsSecureValidHttps),
["insecure-broken" /* Protocol.Security.SecurityState.InsecureBroken */]: i18nLazyString(UIStrings.thisPageIsNotSecureBrokenHttps),
};
export class PageVisibleSecurityState {
securityState;
certificateSecurityState;
safetyTipInfo;
securityStateIssueIds;
constructor(securityState, certificateSecurityState, safetyTipInfo, securityStateIssueIds) {
this.securityState = securityState;
this.certificateSecurityState =
certificateSecurityState ? new CertificateSecurityState(certificateSecurityState) : null;
this.safetyTipInfo = safetyTipInfo ? new SafetyTipInfo(safetyTipInfo) : null;
this.securityStateIssueIds = securityStateIssueIds;
}
}
export class CertificateSecurityState {
protocol;
keyExchange;
keyExchangeGroup;
cipher;
mac;
certificate;
subjectName;
issuer;
validFrom;
validTo;
certificateNetworkError;
certificateHasWeakSignature;
certificateHasSha1Signature;
modernSSL;
obsoleteSslProtocol;
obsoleteSslKeyExchange;
obsoleteSslCipher;
obsoleteSslSignature;
constructor(certificateSecurityState) {
this.protocol = certificateSecurityState.protocol;
this.keyExchange = certificateSecurityState.keyExchange;
this.keyExchangeGroup = certificateSecurityState.keyExchangeGroup || null;
this.cipher = certificateSecurityState.cipher;
this.mac = certificateSecurityState.mac || null;
this.certificate = certificateSecurityState.certificate;
this.subjectName = certificateSecurityState.subjectName;
this.issuer = certificateSecurityState.issuer;
this.validFrom = certificateSecurityState.validFrom;
this.validTo = certificateSecurityState.validTo;
this.certificateNetworkError = certificateSecurityState.certificateNetworkError || null;
this.certificateHasWeakSignature = certificateSecurityState.certificateHasWeakSignature;
this.certificateHasSha1Signature = certificateSecurityState.certificateHasSha1Signature;
this.modernSSL = certificateSecurityState.modernSSL;
this.obsoleteSslProtocol = certificateSecurityState.obsoleteSslProtocol;
this.obsoleteSslKeyExchange = certificateSecurityState.obsoleteSslKeyExchange;
this.obsoleteSslCipher = certificateSecurityState.obsoleteSslCipher;
this.obsoleteSslSignature = certificateSecurityState.obsoleteSslSignature;
}
isCertificateExpiringSoon() {
const expiryDate = new Date(this.validTo * 1000).getTime();
return (expiryDate < new Date(Date.now()).setHours(48)) && (expiryDate > Date.now());
}
getKeyExchangeName() {
if (this.keyExchangeGroup) {
return this.keyExchange ?
i18nString(UIStrings.keyExchangeWithGroup, { PH1: this.keyExchange, PH2: this.keyExchangeGroup }) :
this.keyExchangeGroup;
}
return this.keyExchange;
}
getCipherFullName() {
return this.mac ? i18nString(UIStrings.cipherWithMAC, { PH1: this.cipher, PH2: this.mac }) : this.cipher;
}
}
class SafetyTipInfo {
safetyTipStatus;
safeUrl;
constructor(safetyTipInfo) {
this.safetyTipStatus = safetyTipInfo.safetyTipStatus;
this.safeUrl = safetyTipInfo.safeUrl || null;
}
}
export class SecurityStyleExplanation {
securityState;
title;
summary;
description;
certificate;
mixedContentType;
recommendations;
constructor(securityState, title, summary, description, certificate = [], mixedContentType = "none" /* Protocol.Security.MixedContentType.None */, recommendations = []) {
this.securityState = securityState;
this.title = title;
this.summary = summary;
this.description = description;
this.certificate = certificate;
this.mixedContentType = mixedContentType;
this.recommendations = recommendations;
}
}
class SecurityDispatcher {
model;
constructor(model) {
this.model = model;
}
securityStateChanged(_event) {
}
visibleSecurityStateChanged({ visibleSecurityState }) {
const pageVisibleSecurityState = new PageVisibleSecurityState(visibleSecurityState.securityState, visibleSecurityState.certificateSecurityState || null, visibleSecurityState.safetyTipInfo || null, visibleSecurityState.securityStateIssueIds);
this.model.dispatchEventToListeners(Events.VisibleSecurityStateChanged, pageVisibleSecurityState);
}
certificateError(_event) {
}
}
//# sourceMappingURL=SecurityModel.js.map