Skip to content

Commit 29e9dc8

Browse files
authored
V2.0.0 beta.30 (palacms#341)
* add favicon * fix creating collaborator account * update primo - symbol error handling * fix site previews, update primo
1 parent 084090b commit 29e9dc8

File tree

10 files changed

+98
-90
lines changed

10 files changed

+98
-90
lines changed

package-lock.json

+7-7
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"dependencies": {
1616
"@fontsource/fira-code": "^5.0.5",
1717
"@iconify/svelte": "^2.2.1",
18-
"@primocms/builder": "^0.1.10",
18+
"@primocms/builder": "^0.1.14",
1919
"@rollup/browser": "^3.28.0",
2020
"@supabase/auth-helpers-sveltekit": "^0.10.2",
2121
"@supabase/supabase-js": "^2.31.0",

public/index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<meta charset="utf-8" />
77
<meta name="viewport" content="width=device-width,initial-scale=1" />
88

9-
<!-- <link rel="icon" type="image/png" href="/favicon.png" /> -->
9+
<link rel="icon" type="image/png" href="/favicon.png" />
1010
<link rel="stylesheet" href="/codemirror.css" />
1111
<link rel="stylesheet" href="/build/bundle.css" />
1212

src/routes/+layout.js

+39-23
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
import { PUBLIC_SUPABASE_PUBLIC_KEY, PUBLIC_SUPABASE_URL } from '$env/static/public'
1+
import {
2+
PUBLIC_SUPABASE_PUBLIC_KEY,
3+
PUBLIC_SUPABASE_URL,
4+
} from '$env/static/public'
25
import { createSupabaseLoadClient } from '@supabase/auth-helpers-sveltekit'
36
import { redirect } from '@sveltejs/kit'
47

@@ -13,49 +16,62 @@ export async function load(event) {
1316
event: { fetch },
1417
serverSession: event?.data?.session,
1518
})
16-
const { data: { session } } = await supabase.auth.getSession()
19+
const {
20+
data: { session },
21+
} = await supabase.auth.getSession()
1722

1823
if (!session && !event.url.pathname.startsWith('/auth')) {
1924
throw redirect(303, '/auth')
2025
} else if (session) {
21-
// const site = event.params['site']
26+
// const site = event.params['site']
2227
const { sites, user } = await Promise.all([
23-
supabase.from('sites').select('id, name, url, active_deployment, collaborators (*)').order('created_at', { ascending: true }),
24-
supabase.from('users').select('*, server_members (admin, role), collaborators (role)').eq('id', session.user.id).single()
28+
supabase
29+
.from('sites')
30+
.select('id, name, url, active_deployment, collaborators (*)')
31+
.order('created_at', { ascending: true }),
32+
supabase
33+
.from('users')
34+
.select('*, server_members (admin, role), collaborators (role)')
35+
.eq('id', session.user.id)
36+
.single(),
2537
]).then(([{ data: sites }, { data: user }]) => {
26-
2738
const [server_member] = user.server_members
2839
const [collaborator] = user.collaborators
2940

30-
const user_final = server_member ? {
31-
...user,
32-
server_member: true,
33-
admin: server_member.admin,
34-
role: server_member.role,
35-
} : {
36-
...user,
37-
server_member: false,
38-
admin: false,
39-
role: collaborator.role,
40-
}
41+
const user_final = server_member
42+
? {
43+
...user,
44+
server_member: true,
45+
admin: server_member.admin,
46+
role: server_member.role,
47+
}
48+
: {
49+
...user,
50+
server_member: false,
51+
admin: false,
52+
role: collaborator.role,
53+
}
4154

4255
return {
4356
sites: sites || [],
44-
user: user_final
57+
user: user_final,
4558
}
4659
})
4760

4861
// TODO: do this w/ sql
49-
const user_sites = sites?.filter(site =>
50-
/*user is server member*/ user.server_member ||
51-
/*user is site collaborator*/ site.collaborators.some(collaborator => collaborator.user === user.id)
62+
const user_sites = sites?.filter(
63+
(site) =>
64+
/*user is server member*/ user.server_member ||
65+
/*user is site collaborator*/ site.collaborators.some(
66+
(collaborator) => collaborator.user === user.id
67+
)
5268
)
5369

5470
return {
5571
supabase,
5672
session,
5773
user,
58-
sites: user_sites
74+
sites: user_sites,
5975
}
6076
}
61-
}
77+
}

src/routes/[site]/+layout.svelte

+5-5
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,11 @@
107107
108108
storage_subscribe(async ({ bucket, action, key, file, options }) => {
109109
if (action === 'upload') {
110-
const { data } = await supabase.storage
111-
.from(bucket)
112-
.upload(key, file, options)
113-
const { data: res } = supabase.storage.from('images').getPublicUrl(key)
114-
return res.publicUrl
110+
await supabase.storage.from(bucket).upload(key, file, options)
111+
if (bucket === 'images') {
112+
const { data: res } = supabase.storage.from(bucket).getPublicUrl(key)
113+
return res.publicUrl
114+
}
115115
}
116116
})
117117
</script>

src/routes/api/invitations/+server.js

+25-16
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,39 @@
1-
import { json } from '@sveltejs/kit';
1+
import { json } from '@sveltejs/kit'
22
import supabase_admin from '$lib/supabase/admin'
33

