Frontend: Use public flag to disable auth #16

Signed-off-by: Michael Mayer <michael@liquidbytes.net>
This commit is contained in:
Michael Mayer 2019-11-11 22:14:34 +01:00
parent a14b74dfa6
commit cdb7134b80
5 changed files with 18 additions and 19 deletions

View file

@ -33,14 +33,15 @@
<script> <script>
window.appConfig = { window.appConfig = {
name: "{{ .name }}", "name": "{{ .name }}",
version: "{{ .version }}", "version": "{{ .version }}",
copyright: "{{ .copyright }}", "copyright": "{{ .copyright }}",
debug: {{ .debug }}, "debug": {{ .debug }},
readonly: {{ .readonly }}, "readonly": {{ .readonly }},
cameras: {{ .cameras }}, "public": {{ .public }},
countries: {{ .countries }}, "cameras": {{ .cameras }},
thumbnails: {{ .thumbnails }} "countries": {{ .countries }},
"thumbnails": {{ .thumbnails }}
}; };
</script> </script>
</head> </head>

View file

@ -9,4 +9,4 @@ RUN wget -qO- https://dl.photoprism.org/fixtures/demo.tar.gz | tar xvz -C Pictur
RUN photoprism import RUN photoprism import
# Start PhotoPrism server # Start PhotoPrism server
CMD photoprism start CMD photoprism --public start

View file

@ -23,6 +23,7 @@ import { Settings } from "luxon";
const config = new Config(window.localStorage, window.appConfig); const config = new Config(window.localStorage, window.appConfig);
const viewer = new Viewer(); const viewer = new Viewer();
const clipboard = new Clipboard(window.localStorage, "photo_clipboard"); const clipboard = new Clipboard(window.localStorage, "photo_clipboard");
const isPublic = config.getValue("public");
// Assign helpers to VueJS prototype // Assign helpers to VueJS prototype
Vue.prototype.$event = Event; Vue.prototype.$event = Event;
@ -69,7 +70,7 @@ const router = new Router({
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {
if(to.matched.some(record => record.meta.admin)) { if(to.matched.some(record => record.meta.admin)) {
if (Session.isAdmin()) { if (isPublic || Session.isAdmin()) {
next(); next();
} else { } else {
next({ next({
@ -78,7 +79,7 @@ router.beforeEach((to, from, next) => {
}); });
} }
} else if(to.matched.some(record => record.meta.auth)) { } else if(to.matched.some(record => record.meta.auth)) {
if (Session.isUser()) { if (isPublic || Session.isUser()) {
next(); next();
} else { } else {
next({ next({

View file

@ -146,7 +146,7 @@
</v-list-tile-content> </v-list-tile-content>
</v-list-tile> </v-list-tile>
<v-list-tile to="/library" @click="" class="p-navigation-library" v-if="session.auth"> <v-list-tile to="/library" @click="" class="p-navigation-library" v-if="session.auth || isPublic">
<v-list-tile-action> <v-list-tile-action>
<v-icon>camera_roll</v-icon> <v-icon>camera_roll</v-icon>
</v-list-tile-action> </v-list-tile-action>
@ -156,7 +156,7 @@
</v-list-tile-content> </v-list-tile-content>
</v-list-tile> </v-list-tile>
<v-list-tile to="/settings" @click="" class="p-navigation-settings" v-if="session.auth"> <v-list-tile to="/settings" @click="" class="p-navigation-settings" v-if="session.auth || isPublic">
<v-list-tile-action> <v-list-tile-action>
<v-icon>settings</v-icon> <v-icon>settings</v-icon>
</v-list-tile-action> </v-list-tile-action>
@ -166,7 +166,7 @@
</v-list-tile-content> </v-list-tile-content>
</v-list-tile> </v-list-tile>
<v-list-tile @click="logout" class="p-navigation-logout" v-if="session.auth"> <v-list-tile @click="logout" class="p-navigation-logout" v-if="!isPublic && session.auth">
<v-list-tile-action> <v-list-tile-action>
<v-icon>power_settings_new</v-icon> <v-icon>power_settings_new</v-icon>
</v-list-tile-action> </v-list-tile-action>
@ -176,7 +176,7 @@
</v-list-tile-content> </v-list-tile-content>
</v-list-tile> </v-list-tile>
<v-list-tile to="/login" @click="" class="p-navigation-login" v-if="!session.auth"> <v-list-tile to="/login" @click="" class="p-navigation-login" v-if="!isPublic && !session.auth">
<v-list-tile-action> <v-list-tile-action>
<v-icon>lock</v-icon> <v-icon>lock</v-icon>
</v-list-tile-action> </v-list-tile-action>
@ -200,6 +200,7 @@
drawer: null, drawer: null,
mini: mini, mini: mini,
session: this.$session, session: this.$session,
isPublic: this.$config.getValue("public"),
}; };
}, },
methods: { methods: {

View file

@ -20,8 +20,4 @@ test('Navigate', async t => {
await t await t
.click('a[href="/labels"]') .click('a[href="/labels"]')
.expect(Selector('div.p-page-labels').exists, {timeout: 5000}).ok(); .expect(Selector('div.p-page-labels').exists, {timeout: 5000}).ok();
await page.openNav();
await t
.click('a[href="/login"]')
.expect(Selector('div.p-page-login').exists, {timeout: 5000}).ok();
}); });