crude admin authentication flow

This commit is contained in:
Jörn-Michael Miehe 2023-09-11 23:10:17 +00:00
parent 26556ad309
commit 2da7b6914a
4 changed files with 28 additions and 23 deletions

View file

@ -7,16 +7,16 @@ from ..core.calendar_config import CalendarConfig, get_calendar_config
from ..core.config import Config, get_config
from ..core.depends import shuffle_solution
from ..core.settings import SETTINGS
from ._security import require_admin
from ._security import user_is_admin
router = APIRouter(prefix="/admin", tags=["admin"])
@router.get("/check")
async def check_admin(
_: None = Depends(require_admin),
@router.get("/is_admin")
async def is_admin(
is_admin: bool = Depends(user_is_admin),
) -> bool:
return True
return is_admin
class ConfigModel(BaseModel):

View file

@ -1,17 +1,18 @@
<template>
<div class="container">
<section class="section">
<h1 class="title has-text-centered is-uppercase">
Adventskalender {{ date }}
</h1>
<h1 class="title has-text-centered is-uppercase">Adventskalender</h1>
<h2 class="subtitle has-text-centered">Der Gelöt</h2>
</section>
<section class="section">
<section v-if="is_admin" class="section">
<ConfigView />
<CalendarAssistant />
<DoorMapEditor />
<AdminButton />
</section>
<section class="section">
<AdminButton v-model="is_admin" />
</section>
</div>
</template>
@ -33,18 +34,7 @@ import DoorMapEditor from "./components/DoorMapEditor.vue";
},
})
export default class extends Vue {
private visible_days = 0;
date = "";
public mounted() {
this.$advent22
.api_get<string>("days/date")
.then((date: string) => (this.date = date));
this.$advent22
.api_get<number>("days/visible_days")
.then((visible_days: number) => (this.visible_days = visible_days));
}
public is_admin = false;
}
</script>

View file

@ -1,5 +1,5 @@
<template>
<LoginModal ref="login_modal" />
<LoginModal ref="login_modal" @submit="on_login" />
<BulmaButton
class="button is-light"
@ -20,10 +20,23 @@ import LoginModal from "./LoginModal.vue";
BulmaButton,
LoginModal,
},
props: {
modelValue: Boolean,
},
emits: ["update:modelValue"],
})
export default class extends Vue {
// true, iff Benutzer Admin ist
public modelValue!: boolean;
declare $refs: {
login_modal: LoginModal;
};
public on_login() {
this.$advent22
.api_get<boolean>("admin/is_admin")
.then((is_admin) => this.$emit("update:modelValue", is_admin));
}
}
</script>

View file

@ -62,6 +62,7 @@ import BulmaButton from "./bulma/Button.vue";
components: {
BulmaButton,
},
emits: ["submit"],
})
export default class extends Vue {
public active = false;
@ -95,6 +96,7 @@ export default class extends Vue {
public submit() {
this.$advent22.set_api_auth(this.username, this.password);
this.$emit("submit");
this.set_active(false);
}
}