UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 14.2 kB
import*as Host from"../../core/host/host.js";import*as i18n from"../../core/i18n/i18n.js";import*as Platform from"../../core/platform/platform.js";import*as IssuesManager from"../../models/issues_manager/issues_manager.js";import*as NetworkForward from"../../panels/network/forward/forward.js";import{AffectedResourcesView}from"./AffectedResourcesView.js";const UIStrings={nRequests:"{n, plural, =1 {# request} other {# requests}}",warning:"warning",blocked:"blocked",status:"Status",request:"Request",resourceAddressSpace:"Resource Address",initiatorAddressSpace:"Initiator Address",secure:"secure",insecure:"insecure",initiatorContext:"Initiator Context",preflightRequestIfProblematic:"Preflight Request (if problematic)",preflightRequest:"Preflight Request",header:"Header",problem:"Problem",invalidValue:"Invalid Value (if available)",problemMissingHeader:"Missing Header",problemMultipleValues:"Multiple Values",problemInvalidValue:"Invalid Value",preflightDisallowedRedirect:"Response to preflight was a redirect",preflightInvalidStatus:"HTTP status of preflight request didn't indicate success",allowedOrigin:"Allowed Origin (from header)",allowCredentialsValueFromHeader:"`Access-Control-Allow-Credentials` Header Value",disallowedRequestMethod:"Disallowed Request Method",disallowedRequestHeader:"Disallowed Request Header",sourceLocation:"Source Location",unsupportedScheme:"Unsupported Scheme",failedRequest:"Failed Request"},str_=i18n.i18n.registerUIStrings("panels/issues/CorsIssueDetailsView.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);export class CorsIssueDetailsView extends AffectedResourcesView{constructor(e,s){super(e,s),this.affectedResourcesCountElement.classList.add("cors-issue-affected-resource-label")}#e(e,s){const t=document.createElement("td");s?(t.classList.add("affected-resource-report-only-status"),t.textContent=i18nString(UIStrings.warning)):(t.classList.add("affected-resource-blocked-status"),t.textContent=i18nString(UIStrings.blocked)),e.appendChild(t)}getResourceNameWithCount(e){return i18nString(UIStrings.nRequests,{n:e})}#s(e,s){const t=document.createElement("tr");switch(this.appendColumnTitle(t,i18nString(UIStrings.request)),this.appendColumnTitle(t,i18nString(UIStrings.status)),e){case IssuesManager.CorsIssue.IssueCode.InvalidHeaderValues:this.appendColumnTitle(t,i18nString(UIStrings.preflightRequestIfProblematic)),this.appendColumnTitle(t,i18nString(UIStrings.header)),this.appendColumnTitle(t,i18nString(UIStrings.problem)),this.appendColumnTitle(t,i18nString(UIStrings.invalidValue));break;case IssuesManager.CorsIssue.IssueCode.WildcardOriginNotAllowed:this.appendColumnTitle(t,i18nString(UIStrings.preflightRequestIfProblematic));break;case IssuesManager.CorsIssue.IssueCode.PreflightResponseInvalid:this.appendColumnTitle(t,i18nString(UIStrings.preflightRequest)),this.appendColumnTitle(t,i18nString(UIStrings.problem));break;case IssuesManager.CorsIssue.IssueCode.OriginMismatch:this.appendColumnTitle(t,i18nString(UIStrings.preflightRequestIfProblematic)),this.appendColumnTitle(t,i18nString(UIStrings.initiatorContext)),this.appendColumnTitle(t,i18nString(UIStrings.allowedOrigin));break;case IssuesManager.CorsIssue.IssueCode.AllowCredentialsRequired:this.appendColumnTitle(t,i18nString(UIStrings.preflightRequestIfProblematic)),this.appendColumnTitle(t,i18nString(UIStrings.allowCredentialsValueFromHeader));break;case IssuesManager.CorsIssue.IssueCode.InsecurePrivateNetwork:this.appendColumnTitle(t,i18nString(UIStrings.resourceAddressSpace)),this.appendColumnTitle(t,i18nString(UIStrings.initiatorAddressSpace)),this.appendColumnTitle(t,i18nString(UIStrings.initiatorContext));break;case IssuesManager.CorsIssue.IssueCode.PreflightAllowPrivateNetworkError:this.appendColumnTitle(t,i18nString(UIStrings.preflightRequest)),this.appendColumnTitle(t,i18nString(UIStrings.invalidValue)),this.appendColumnTitle(t,i18nString(UIStrings.initiatorAddressSpace)),this.appendColumnTitle(t,i18nString(UIStrings.initiatorContext));break;case IssuesManager.CorsIssue.IssueCode.PreflightMissingPrivateNetworkAccessId:case IssuesManager.CorsIssue.IssueCode.PreflightMissingPrivateNetworkAccessName:this.appendColumnTitle(t,i18nString(UIStrings.preflightRequest)),this.appendColumnTitle(t,i18nString(UIStrings.invalidValue)),this.appendColumnTitle(t,i18nString(UIStrings.resourceAddressSpace)),this.appendColumnTitle(t,i18nString(UIStrings.initiatorAddressSpace)),this.appendColumnTitle(t,i18nString(UIStrings.initiatorContext));break;case IssuesManager.CorsIssue.IssueCode.MethodDisallowedByPreflightResponse:this.appendColumnTitle(t,i18nString(UIStrings.preflightRequest)),this.appendColumnTitle(t,i18nString(UIStrings.disallowedRequestMethod));break;case IssuesManager.CorsIssue.IssueCode.HeaderDisallowedByPreflightResponse:this.appendColumnTitle(t,i18nString(UIStrings.preflightRequest)),this.appendColumnTitle(t,i18nString(UIStrings.disallowedRequestHeader));break;case IssuesManager.CorsIssue.IssueCode.RedirectContainsCredentials:break;case IssuesManager.CorsIssue.IssueCode.DisallowedByMode:this.appendColumnTitle(t,i18nString(UIStrings.initiatorContext)),this.appendColumnTitle(t,i18nString(UIStrings.sourceLocation));break;case IssuesManager.CorsIssue.IssueCode.CorsDisabledScheme:this.appendColumnTitle(t,i18nString(UIStrings.initiatorContext)),this.appendColumnTitle(t,i18nString(UIStrings.sourceLocation)),this.appendColumnTitle(t,i18nString(UIStrings.unsupportedScheme));break;case IssuesManager.CorsIssue.IssueCode.NoCorsRedirectModeNotFollow:this.appendColumnTitle(t,i18nString(UIStrings.sourceLocation));break;default:Platform.assertUnhandled(e)}this.affectedResources.appendChild(t);let i=0;for(const t of s)i++,this.#t(e,t);this.updateAffectedResourceCount(i)}#i(e,s){void 0!==s?this.appendIssueDetailCell(e,i18nString(s?UIStrings.secure:UIStrings.insecure)):this.appendIssueDetailCell(e,"")}static getHeaderFromError(e){switch(e){case"InvalidAllowHeadersPreflightResponse":return"Access-Control-Allow-Headers";case"InvalidAllowMethodsPreflightResponse":case"MethodDisallowedByPreflightResponse":return"Access-Control-Allow-Methods";case"PreflightMissingAllowOriginHeader":case"PreflightMultipleAllowOriginValues":case"PreflightInvalidAllowOriginValue":case"MissingAllowOriginHeader":case"MultipleAllowOriginValues":case"InvalidAllowOriginValue":case"WildcardOriginNotAllowed":case"PreflightWildcardOriginNotAllowed":case"AllowOriginMismatch":case"PreflightAllowOriginMismatch":return"Access-Control-Allow-Origin";case"InvalidAllowCredentials":case"PreflightInvalidAllowCredentials":return"Access-Control-Allow-Credentials";case"PreflightMissingAllowPrivateNetwork":case"PreflightInvalidAllowPrivateNetwork":return"Access-Control-Allow-Private-Network";case"RedirectContainsCredentials":case"PreflightDisallowedRedirect":return"Location";case"PreflightInvalidStatus":return"Status-Code";case"PreflightMissingPrivateNetworkAccessId":return"Private-Network-Access-Id";case"PreflightMissingPrivateNetworkAccessName":return"Private-Network-Access-Name"}return""}static getProblemFromError(e){switch(e.corsError){case"InvalidAllowHeadersPreflightResponse":case"InvalidAllowMethodsPreflightResponse":case"PreflightInvalidAllowOriginValue":case"InvalidAllowOriginValue":return i18nString(UIStrings.problemInvalidValue);case"PreflightMultipleAllowOriginValues":case"MultipleAllowOriginValues":return i18nString(UIStrings.problemMultipleValues);case"MissingAllowOriginHeader":case"PreflightMissingAllowOriginHeader":return i18nString(UIStrings.problemMissingHeader);case"PreflightInvalidStatus":return i18nString(UIStrings.preflightInvalidStatus);case"PreflightDisallowedRedirect":return i18nString(UIStrings.preflightDisallowedRedirect);case"InvalidResponse":return i18nString(UIStrings.failedRequest)}throw new Error("Invalid Argument")}#t(e,s){const t=document.createElement("tr");t.classList.add("affected-resource-directive");const i=s.details(),r=i.corsErrorStatus,a=i.corsErrorStatus.corsError,n={section:NetworkForward.UIRequestLocation.UIHeaderSection.Response,name:CorsIssueDetailsView.getHeaderFromError(a)},l={additionalOnClickAction(){Host.userMetrics.issuesPanelResourceOpened(IssuesManager.Issue.IssueCategory.Cors,"Request")}};switch(e){case IssuesManager.CorsIssue.IssueCode.InvalidHeaderValues:t.appendChild(this.createRequestCell(i.request,l)),this.#e(t,i.isWarning),a.includes("Preflight")?t.appendChild(this.createRequestCell(i.request,{...l,linkToPreflight:!0,highlightHeader:n})):this.appendIssueDetailCell(t,""),this.appendIssueDetailCell(t,CorsIssueDetailsView.getHeaderFromError(a),"code-example"),this.appendIssueDetailCell(t,CorsIssueDetailsView.getProblemFromError(i.corsErrorStatus)),this.appendIssueDetailCell(t,i.corsErrorStatus.failedParameter,"code-example");break;case IssuesManager.CorsIssue.IssueCode.WildcardOriginNotAllowed:t.appendChild(this.createRequestCell(i.request,l)),this.#e(t,i.isWarning),a.includes("Preflight")?t.appendChild(this.createRequestCell(i.request,{...l,linkToPreflight:!0,highlightHeader:n})):this.appendIssueDetailCell(t,"");break;case IssuesManager.CorsIssue.IssueCode.PreflightResponseInvalid:{t.appendChild(this.createRequestCell(i.request,l)),this.#e(t,i.isWarning);const e="PreflightInvalidStatus"===a?{section:NetworkForward.UIRequestLocation.UIHeaderSection.General,name:"Status-Code"}:n;t.appendChild(this.createRequestCell(i.request,{...l,linkToPreflight:!0,highlightHeader:e})),this.appendIssueDetailCell(t,CorsIssueDetailsView.getProblemFromError(i.corsErrorStatus));break}case IssuesManager.CorsIssue.IssueCode.OriginMismatch:t.appendChild(this.createRequestCell(i.request,l)),this.#e(t,i.isWarning),a.includes("Preflight")?t.appendChild(this.createRequestCell(i.request,{...l,linkToPreflight:!0,highlightHeader:n})):this.appendIssueDetailCell(t,""),this.appendIssueDetailCell(t,i.initiatorOrigin??"","code-example"),this.appendIssueDetailCell(t,i.corsErrorStatus.failedParameter,"code-example");break;case IssuesManager.CorsIssue.IssueCode.AllowCredentialsRequired:t.appendChild(this.createRequestCell(i.request,l)),this.#e(t,i.isWarning),a.includes("Preflight")?t.appendChild(this.createRequestCell(i.request,{...l,linkToPreflight:!0,highlightHeader:n})):this.appendIssueDetailCell(t,""),this.appendIssueDetailCell(t,i.corsErrorStatus.failedParameter,"code-example");break;case IssuesManager.CorsIssue.IssueCode.InsecurePrivateNetwork:t.appendChild(this.createRequestCell(i.request,l)),this.#e(t,i.isWarning),this.appendIssueDetailCell(t,i.resourceIPAddressSpace??""),this.appendIssueDetailCell(t,i.clientSecurityState?.initiatorIPAddressSpace??""),this.#i(t,i.clientSecurityState?.initiatorIsSecureContext);break;case IssuesManager.CorsIssue.IssueCode.PreflightAllowPrivateNetworkError:t.appendChild(this.createRequestCell(i.request,l)),this.#e(t,i.isWarning),t.appendChild(this.createRequestCell(i.request,{...l,linkToPreflight:!0,highlightHeader:n})),this.appendIssueDetailCell(t,i.corsErrorStatus.failedParameter,"code-example"),this.appendIssueDetailCell(t,i.clientSecurityState?.initiatorIPAddressSpace??""),this.#i(t,i.clientSecurityState?.initiatorIsSecureContext);break;case IssuesManager.CorsIssue.IssueCode.MethodDisallowedByPreflightResponse:t.appendChild(this.createRequestCell(i.request,l)),this.#e(t,i.isWarning),t.appendChild(this.createRequestCell(i.request,{...l,linkToPreflight:!0,highlightHeader:n})),this.appendIssueDetailCell(t,i.corsErrorStatus.failedParameter,"code-example");break;case IssuesManager.CorsIssue.IssueCode.HeaderDisallowedByPreflightResponse:t.appendChild(this.createRequestCell(i.request,{...l,highlightHeader:{section:NetworkForward.UIRequestLocation.UIHeaderSection.Request,name:r.failedParameter}})),this.#e(t,i.isWarning),t.appendChild(this.createRequestCell(i.request,{...l,linkToPreflight:!0,highlightHeader:{section:NetworkForward.UIRequestLocation.UIHeaderSection.Response,name:"Access-Control-Allow-Headers"}})),this.appendIssueDetailCell(t,i.corsErrorStatus.failedParameter,"code-example");break;case IssuesManager.CorsIssue.IssueCode.RedirectContainsCredentials:t.appendChild(this.createRequestCell(i.request,{...l,highlightHeader:{section:NetworkForward.UIRequestLocation.UIHeaderSection.Response,name:CorsIssueDetailsView.getHeaderFromError(a)}})),this.#e(t,i.isWarning);break;case IssuesManager.CorsIssue.IssueCode.DisallowedByMode:t.appendChild(this.createRequestCell(i.request,l)),this.#e(t,i.isWarning),this.appendIssueDetailCell(t,i.initiatorOrigin??"","code-example"),this.appendSourceLocation(t,i.location,s.model()?.getTargetIfNotDisposed());break;case IssuesManager.CorsIssue.IssueCode.CorsDisabledScheme:t.appendChild(this.createRequestCell(i.request,{...l,highlightHeader:{section:NetworkForward.UIRequestLocation.UIHeaderSection.Response,name:CorsIssueDetailsView.getHeaderFromError(a)}})),this.#e(t,i.isWarning),this.appendIssueDetailCell(t,i.initiatorOrigin??"","code-example"),this.appendSourceLocation(t,i.location,s.model()?.getTargetIfNotDisposed()),this.appendIssueDetailCell(t,i.corsErrorStatus.failedParameter??"","code-example");break;case IssuesManager.CorsIssue.IssueCode.NoCorsRedirectModeNotFollow:t.appendChild(this.createRequestCell(i.request,l)),this.#e(t,i.isWarning),this.appendSourceLocation(t,i.location,s.model()?.getTargetIfNotDisposed());break;case IssuesManager.CorsIssue.IssueCode.PreflightMissingPrivateNetworkAccessId:case IssuesManager.CorsIssue.IssueCode.PreflightMissingPrivateNetworkAccessName:t.appendChild(this.createRequestCell(i.request,l)),this.#e(t,i.isWarning),t.appendChild(this.createRequestCell(i.request,{...l,linkToPreflight:!0,highlightHeader:n})),this.appendIssueDetailCell(t,CorsIssueDetailsView.getHeaderFromError(a)),this.appendIssueDetailCell(t,i.resourceIPAddressSpace??""),this.appendIssueDetailCell(t,i.clientSecurityState?.initiatorIPAddressSpace??""),this.#i(t,i.clientSecurityState?.initiatorIsSecureContext);break;default:t.appendChild(this.createRequestCell(i.request,l)),this.#e(t,i.isWarning),Platform.assertUnhandled(e)}this.affectedResources.appendChild(t)}update(){this.clear();const e=this.issue.getCorsIssues();e.size>0?this.#s(e.values().next().value.code(),e):this.updateAffectedResourceCount(0)}}