Compare commits
4 commits
99f100540e
...
6fb46b2411
Author | SHA1 | Date | |
---|---|---|---|
Julien Oculi | 6fb46b2411 | ||
Julien Oculi | c65f8e4538 | ||
Julien Oculi | 3028e3bd28 | ||
Julien Oculi | 57e09f8b31 |
|
@ -1,11 +1,12 @@
|
|||
.components__member_card {
|
||||
display: grid;
|
||||
grid-template-rows: 1fr 5rem;
|
||||
min-width: 15rem;
|
||||
grid-template-rows: 1fr auto;
|
||||
width: 16rem;
|
||||
aspect-ratio: 1;
|
||||
box-shadow: 0 0 0.4rem 0.2rem var(--_translucent);
|
||||
border: var(--_border-size) solid transparent;
|
||||
background-size: cover;
|
||||
background-size: 90%;
|
||||
background-position-x: center;
|
||||
background-repeat: no-repeat;
|
||||
|
||||
&:has(a:focus-visible),
|
||||
|
@ -15,6 +16,7 @@
|
|||
|
||||
& h3 {
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
& a {
|
||||
|
|
|
@ -35,8 +35,8 @@
|
|||
":islands/": "./islands/",
|
||||
":src/": "./src/",
|
||||
":types": "./types.ts",
|
||||
"@cohabit/cohamail/": "./packages/@cohabit__cohamail@0.2.1/",
|
||||
"@cohabit/ressources_manager/": "./packages/@cohabit__ressources_manager@0.1.3/",
|
||||
"@cohabit/mailer": "jsr:@cohabit/mailer@^0.3.3",
|
||||
"@cohabit/resources-manager": "jsr:@cohabit/resources-manager@^0.2.1",
|
||||
"@deno/gfm": "https://deno.land/x/gfm@0.6.0/mod.ts",
|
||||
"@jotsr/delayed": "jsr:@jotsr/delayed@^2.1.1",
|
||||
"@jotsr/smart-css-bundler": "jsr:@jotsr/smart-css-bundler@^0.3.0",
|
||||
|
@ -59,10 +59,6 @@
|
|||
"jsx": "react-jsx",
|
||||
"jsxImportSource": "preact"
|
||||
},
|
||||
"workspaces": [
|
||||
"packages/@cohabit__cohamail@0.2.1",
|
||||
"packages/@cohabit__ressources_manager@0.1.3"
|
||||
],
|
||||
"unstable": [
|
||||
"kv"
|
||||
]
|
||||
|
|
|
@ -5,9 +5,9 @@ import { FreshContext } from '$fresh/server.ts'
|
|||
import { db } from ':src/db/mod.ts'
|
||||
import { SessionHandlers, SessionStore } from ':src/session/mod.ts'
|
||||
import { respondApi } from ':src/utils.ts'
|
||||
import { Contact, type Mail, send } from '@cohabit/cohamail/mod.ts'
|
||||
import { magicLinkTemplate } from '@cohabit/cohamail/templates/mod.ts'
|
||||
import { User } from '@cohabit/ressources_manager/src/models/mod.ts'
|
||||
import { Contact, type Mail, send } from '@cohabit/mailer'
|
||||
import { magicLinkTemplate } from '@cohabit/mailer/templates'
|
||||
import { User } from '@cohabit/resources-manager/models'
|
||||
import { sleep } from '@jotsr/delayed'
|
||||
|
||||
type MagicLinkInfos = {
|
||||
|
@ -17,7 +17,7 @@ type MagicLinkInfos = {
|
|||
}
|
||||
|
||||
export async function getUserByMail(email: string): Promise<User | undefined> {
|
||||
const [user] = await db.ressource.user
|
||||
const [user] = await db.resource.user
|
||||
.list((user) => user.mail === email)
|
||||
.take(1)
|
||||
.toArray()
|
||||
|
|
|
@ -2,8 +2,7 @@ import { db } from ':src/db/mod.ts'
|
|||
import type { SessionHandlers } from ':src/session/mod.ts'
|
||||
import { respondApi } from ':src/utils.ts'
|
||||
import { getRelyingParty } from ':src/webauthn/mod.ts'
|
||||
import { Credential, Ref, User } from '@cohabit/ressources_manager/mod.ts'
|
||||
import { Passkey } from '@cohabit/ressources_manager/src/models/src/credential.ts'
|
||||
import { Credential, Passkey, Ref, User } from '@cohabit/resources-manager/models'
|
||||
import {
|
||||
generateAuthenticationOptions,
|
||||
verifyAuthenticationResponse,
|
||||
|
@ -32,7 +31,7 @@ export const handler: SessionHandlers = {
|
|||
const { email } = await req.json() as WebAuthnLoginStartPayload
|
||||
|
||||
// Get user credentials
|
||||
const [user] = await db.ressource.user.list((user) => user.mail === email)
|
||||
const [user] = await db.resource.user.list((user) => user.mail === email)
|
||||
.take(1).toArray()
|
||||
// Resolve refs to credentials
|
||||
const resolver = Ref.dbResolver(db)
|
||||
|
@ -121,7 +120,7 @@ export const handler: SessionHandlers = {
|
|||
const newPasskey = { ...passkey, counter: newCounter }
|
||||
|
||||
// Update credential store
|
||||
const [credential] = await db.ressource.credential.list(
|
||||
const [credential] = await db.resource.credential.list(
|
||||
(credential) => {
|
||||
if (credential.category !== 'passkey') {
|
||||
return false
|
||||
|
@ -131,7 +130,7 @@ export const handler: SessionHandlers = {
|
|||
).toArray()
|
||||
|
||||
// Save credential to db
|
||||
await db.ressource.credential.set([
|
||||
await db.resource.credential.set([
|
||||
credential.update({ store: newPasskey }),
|
||||
])
|
||||
|
||||
|
|
|
@ -12,8 +12,7 @@ import type {
|
|||
//TODO improve workspace imports
|
||||
import { db } from ':src/db/mod.ts'
|
||||
import { getRelyingParty } from ':src/webauthn/mod.ts'
|
||||
import { Credential, Ref, User } from '@cohabit/ressources_manager/mod.ts'
|
||||
import { Passkey } from '@cohabit/ressources_manager/src/models/src/credential.ts'
|
||||
import { Credential, Passkey, Ref, User } from '@cohabit/resources-manager/models'
|
||||
import { encodeBase64 } from '@std/encoding'
|
||||
|
||||
type Params = { step: 'start' | 'finish' }
|
||||
|
@ -42,7 +41,7 @@ export const handler: SessionHandlers = {
|
|||
|
||||
// Get user credentials
|
||||
// Ensure latest user datas
|
||||
const dbUser = await db.ressource.user.get(user)
|
||||
const dbUser = await db.resource.user.get(user)
|
||||
// Resolve refs to credentials
|
||||
const resolver = Ref.dbResolver(db)
|
||||
const credentials = await Promise.all(dbUser.credentials.map(resolver))
|
||||
|
@ -117,16 +116,16 @@ export const handler: SessionHandlers = {
|
|||
|
||||
// create and save new Credentials
|
||||
const credential = Credential.load({ name, category: 'passkey', store })
|
||||
await db.ressource.credential.set([credential])
|
||||
await db.resource.credential.set([credential])
|
||||
|
||||
// Update user credentials
|
||||
// Ensure latest user datas
|
||||
const dbUser = await db.ressource.user.get(user)
|
||||
const dbUser = await db.resource.user.get(user)
|
||||
// Append new credentials
|
||||
const credentials = [...dbUser.credentials, credential.toRef()]
|
||||
const updatedUser = user.update({ credentials })
|
||||
// Save user to db
|
||||
await db.ressource.user.set([updatedUser])
|
||||
await db.resource.user.set([updatedUser])
|
||||
// Update session
|
||||
ctx.state.session.set('user', updatedUser)
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ export default function Home() {
|
|||
</section>
|
||||
<section>
|
||||
<h2>Nos membres</h2>
|
||||
<AutoGrid columnWidth='15rem' style={{ alignItems: 'center' }}>
|
||||
<AutoGrid columnWidth='16rem' style={{ alignItems: 'center' }}>
|
||||
<MemberCardList
|
||||
limit={4}
|
||||
usePlaceholder={true}
|
||||
|
|
|
@ -6,7 +6,7 @@ import { fetchCarnet, userToMemberCardProps } from ':src/members/mod.ts'
|
|||
|
||||
export default async function Member(_: Request, { params, url }: PageProps) {
|
||||
const uuid = params.id as ReturnType<Crypto['randomUUID']>
|
||||
const user = await db.ressource.user.get({ uuid }).catch(() => undefined)
|
||||
const user = await db.resource.user.get({ uuid }).catch(() => undefined)
|
||||
|
||||
if (!user) {
|
||||
return <h3>Membre inconnu, peut être serez vous le prochain</h3>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import LoginForm from ':islands/LoginForm.tsx'
|
||||
import PassKeyRegister from ':islands/PassKeyRegister.tsx'
|
||||
import type { SessionPageProps } from ':src/session/mod.ts'
|
||||
import type { User } from '@cohabit/ressources_manager/mod.ts'
|
||||
import type { User } from '@cohabit/resources-manager/models'
|
||||
import { Button } from 'univoq'
|
||||
|
||||
export default function Profil({ state }: SessionPageProps) {
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
import { Db, Group } from '@cohabit/ressources_manager/mod.ts'
|
||||
import { Db } from '@cohabit/resources-manager/db'
|
||||
import { Group, User } from '@cohabit/resources-manager/models'
|
||||
import type { MailAddress } from '@cohabit/resources-manager/types'
|
||||
|
||||
// Import Datas
|
||||
import { exists } from '$std/fs/exists.ts'
|
||||
import { ensureDir } from '$std/fs/mod.ts'
|
||||
import { User } from '@cohabit/ressources_manager/src/models/mod.ts'
|
||||
import { MailAddress } from '@cohabit/ressources_manager/types.ts'
|
||||
import groups from ":src/db/mock/groups.json" with { type: 'json' }
|
||||
import users from ":src/db/mock/users.json" with { type: 'json' }
|
||||
|
||||
|
@ -21,13 +21,13 @@ if (!dbExist) {
|
|||
// Load groups to DB
|
||||
for (const { name } of groups) {
|
||||
const group = Group.load({ name })
|
||||
db.ressource.group.set([group])
|
||||
db.resource.group.set([group])
|
||||
}
|
||||
|
||||
// Load users to DB
|
||||
for (const { lastname, firstname, mail, groups: groupNames } of users) {
|
||||
// Get groups of user
|
||||
const groups = await db.ressource.group.listRef((group) =>
|
||||
const groups = await db.resource.group.listRef((group) =>
|
||||
groupNames.includes(group.name)
|
||||
)
|
||||
|
||||
|
@ -38,6 +38,6 @@ if (!dbExist) {
|
|||
groups,
|
||||
})
|
||||
|
||||
db.ressource.user.set([user])
|
||||
db.resource.user.set([user])
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import { MemberCardProps } from ':components/MemberCard.tsx'
|
||||
import { db } from ':src/db/mod.ts'
|
||||
import { Db, Ref, User } from '@cohabit/ressources_manager/mod.ts'
|
||||
import { Db } from '@cohabit/resources-manager/db'
|
||||
import { Ref, User } from '@cohabit/resources-manager/models'
|
||||
|
||||
export async function fetchCarnet(login: string): Promise<string> {
|
||||
try {
|
||||
|
|
Loading…
Reference in a new issue