44
export async function POST({ request }) {
5-
const {url, site = null, server_invitation, role, email} = await request.json();
5+
const {
6+
url,
7+
site = null,
8+
server_invitation,
9+
role,
10+
email,
11+
} = await request.json()
612

7-
const { data, error } = await supabase_admin.auth.admin.inviteUserByEmail(email, { redirectTo: `${url}/auth/set-password?email=${email}` })
13+
const { data, error } = await supabase_admin.auth.admin.inviteUserByEmail(
14+
email,
15+
{ redirectTo: `${url}/auth/set-password?email=${email}` }
16+
)
817

918
if (!error) {
19+
await supabase_admin.from('users').insert({
20+
id: data.user.id,
21+
email: data.user.email,
22+
})
1023

11-
await supabase_admin
12-
.from('users')
13-
.insert({
14-
id: data.user.id,
15-
email: data.user.email
16-
})
17-
1824
// Add to 'server_members' or 'collaborators'
19-
const {error} = server_invitation ?
20-
await supabase_admin.from('server_members').insert({ user: data.user.id, role }) :
21-
await supabase_admin.from('collaborators').insert({ site, user: data.user.id, role })
25+
const { error } = server_invitation
26+
? await supabase_admin
27+
.from('server_members')
28+
.insert({ user: data.user.id, role })
29+
: await supabase_admin
30+
.from('collaborators')
31+
.insert({ site, user: data.user.id, role })
2232

2333
console.error(error)
24-
return json({success: !error, error: error?.message});
34+
return json({ success: !error, error: error?.message })
2535
} else {
2636
console.error(error)
27-
return json({success: false, error: error.message});
37+
return json({ success: false, error: error.message })
2838
}
29-
3039
}

src/routes/auth/SignIn.svelte

-6
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,6 @@
1717
<span>Password</span>
1818
<input bind:value={password} type="password" name="password" />
1919
</label>
20-
<input
21-
name="invitation_id"
22-
type="text"
23-
class="hidden"
24-
value={$page.url.searchParams.get('join')}
25-
/>
2620
</div>
2721
<button class="button" type="submit">
2822
{#if !$navigating}

src/routes/auth/SignUp.svelte

-6
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,6 @@
2626
<span>Confirm Password</span>
2727
<input bind:value={password_confirmation} type="password" />
2828
</label>
29-
<input
30-
name="invitation_id"
31-
type="text"
32-
class="hidden"
33-
value={$page.url.searchParams.get('join')}
34-
/>
3529
</div>
3630
<button class="button" type="submit" {disabled}>
3731
{#if !$navigating}
+17-13
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,30 @@
11
import supabase_admin from '$lib/supabase/admin'
2-
import {redirect} from '@sveltejs/kit'
2+
import { redirect } from '@sveltejs/kit'
33

44
/** @type {import('./$types').Actions} */
55
export const actions = {
6-
default: async ({ request, locals }) => {
7-
const { session } = locals
6+
default: async ({ request, locals: { supabase } }) => {
7+
const form_data = await request.formData()
8+
const email = form_data.get('email')
9+
const password = form_data.get('password')
810

9-
const form_data = await request.formData();
10-
const email = form_data.get('email');
11-
const password = form_data.get('password');
11+
const { data } = await supabase_admin
12+
.from('users')
13+
.select('id')
14+
.eq('email', email)
15+
.single()
1216

13-
const { data, error } = await supabase_admin.auth.admin.updateUserById(
14-
session.user.id,
15-
{ password }
16-
)
17+
const { error } = await supabase_admin.auth.admin.updateUserById(data.id, {
18+
password,
19+
})
1720

1821
await supabase_admin.from('invitations').delete().match({ email })
1922

2023
if (!error) {
24+
await supabase.auth.signInWithPassword({ email, password })
2125
throw redirect(303, '/')
2226
}
2327

24-
return { success: !error, error };
25-
}
26-
};
28+
return { success: !error, error }
29+
},
30+
}

src/routes/auth/set-password/+page.svelte

+3-12
Original file line numberDiff line numberDiff line change
@@ -33,22 +33,17 @@
3333
<div class="fields">
3434
<label>
3535
<span>Email</span>
36-
<input bind:value={email} type="text" name="email" disabled />
36+
<input bind:value={email} type="email" disabled />
37+
<input value={email} type="hidden" name="email" />
3738
</label>
3839
<label>
3940
<span>Password</span>
40-
<input bind:value={password} type="password" name="email" />
41+
<input bind:value={password} type="password" />
4142
</label>
4243
<label>
4344
<span>Confirm Password</span>
4445
<input bind:value={password_again} type="password" name="password" />
4546
</label>
46-
<input
47-
name="invitation_id"
48-
type="text"
49-
class="hidden"
50-
value={$page.url.searchParams.get('join')}
51-
/>
5247
</div>
5348
<button
5449
class="button"
@@ -137,10 +132,6 @@
137132
padding: 0.75rem;
138133
background-color: #1c1c1c;
139134
font-size: 1rem;
140-
141-
&.hidden {
142-
display: none;
143-
}
144135
}
145136
146137
.button {

0 commit comments

Comments
 (0)