Skip to content
Snippets Groups Projects
Commit 266976f0 authored by Daniel Göbel's avatar Daniel Göbel
Browse files

Resolve "Add UI for parameter translation layer"

parent b814e132
No related branches found
No related tags found
1 merge request!102Resolve "Add UI for parameter translation layer"
Showing
with 856 additions and 1174 deletions
image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/node:18
image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/node:20
cache:
paths:
- node_modules
......@@ -34,16 +34,23 @@ build:
paths:
- dist
publish-main-docker-container-job:
.build-container-job:
stage: deploy
image:
name: gcr.io/kaniko-project/executor:v1.21.0-debug
entrypoint: [""]
name: gcr.io/kaniko-project/executor:v1.21.1-debug
entrypoint: [ "" ]
dependencies: [ ]
cache: [ ]
before_script:
- echo "{\"auths\":{\"${CI_REGISTRY}\":{\"auth\":\"$(printf "%s:%s" "${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}" | base64 | tr -d '\n')\"},\"$(echo -n $CI_DEPENDENCY_PROXY_SERVER | awk -F[:] '{print $1}')\":{\"auth\":\"$(printf "%s:%s" ${CI_DEPENDENCY_PROXY_USER} "${CI_DEPENDENCY_PROXY_PASSWORD}" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json
publish-main-docker-container-job:
extends: .build-container-job
only:
refs:
- main
before_script:
- echo "{\"auths\":{\"${CI_REGISTRY}\":{\"auth\":\"$(printf "%s:%s" "${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}" | base64 | tr -d '\n')\"},\"$(echo -n $CI_DEPENDENCY_PROXY_SERVER | awk -F[:] '{print $1}')\":{\"auth\":\"$(printf "%s:%s" ${CI_DEPENDENCY_PROXY_USER} "${CI_DEPENDENCY_PROXY_PASSWORD}" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json
script:
- /kaniko/executor
--context "${CI_PROJECT_DIR}"
......@@ -52,14 +59,9 @@ publish-main-docker-container-job:
--destination "${CI_REGISTRY_IMAGE}:main-latest"
publish-docker-container-job:
stage: deploy
image:
name: gcr.io/kaniko-project/executor:v1.21.0-debug
entrypoint: [""]
extends: .build-container-job
only:
- tags
before_script:
- echo "{\"auths\":{\"${CI_REGISTRY}\":{\"auth\":\"$(printf "%s:%s" "${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}" | base64 | tr -d '\n')\"},\"$(echo -n $CI_DEPENDENCY_PROXY_SERVER | awk -F[:] '{print $1}')\":{\"auth\":\"$(printf "%s:%s" ${CI_DEPENDENCY_PROXY_USER} "${CI_DEPENDENCY_PROXY_PASSWORD}" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json
script:
- /kaniko/executor
--context "${CI_PROJECT_DIR}"
......
# build stage
FROM node:18 as build-stage
FROM node:20 as build-stage
WORKDIR /app
COPY package.json ./
COPY package-lock.json ./
......@@ -10,7 +10,7 @@ RUN npm run build-only
# production stage
FROM nginx:stable-alpine as production-stage
EXPOSE 80
HEALTHCHECK --interval=30s --timeout=2s CMD curl --head -f http://localhost || exit 1
HEALTHCHECK --interval=10s --timeout=2s CMD curl --head -f http://localhost || exit 1
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=build-stage /app/dist /usr/share/nginx/html
COPY --from=build-stage /app/src/assets/env.template.js /tmp
......
This diff is collapsed.
<script setup lang="ts">
import { onBeforeMount } from "vue";
import { onBeforeMount, onMounted } from "vue";
import { useCookies } from "vue3-cookies";
import { useAuthStore } from "@/stores/users";
import { useRoute, useRouter } from "vue-router";
......@@ -12,12 +12,20 @@ import axios from "axios";
import { useNameStore } from "@/stores/names";
import AppHeader from "@/components/AppHeader.vue";
import AppFooter from "@/components/AppFooter.vue";
import { useResourceStore } from "@/stores/resources";
import { useWorkflowStore } from "@/stores/workflows";
import { useBucketStore } from "@/stores/buckets";
import { useS3KeyStore } from "@/stores/s3keys";
const { cookies } = useCookies();
const store = useAuthStore();
const router = useRouter();
const route = useRoute();
const userRepository = useAuthStore();
const nameRepository = useNameStore();
const resourceRepository = useResourceStore();
const workflowRepository = useWorkflowStore();
const bucketRepository = useBucketStore();
const s3KeyRepository = useS3KeyStore();
onBeforeMount(() => {
S3ProxyOpenAPI.BASE = environment.S3PROXY_API_BASE_URL;
......@@ -31,7 +39,7 @@ onBeforeMount(() => {
(err.response.status === 400 || err.response.status === 403) &&
err.response.data.detail?.includes("JWT")
) {
store.logout();
userRepository.logout();
cookies.remove("bearer");
router.push({
name: "login",
......@@ -46,15 +54,15 @@ onBeforeMount(() => {
return Promise.reject(err);
},
);
store.setToken(cookies.get("bearer"));
userRepository.setToken(cookies.get("bearer"));
router.afterEach((to, from) => {
window._paq.push(["setReferrerUrl", from.path]);
window._paq.push(["deleteCustomVariables", "page"]);
window._paq.push(["deleteCustomDimension", 1]);
window._paq.push(["setCustomUrl", to.path]);
window._paq.push(["setDocumentTitle", to.name]);
if (store.currentUID.length > 0) {
window._paq.push(["setUserId", store.currentUID]);
if (userRepository.currentUID.length > 0) {
window._paq.push(["setUserId", userRepository.currentUID]);
}
window._paq.push(["trackPageView"]);
window._paq.push(["enableLinkTracking"]);
......@@ -62,7 +70,7 @@ onBeforeMount(() => {
router.beforeEach(async (to) => {
// make sure the user is authenticated
if (
!store.authenticated &&
!userRepository.authenticated &&
// ❗️ Avoid an infinite redirect
to.name !== "login"
) {
......@@ -73,20 +81,20 @@ onBeforeMount(() => {
};
} else if (
to.meta.requiresDeveloperRole &&
!(store.workflowDev || store.admin)
!(userRepository.workflowDev || userRepository.admin)
) {
return { name: "dashboard" };
} else if (
to.meta.requiresReviewerRole &&
!(store.rewiewer || store.admin)
!(userRepository.rewiewer || userRepository.admin)
) {
return { name: "dashboard" };
} else if (
to.meta.requiresMaintainerRole &&
!(store.resourceMaintainer || store.admin)
!(userRepository.resourceMaintainer || userRepository.admin)
) {
return { name: "dashboard" };
} else if (to.meta.adminRole && !store.admin) {
} else if (to.meta.adminRole && !userRepository.admin) {
return { name: "dashboard" };
} else if (to.name !== "login" && to.query.return_path) {
// return to original path after login
......@@ -95,6 +103,24 @@ onBeforeMount(() => {
});
nameRepository.loadNameMapping();
});
onMounted(() => {
if (userRepository.authenticated) {
resourceRepository.fetchPublicResources();
workflowRepository.fetchWorkflows();
bucketRepository.fetchBuckets();
s3KeyRepository.fetchS3Keys();
if (!userRepository.foreignUser) {
bucketRepository.fetchOwnPermissions();
}
if (userRepository.workflowDev || userRepository.admin) {
workflowRepository.fetchOwnWorkflows();
}
if (userRepository.resourceMaintainer || userRepository.admin) {
resourceRepository.fetchOwnResources();
}
}
});
</script>
<template>
......
/* generated using openapi-typescript-codegen -- do no edit */
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
......
/* generated using openapi-typescript-codegen -- do no edit */
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
......
/* generated using openapi-typescript-codegen -- do no edit */
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
......
/* generated using openapi-typescript-codegen -- do no edit */
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
......@@ -85,9 +85,9 @@ export class CancelablePromise<T> implements Promise<T> {
});
}
get [Symbol.toStringTag]() {
return "Cancellable Promise";
}
get [Symbol.toStringTag]() {
return "Cancellable Promise";
}
public then<TResult1 = T, TResult2 = never>(
onFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,
......
/* generated using openapi-typescript-codegen -- do no edit */
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
......
/* generated using openapi-typescript-codegen -- do no edit */
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
......@@ -175,7 +175,7 @@ export const getHeaders = async (config: OpenAPIConfig, options: ApiRequestOptio
headers['Authorization'] = `Basic ${credentials}`;
}
if (options.body) {
if (options.body !== undefined) {
if (options.mediaType) {
headers['Content-Type'] = options.mediaType;
} else if (isBlob(options.body)) {
......@@ -215,6 +215,7 @@ export const sendRequest = async <T>(
data: body ?? formData,
method: options.method,
withCredentials: config.WITH_CREDENTIALS,
withXSRFToken: config.CREDENTIALS === 'include' ? config.WITH_CREDENTIALS : false,
cancelToken: source.token,
};
......
/* generated using openapi-typescript-codegen -- do no edit */
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
......
/* generated using openapi-typescript-codegen -- do no edit */
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
......
/* generated using openapi-typescript-codegen -- do no edit */
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
......
/* generated using openapi-typescript-codegen -- do no edit */
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
......
/* generated using openapi-typescript-codegen -- do no edit */
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
......
/* generated using openapi-typescript-codegen -- do no edit */
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
......
/* generated using openapi-typescript-codegen -- do no edit */
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
......
/* generated using openapi-typescript-codegen -- do no edit */
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
......
/* generated using openapi-typescript-codegen -- do no edit */
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment