fix: selectable destinations

This commit is contained in:
Andras Bacsai 2022-07-21 13:30:42 +00:00
parent 1950429e1d
commit b5b7338e92
12 changed files with 26 additions and 17 deletions

View File

@ -6,11 +6,12 @@ import { asyncExecShell, decrypt, errorHandler, executeDockerCmd, listSettings,
import { checkContainer, dockerInstance, getEngine } from '../../../../lib/docker'; import { checkContainer, dockerInstance, getEngine } from '../../../../lib/docker';
import type { OnlyId } from '../../../../types'; import type { OnlyId } from '../../../../types';
import type { CheckDestination, NewDestination, Proxy, SaveDestinationSettings } from './types'; import type { CheckDestination, ListDestinations, NewDestination, Proxy, SaveDestinationSettings } from './types';
export async function listDestinations(request: FastifyRequest) { export async function listDestinations(request: FastifyRequest<ListDestinations>) {
try { try {
const teamId = request.user.teamId; const teamId = request.user.teamId;
const { onlyVerified = false } = request.query
let destinations = [] let destinations = []
if (teamId === '0') { if (teamId === '0') {
destinations = await prisma.destinationDocker.findMany({ include: { teams: true } }); destinations = await prisma.destinationDocker.findMany({ include: { teams: true } });
@ -20,6 +21,9 @@ export async function listDestinations(request: FastifyRequest) {
include: { teams: true } include: { teams: true }
}); });
} }
if (onlyVerified) {
destinations = destinations.filter(destination => destination.engine || (destination.remoteEngine && destination.remoteVerified))
}
return { return {
destinations destinations
} }
@ -163,7 +167,7 @@ export async function startProxy(request: FastifyRequest<Proxy>) {
await startTraefikProxy(id); await startTraefikProxy(id);
return {} return {}
} catch ({ status, message }) { } catch ({ status, message }) {
console.log({status, message}) console.log({ status, message })
await stopTraefikProxy(id); await stopTraefikProxy(id);
return errorHandler({ status, message }) return errorHandler({ status, message })
} }

View File

@ -2,13 +2,13 @@ import { FastifyPluginAsync } from 'fastify';
import { assignSSHKey, checkDestination, deleteDestination, getDestination, getDestinationStatus, listDestinations, newDestination, restartProxy, saveDestinationSettings, startProxy, stopProxy, verifyRemoteDockerEngine } from './handlers'; import { assignSSHKey, checkDestination, deleteDestination, getDestination, getDestinationStatus, listDestinations, newDestination, restartProxy, saveDestinationSettings, startProxy, stopProxy, verifyRemoteDockerEngine } from './handlers';
import type { OnlyId } from '../../../../types'; import type { OnlyId } from '../../../../types';
import type { CheckDestination, NewDestination, Proxy, SaveDestinationSettings } from './types'; import type { CheckDestination, ListDestinations, NewDestination, Proxy, SaveDestinationSettings } from './types';
const root: FastifyPluginAsync = async (fastify): Promise<void> => { const root: FastifyPluginAsync = async (fastify): Promise<void> => {
fastify.addHook('onRequest', async (request) => { fastify.addHook('onRequest', async (request) => {
return await request.jwtVerify() return await request.jwtVerify()
}) })
fastify.get('/', async (request) => await listDestinations(request)); fastify.get<ListDestinations>('/', async (request) => await listDestinations(request));
fastify.post<CheckDestination>('/check', async (request) => await checkDestination(request)); fastify.post<CheckDestination>('/check', async (request) => await checkDestination(request));
fastify.get<OnlyId>('/:id', async (request) => await getDestination(request)); fastify.get<OnlyId>('/:id', async (request) => await getDestination(request));

View File

@ -1,5 +1,10 @@
import { OnlyId } from "../../../../types" import { OnlyId } from "../../../../types"
export interface ListDestinations {
Querystring: {
onlyVerified: string
}
}
export interface CheckDestination { export interface CheckDestination {
Body: { Body: {
network: string network: string

View File

@ -9,7 +9,7 @@
redirect: `/applications/${params.id}` redirect: `/applications/${params.id}`
}; };
} }
const response = await get(`/destinations`); const response = await get(`/destinations?onlyVerified=true`);
return { return {
props: { props: {
...response ...response
@ -65,7 +65,7 @@
<div class="flex flex-col justify-center"> <div class="flex flex-col justify-center">
{#if !destinations || ownDestinations.length === 0} {#if !destinations || ownDestinations.length === 0}
<div class="flex-col"> <div class="flex-col">
<div class="pb-2">{$t('application.configuration.no_configurable_destination')}</div> <div class="pb-2 text-center font-bold">{$t('application.configuration.no_configurable_destination')}</div>
<div class="flex justify-center"> <div class="flex justify-center">
<a href="/new/destination" sveltekit:prefetch class="add-icon bg-sky-600 hover:bg-sky-500"> <a href="/new/destination" sveltekit:prefetch class="add-icon bg-sky-600 hover:bg-sky-500">
<svg <svg

View File

@ -93,7 +93,7 @@
<div class="flex flex-col"> <div class="flex flex-col">
<div class="flex flex-col flex-wrap justify-center px-2 md:flex-row"> <div class="flex flex-col flex-wrap justify-center px-2 md:flex-row">
{#each ownApplications as application} {#each ownApplications as application}
<a href="/applications/{application.id}" class="w-96 p-2 no-underline"> <a href="/applications/{application.id}" class="p-2 no-underline">
<div class="box-selection group relative hover:bg-green-600"> <div class="box-selection group relative hover:bg-green-600">
{#if application.buildPack} {#if application.buildPack}
{#if application.buildPack.toLowerCase() === 'rust'} {#if application.buildPack.toLowerCase() === 'rust'}

View File

@ -9,7 +9,7 @@
redirect: `/database/${params.id}` redirect: `/database/${params.id}`
}; };
} }
const response = await get(`/destinations`); const response = await get(`/destinations?onlyVerified=true`);
return { return {
props: { props: {
...response ...response
@ -55,7 +55,7 @@
<div class="flex justify-center"> <div class="flex justify-center">
{#if !destinations || destinations.length === 0} {#if !destinations || destinations.length === 0}
<div class="flex-col"> <div class="flex-col">
<div class="pb-2">{$t('application.configuration.no_configurable_destination')}</div> <div class="pb-2 text-center font-bold">{$t('application.configuration.no_configurable_destination')}</div>
<div class="flex justify-center"> <div class="flex justify-center">
<a href="/new/destination" sveltekit:prefetch class="add-icon bg-sky-600 hover:bg-sky-500"> <a href="/new/destination" sveltekit:prefetch class="add-icon bg-sky-600 hover:bg-sky-500">
<svg <svg

View File

@ -77,7 +77,7 @@
<div class="flex flex-col"> <div class="flex flex-col">
<div class="flex flex-col flex-wrap justify-center px-2 md:flex-row"> <div class="flex flex-col flex-wrap justify-center px-2 md:flex-row">
{#each ownDatabases as database} {#each ownDatabases as database}
<a href="/databases/{database.id}" class="w-96 p-2 no-underline"> <a href="/databases/{database.id}" class="p-2 no-underline">
<div class="box-selection group relative hover:bg-purple-600"> <div class="box-selection group relative hover:bg-purple-600">
{#if database.type === 'clickhouse'} {#if database.type === 'clickhouse'}
<Clickhouse isAbsolute /> <Clickhouse isAbsolute />

View File

@ -39,7 +39,7 @@
</script> </script>
<div class="flex space-x-1 p-6 font-bold"> <div class="flex space-x-1 p-6 font-bold">
<div class="mr-4 text-2xl tracking-tight">SSH Keys</div> <div class="mr-4 text-2xl tracking-tight">Select a SSH Keys</div>
</div> </div>
<div class="flex flex-col justify-center"> <div class="flex flex-col justify-center">
<div class="flex flex-col flex-wrap justify-center px-2 md:flex-row "> <div class="flex flex-col flex-wrap justify-center px-2 md:flex-row ">

View File

@ -66,7 +66,7 @@
<div class="flex flex-col"> <div class="flex flex-col">
<div class="flex flex-col flex-wrap justify-center px-2 md:flex-row"> <div class="flex flex-col flex-wrap justify-center px-2 md:flex-row">
{#each ownDestinations as destination} {#each ownDestinations as destination}
<a href="/destinations/{destination.id}" class="w-96 p-2 no-underline"> <a href="/destinations/{destination.id}" class="p-2 no-underline">
<div class="box-selection hover:bg-sky-600"> <div class="box-selection hover:bg-sky-600">
<div class="truncate text-center text-xl font-bold">{destination.name}</div> <div class="truncate text-center text-xl font-bold">{destination.name}</div>
{#if $appSession.teamId === '0' && otherDestinations.length > 0} {#if $appSession.teamId === '0' && otherDestinations.length > 0}

View File

@ -9,7 +9,7 @@
redirect: `/services/${params.id}` redirect: `/services/${params.id}`
}; };
} }
const response = await get(`/destinations`); const response = await get(`/destinations?onlyVerified=true`);
return { return {
props: { props: {
...response ...response
@ -54,7 +54,7 @@
<div class="flex justify-center"> <div class="flex justify-center">
{#if !destinations || destinations.length === 0} {#if !destinations || destinations.length === 0}
<div class="flex-col"> <div class="flex-col">
<div class="pb-2">{$t('application.configuration.no_configurable_destination')}</div> <div class="pb-2 text-center font-bold">{$t('application.configuration.no_configurable_destination')}</div>
<div class="flex justify-center"> <div class="flex justify-center">
<a href="/new/destination" sveltekit:prefetch class="add-icon bg-sky-600 hover:bg-sky-500"> <a href="/new/destination" sveltekit:prefetch class="add-icon bg-sky-600 hover:bg-sky-500">
<svg <svg

View File

@ -73,7 +73,7 @@
<div class="flex flex-col"> <div class="flex flex-col">
<div class="flex flex-col flex-wrap justify-center px-2 md:flex-row"> <div class="flex flex-col flex-wrap justify-center px-2 md:flex-row">
{#each ownServices as service} {#each ownServices as service}
<a href="/services/{service.id}" class="w-96 p-2 no-underline"> <a href="/services/{service.id}" class=" p-2 no-underline">
<div class="box-selection group relative hover:bg-pink-600"> <div class="box-selection group relative hover:bg-pink-600">
<Services type={service.type} /> <Services type={service.type} />
<div class="truncate text-center text-xl font-bold"> <div class="truncate text-center text-xl font-bold">

View File

@ -66,7 +66,7 @@
<div class="flex flex-col"> <div class="flex flex-col">
<div class="flex flex-col flex-wrap justify-center px-2 md:flex-row"> <div class="flex flex-col flex-wrap justify-center px-2 md:flex-row">
{#each ownSources as source} {#each ownSources as source}
<a href="/sources/{source.id}" class="w-96 p-2 no-underline"> <a href="/sources/{source.id}" class="p-2 no-underline">
<div <div
class="box-selection group relative hover:bg-orange-600" class="box-selection group relative hover:bg-orange-600"
class:border-red-500={source.gitlabApp && !source.gitlabAppId} class:border-red-500={source.gitlabApp && !source.gitlabAppId}