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

Merge branch 'feature/105-add-ui-for-parameter-translation-layer' into 'main'

Resolve "Add UI for parameter translation layer"

Closes #105

See merge request !102
parents b814e132 266976f0
No related branches found
No related tags found
1 merge request!102Resolve "Add UI for parameter translation layer"
Pipeline #50669 passed
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