feat: 🚚 try to get containers api working

This commit is contained in:
Michel Roux 2024-11-03 20:42:55 +01:00
parent 786524bd8a
commit 699185ee76
6 changed files with 44 additions and 9 deletions

View File

@ -1,7 +1,7 @@
from os import getenv, path
from typing import Annotated
from typing import Annotated, Any
from docker import from_env
from docker import errors, from_env
from dotenv import load_dotenv
from fastapi import Depends, FastAPI, HTTPException, Request
from fastapi.security import HTTPBasic, HTTPBasicCredentials
@ -72,6 +72,25 @@ def get_containers(
]
@app.get("/api/container/{container_name}")
def get_container(
container_name: str,
credentials: Annotated[HTTPBasicCredentials, Depends(security)],
) -> dict[str, Any]:
try:
container = client.containers.get(container_name)
except errors.APIError:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND)
if (
credentials.username != "admin"
and f"owner={credentials.username}" not in container.labels
):
raise HTTPException(status_code=status.HTTP_403_FORBIDDEN)
return container.attrs
app.mount(
"/",
AuthStaticFiles(

View File

@ -2,7 +2,7 @@ import 'bulma/css/bulma.min.css'
import 'font-awesome/css/font-awesome.min.css'
import App from './App.vue'
import { createApp } from 'vue'
import router from './router'
import router from './router.ts'
const app = createApp(App)
app.use(router)

View File

@ -1,13 +1,17 @@
import { createRouter, createWebHistory } from 'vue-router'
import Containers from '../views/Containers.vue'
import Container from './views/Container.vue'
import Home from './views/Home.vue'
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes: [
{
path: '/',
name: 'home',
component: Containers,
component: Home,
},
{
path: '/container/:name',
component: Container,
},
],
})

View File

@ -0,0 +1,9 @@
<template>
<oui>oui</oui>
</template>
<script lang="ts">
export default {
name: 'Container',
}
</script>

View File

@ -3,7 +3,9 @@
<Message v-if="error" type="danger">{{ error }}</Message>
<ul v-if="!loading && !error">
<li v-for="container in containers" :key="container">
{{ container }}
<router-link :to="`/container/${container}`">
{{ container }}
</router-link>
</li>
</ul>
</Loading>
@ -15,7 +17,7 @@ import Loading from '@/components/Loading.vue'
import Message from '@/components/Message.vue'
export default {
name: 'Containers',
name: 'Home',
components: {
Loading,
Message,

View File

@ -7,6 +7,7 @@
"baseUrl": ".",
"paths": {
"@/*": ["frontend/*"]
}
},
"allowImportingTsExtensions": true,
}
}