From b623b24329226ac4c6c0c90e359de474db47de3d Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Mon, 3 Apr 2023 13:33:42 +0000 Subject: [PATCH 1/2] Ask for new immutable parameteers --- site/src/api/api.ts | 51 ++++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/site/src/api/api.ts b/site/src/api/api.ts index b686b2936594e..2c871af80e655 100644 --- a/site/src/api/api.ts +++ b/site/src/api/api.ts @@ -5,25 +5,27 @@ import { DeploymentConfig } from "./types" import * as TypesGen from "./typesGenerated" // Adds 304 for the default axios validateStatus function -// https://github.com/axios/axios#handling-errors -// Check status here https://httpstatusdogs.com/ +// https://github.com/axios/axios#handling-errors Check status here +// https://httpstatusdogs.com/ axios.defaults.validateStatus = (status) => { return (status >= 200 && status < 300) || status === 304 } export const hardCodedCSRFCookie = (): string => { - // This is a hard coded CSRF token/cookie pair for local development. - // In prod, the GoLang webserver generates a random cookie with a new token for - // each document request. For local development, we don't use the Go webserver for static files, - // so this is the 'hack' to make local development work with remote apis. - // The CSRF cookie for this token is "JXm9hOUdZctWt0ZZGAy9xiS/gxMKYOThdxjjMnMUyn4=" + // This is a hard coded CSRF token/cookie pair for local development. In prod, + // the GoLang webserver generates a random cookie with a new token for each + // document request. For local development, we don't use the Go webserver for + // static files, so this is the 'hack' to make local development work with + // remote apis. The CSRF cookie for this token is + // "JXm9hOUdZctWt0ZZGAy9xiS/gxMKYOThdxjjMnMUyn4=" const csrfToken = "KNKvagCBEHZK7ihe2t7fj6VeJ0UyTDco1yVUJE8N06oNqxLu5Zx1vRxZbgfC0mJJgeGkVjgs08mgPbcWPBkZ1A==" axios.defaults.headers.common["X-CSRF-TOKEN"] = csrfToken return csrfToken } -// withDefaultFeatures sets all unspecified features to not_entitled and disabled. +// withDefaultFeatures sets all unspecified features to not_entitled and +// disabled. export const withDefaultFeatures = ( fs: Partial, ): TypesGen.Entitlements["features"] => { @@ -40,9 +42,8 @@ export const withDefaultFeatures = ( return fs as TypesGen.Entitlements["features"] } -// Always attach CSRF token to all requests. -// In puppeteer the document is undefined. In those cases, just -// do nothing. +// Always attach CSRF token to all requests. In puppeteer the document is +// undefined. In those cases, just do nothing. const token = typeof document !== "undefined" ? document.head.querySelector('meta[property="csrf-token"]') @@ -978,7 +979,8 @@ export class MissingBuildParameters extends Error { * - Get the latest template to access the latest active version * - Get the current build parameters * - Get the template parameters - * - Update the build parameters and check if there are missed parameters for the newest version + * - Update the build parameters and check if there are missed parameters for + * the newest version * - If there are missing parameters raise an error * - Create a build with the latest version and updated build parameters */ @@ -1017,12 +1019,22 @@ const getMissingParameters = ( templateParameters: TypesGen.TemplateVersionParameter[], ) => { const missingParameters: TypesGen.TemplateVersionParameter[] = [] - const requiredParameters = templateParameters.filter( - // It is required - // and it can be changed - // and it is not from a legacy variable - (p) => p.required && p.mutable && p.legacy_variable_name === undefined, - ) + const requiredParameters: TypesGen.TemplateVersionParameter[] = [] + + templateParameters.forEach((p) => { + // Legacy parameters should be required. So we can migrate them. + const isLegacy = p.legacy_variable_name === undefined + // It is mutable and required. Mutable values can be changed after so we + // don't need to ask them if they are not required. + const isMutableAndRequired = p.mutable && p.required + // Is immutable, so we can check if it is its first time on the build + const isImmutable = !p.mutable + + if (isLegacy || isMutableAndRequired || isImmutable) { + requiredParameters.push(p) + return + } + }) for (const parameter of requiredParameters) { // Check if there is a new value @@ -1049,7 +1061,8 @@ const getMissingParameters = ( /** * * @param agentId - * @returns An EventSource that emits agent metadata event objects (ServerSentEvent) + * @returns An EventSource that emits agent metadata event objects + * (ServerSentEvent) */ export const watchAgentMetadata = (agentId: string): EventSource => { return new EventSource( From 63a840a73dfc18080272f04e1295b28059b88df3 Mon Sep 17 00:00:00 2001 From: BrunoQuaresma Date: Tue, 4 Apr 2023 13:02:49 +0000 Subject: [PATCH 2/2] Fix tests --- site/src/api/api.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/src/api/api.test.ts b/site/src/api/api.test.ts index 6efe74960bf9f..70ae81b1297a7 100644 --- a/site/src/api/api.test.ts +++ b/site/src/api/api.test.ts @@ -199,9 +199,9 @@ describe("api.ts", () => { expect(error).toBeInstanceOf(api.MissingBuildParameters) // Verify if the correct missing parameters are being passed - // It should not require immutable parameters expect((error as api.MissingBuildParameters).parameters).toEqual([ MockTemplateVersionParameter1, + { ...MockTemplateVersionParameter2, mutable: false }, ]) }) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy