From d0eb8eec108a7855d4347b2e53e93a304b4e200c Mon Sep 17 00:00:00 2001 From: Hamcha Date: Sun, 30 Jul 2023 14:09:27 +0200 Subject: [PATCH] admin cp baby steps --- package-lock.json | 41 +++++++++++++++++++ package.json | 3 +- src/lib/api/cookies.ts | 3 +- src/lib/api/sites.ts | 11 +++++ src/routes/(admin-panel)/+layout.svelte | 11 ++++- .../(admin-panel)/admin/+page.server.ts | 11 +++++ src/routes/(admin-panel)/admin/+page.svelte | 18 +++++++- .../admin/sites/[site]/+layout.svelte | 11 +++++ .../admin/sites/[site]/+layout.ts | 12 ++++++ .../admin/sites/[site]/+page.svelte | 7 ++++ .../(admin-panel)/admin/sites/[site]/+page.ts | 9 ++++ .../admin/sites/[site]/posts/new/+page.svelte | 1 + .../(admin-panel)/login/+page.server.ts | 11 ++--- src/routes/(user-website)/+page.svelte | 4 ++ 14 files changed, 144 insertions(+), 9 deletions(-) create mode 100644 src/routes/(admin-panel)/admin/+page.server.ts create mode 100644 src/routes/(admin-panel)/admin/sites/[site]/+layout.svelte create mode 100644 src/routes/(admin-panel)/admin/sites/[site]/+layout.ts create mode 100644 src/routes/(admin-panel)/admin/sites/[site]/+page.svelte create mode 100644 src/routes/(admin-panel)/admin/sites/[site]/+page.ts create mode 100644 src/routes/(admin-panel)/admin/sites/[site]/posts/new/+page.svelte diff --git a/package-lock.json b/package-lock.json index f2cf755..9e4d1a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "eslint-plugin-svelte": "^2.32.4", "prettier": "^3.0.0", "prettier-plugin-svelte": "^3.0.3", + "sass": "^1.64.1", "svelte": "^4.1.1", "svelte-check": "^3.4.6", "sveltekit-adapter-deno": "^0.10.2", @@ -1770,6 +1771,12 @@ "node": ">= 4" } }, + "node_modules/immutable": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.1.tgz", + "integrity": "sha512-lj9cnmB/kVS0QHsJnYKD1uo3o39nrbKxszjnqS9Fr6NB7bZzW45U6WSGBPKXDL/CvDKqDNPA4r3DoDQ8GTxo2A==", + "dev": true + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -2569,6 +2576,23 @@ "rimraf": "bin.js" } }, + "node_modules/sass": { + "version": "1.64.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.64.1.tgz", + "integrity": "sha512-16rRACSOFEE8VN7SCgBu1MpYCyN7urj9At898tyzdXFhC+a+yOX5dXwAR7L8/IdPJ1NB8OYoXmD55DM30B2kEQ==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", @@ -4264,6 +4288,12 @@ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true }, + "immutable": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.1.tgz", + "integrity": "sha512-lj9cnmB/kVS0QHsJnYKD1uo3o39nrbKxszjnqS9Fr6NB7bZzW45U6WSGBPKXDL/CvDKqDNPA4r3DoDQ8GTxo2A==", + "dev": true + }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -4794,6 +4824,17 @@ } } }, + "sass": { + "version": "1.64.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.64.1.tgz", + "integrity": "sha512-16rRACSOFEE8VN7SCgBu1MpYCyN7urj9At898tyzdXFhC+a+yOX5dXwAR7L8/IdPJ1NB8OYoXmD55DM30B2kEQ==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, "semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", diff --git a/package.json b/package.json index dc67d79..f6a2db1 100644 --- a/package.json +++ b/package.json @@ -26,10 +26,11 @@ "prettier-plugin-svelte": "^3.0.3", "svelte": "^4.1.1", "svelte-check": "^3.4.6", + "sveltekit-adapter-deno": "^0.10.2", "tslib": "^2.6.1", "typescript": "^5.1.6", "vite": "^4.4.7", - "sveltekit-adapter-deno": "^0.10.2" + "sass": "^1.64.1" }, "type": "module", "dependencies": {} diff --git a/src/lib/api/cookies.ts b/src/lib/api/cookies.ts index 594a06e..0d2257d 100644 --- a/src/lib/api/cookies.ts +++ b/src/lib/api/cookies.ts @@ -76,7 +76,8 @@ export function passthroughSession(response: Response, cookies: Cookies) { sameSite: 'strict', domain: PUBLIC_DOMAIN, expires: info.options.Expires, - maxAge: info.options['Max-Age'] + maxAge: info.options['Max-Age'], + path: info.options.Path ?? '/' }); } } diff --git a/src/lib/api/sites.ts b/src/lib/api/sites.ts index 49fd476..b1f349a 100644 --- a/src/lib/api/sites.ts +++ b/src/lib/api/sites.ts @@ -1,3 +1,4 @@ +import type { Cookies } from '@sveltejs/kit'; import type { Collection } from './collections'; import { callJSON } from './request'; @@ -14,4 +15,14 @@ export interface Site { deleted_at: string | null; } +export interface SiteShortInfo { + name: string; + title: string; + description: string | null; + created_at: string; +} + export const getSiteInfo = (name: string) => callJSON('GET', `sites/${name}`); + +export const getSitesForCurrentUser = (cookies: Cookies) => + callJSON('GET', 'users/@current/sites', undefined, cookies); diff --git a/src/routes/(admin-panel)/+layout.svelte b/src/routes/(admin-panel)/+layout.svelte index 0d118e5..370f80f 100644 --- a/src/routes/(admin-panel)/+layout.svelte +++ b/src/routes/(admin-panel)/+layout.svelte @@ -1,3 +1,12 @@ -

cenere!!!

+ + Cenere Dashboard + + +

Cenere

+ + diff --git a/src/routes/(admin-panel)/admin/+page.server.ts b/src/routes/(admin-panel)/admin/+page.server.ts new file mode 100644 index 0000000..c25dd5d --- /dev/null +++ b/src/routes/(admin-panel)/admin/+page.server.ts @@ -0,0 +1,11 @@ +import { getSitesForCurrentUser } from '$lib/api/sites'; +import { must } from '$lib/errors'; +import type { PageServerLoad } from '../login/$types'; + +export const load = (async ({ cookies }) => { + const sites = await must(getSitesForCurrentUser(cookies)); + + return { + sites + }; +}) satisfies PageServerLoad; diff --git a/src/routes/(admin-panel)/admin/+page.svelte b/src/routes/(admin-panel)/admin/+page.svelte index 5d308e1..f4b8c72 100644 --- a/src/routes/(admin-panel)/admin/+page.svelte +++ b/src/routes/(admin-panel)/admin/+page.svelte @@ -1 +1,17 @@ -aaaa + + +Your sites: + +{#if data.sites} + +{:else} + +{/if} diff --git a/src/routes/(admin-panel)/admin/sites/[site]/+layout.svelte b/src/routes/(admin-panel)/admin/sites/[site]/+layout.svelte new file mode 100644 index 0000000..5b9b364 --- /dev/null +++ b/src/routes/(admin-panel)/admin/sites/[site]/+layout.svelte @@ -0,0 +1,11 @@ + + +
+

{data.siteInfo.title}

+
+ + diff --git a/src/routes/(admin-panel)/admin/sites/[site]/+layout.ts b/src/routes/(admin-panel)/admin/sites/[site]/+layout.ts new file mode 100644 index 0000000..246984e --- /dev/null +++ b/src/routes/(admin-panel)/admin/sites/[site]/+layout.ts @@ -0,0 +1,12 @@ +import type { LayoutLoad } from './$types'; +import { must } from '$lib/errors'; +import { getSiteInfo } from '$lib/api/sites'; + +export const load = (async ({ params, url }) => { + const siteInfo = await must(getSiteInfo(params.site)); + + return { + siteInfo, + base: url.pathname + }; +}) satisfies LayoutLoad; diff --git a/src/routes/(admin-panel)/admin/sites/[site]/+page.svelte b/src/routes/(admin-panel)/admin/sites/[site]/+page.svelte new file mode 100644 index 0000000..1ea29db --- /dev/null +++ b/src/routes/(admin-panel)/admin/sites/[site]/+page.svelte @@ -0,0 +1,7 @@ + + +New post diff --git a/src/routes/(admin-panel)/admin/sites/[site]/+page.ts b/src/routes/(admin-panel)/admin/sites/[site]/+page.ts new file mode 100644 index 0000000..feb1140 --- /dev/null +++ b/src/routes/(admin-panel)/admin/sites/[site]/+page.ts @@ -0,0 +1,9 @@ +import type { PageLoad } from './$types'; + +export const load = (async ({ parent }) => { + const site = await parent(); + + return { + site + }; +}) satisfies PageLoad; diff --git a/src/routes/(admin-panel)/admin/sites/[site]/posts/new/+page.svelte b/src/routes/(admin-panel)/admin/sites/[site]/posts/new/+page.svelte new file mode 100644 index 0000000..85c5378 --- /dev/null +++ b/src/routes/(admin-panel)/admin/sites/[site]/posts/new/+page.svelte @@ -0,0 +1 @@ +

New post

diff --git a/src/routes/(admin-panel)/login/+page.server.ts b/src/routes/(admin-panel)/login/+page.server.ts index 4ef2eb2..6eb7694 100644 --- a/src/routes/(admin-panel)/login/+page.server.ts +++ b/src/routes/(admin-panel)/login/+page.server.ts @@ -1,4 +1,4 @@ -import { HttpError, redirect } from '@sveltejs/kit'; +import { redirect } from '@sveltejs/kit'; import type { Actions, PageServerLoad } from './$types'; import { APIError } from '$lib/api/request'; import { getLoggedInUser, login, logout } from '$lib/api/auth'; @@ -8,14 +8,15 @@ export const load = async function ({ url, cookies }) { // Check that login is valid if (session) { + let user: string | null = null; try { - const user = await getLoggedInUser(cookies); - if (user) { - throw redirect(302, url.searchParams.get('then') || '/admin'); - } + user = await getLoggedInUser(cookies); } catch (e) { // do nothing if not logged in } + if (user) { + throw redirect(302, url.searchParams.get('then') || '/admin'); + } } } satisfies PageServerLoad; diff --git a/src/routes/(user-website)/+page.svelte b/src/routes/(user-website)/+page.svelte index 92000a9..b7fb197 100644 --- a/src/routes/(user-website)/+page.svelte +++ b/src/routes/(user-website)/+page.svelte @@ -4,6 +4,10 @@ export let data: PageData; + + {data.site.title} + + {#if data.pages} {#each data.pages.items as post}