Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,13 +76,14 @@ Megjegyzések:

Jelszavak: `oob/local-secrets.json` (gitignore-olt).

| Felhasználó | Szerep |
| --------------------- | --------------------------------------------------------------------- |
| (nincs bejelentkezés) | névtelen látogató — csak publikus videók |
| schonherz-dev | bejelentkezett schönherzes — publikus + schönherz videók, admin nincs |
| tag-dev | BSS-tag — minden láthatóság, adminjogok |
| vezetoseg-dev | vezetőség — kibővített adminjogok |
| további `-dev` userek | szintetikus tagprofilok minden tagsági státuszhoz |
| Felhasználó | Szerep |
| --------------------- | --------------------------------------------------------------- |
| (nincs bejelentkezés) | névtelen látogató — csak publikus videók |
| schonherz-dev | csoport nélküli felhasználó — csak publikus videók, admin nincs |
| tag-dev | BSS-tag — minden láthatóság, adminjogok |
| vezetoseg-dev | vezetőség — kibővített adminjogok |
| admin-dev | admin — kibővített adminjogok |
| további `-dev` userek | szintetikus tagprofilok minden tagsági státuszhoz |

## Demo forgatókönyvek szereplőnként

Expand All @@ -95,10 +96,9 @@ Jelszavak: `oob/local-secrets.json` (gitignore-olt).
szűrős videólista.
4. A navbar Belépés gombja belépésre visz, megtartva a kért oldalt.

### Schönherzes (schonherz-dev)
### Csoport nélküli felhasználó (schonherz-dev)

1. Jelentkezz be; a `/videos` listában már a schönherz láthatóságú videók is
megjelennek.
1. Jelentkezz be; továbbra is csak a publikus videók jelennek meg.
2. `/admin` közvetlenül: magyar tiltóoldal (403), sidebar sem látszik.

### BSS-tag (tag-dev)
Expand Down
45 changes: 22 additions & 23 deletions docs/api/members-webhook.openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ paths:
one transaction, so either every one of them takes effect or none does.
The same `sub` may appear only once per request.

`delete` is a soft delete: the member disappears from the public
`archive` hides the member from the public
surfaces, but their row and the roles recorded in credit lists are kept,
and a later `upsert` restores them.
security:
Expand Down Expand Up @@ -52,7 +52,7 @@ paths:
- "$ref": "#/components/schemas/ReplacePayload"
examples:
operations:
summary: "Operations (create and delete in one request)"
summary: "Operations (create and archive in one request)"
value:
operations:
- op: "upsert"
Expand All @@ -62,10 +62,10 @@ paths:
fullName: "Gipsz Jakab"
nickname: "Pitypang"
avatarUrl: null
membershipStatus: "studio_member"
membershipStatus: "MEMBER"
isLeadership: false
joinedSemester: "2021/2022/1"
- op: "delete"
- op: "archive"
sub: "57"
replace:
summary: "Full roster replacement"
Expand All @@ -77,7 +77,7 @@ paths:
fullName: "Gipsz Jakab"
nickname: "Pitypang"
avatarUrl: null
membershipStatus: "studio_member"
membershipStatus: "MEMBER"
isLeadership: false
joinedSemester: "2021/2022/1"
responses:
Expand Down Expand Up @@ -178,15 +178,14 @@ components:
membershipStatus:
type: "string"
enum:
- "studio_member"
- "studio_candidate"
- "studio_applicant"
- "senior_active"
- "senior_archived"
- "contributor"
- "MEMBER_CANDIDATE_CANDIDATE"
- "MEMBER_CANDIDATE"
- "MEMBER"
- "ACTIVE_ALUMNI"
- "ALUMNI"
description: "Membership status. It decides which public list the member appears on; it grants NO permissions."
examples:
- "studio_member"
- "MEMBER"
isLeadership:
type: "boolean"
default: false
Expand All @@ -207,7 +206,7 @@ components:
fullName: "Gipsz Jakab"
nickname: "Pitypang"
avatarUrl: null
membershipStatus: "studio_member"
membershipStatus: "MEMBER"
isLeadership: false
joinedSemester: "2021/2022/1"
UpsertOperation:
Expand All @@ -221,19 +220,19 @@ components:
const: "upsert"
member:
"$ref": "#/components/schemas/Member"
DeleteOperation:
ArchiveOperation:
type: "object"
required:
- "op"
- "sub"
properties:
op:
type: "string"
const: "delete"
const: "archive"
sub:
type: "string"
maxLength: 255
description: "The `sub` of the member to delete. An unknown `sub` is not an error, it is simply ignored."
description: "The `sub` of the member to archive. An unknown `sub` is not an error, it is simply ignored."
OperationsPayload:
type: "object"
required:
Expand All @@ -250,14 +249,14 @@ components:
items:
oneOf:
- "$ref": "#/components/schemas/UpsertOperation"
- "$ref": "#/components/schemas/DeleteOperation"
- "$ref": "#/components/schemas/ArchiveOperation"
ReplacePayload:
type: "object"
required:
- "mode"
- "members"
description: |-
The full member roster. Anything left out of the list gets deleted
The full member roster. Anything left out of the list gets archived
a faulty client can empty the entire roster this way.
properties:
mode:
Expand All @@ -274,7 +273,7 @@ components:
- "operationCount"
- "created"
- "updated"
- "deleted"
- "archived"
- "restored"
- "unchanged"
- "ignored"
Expand All @@ -290,18 +289,18 @@ components:
type: "integer"
updated:
type: "integer"
deleted:
archived:
type: "integer"
description: "Soft-deleted members."
description: "Archived members."
restored:
type: "integer"
description: "Members previously deleted and now restored."
description: "Members previously archived and now restored."
unchanged:
type: "integer"
description: "Unchanged members; no audit row is written for these."
ignored:
type: "integer"
description: "Deletes targeting an unknown `sub`."
description: "Archives targeting an unknown `sub`."
PushResponse:
type: "object"
required:
Expand Down
15 changes: 7 additions & 8 deletions docs/examples/oob-config.example.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,15 @@
"clientSecret": "TÖLTSD-KI-titok-nem-kerülhet-gitbe",
"scopes": ["openid", "profile", "email"],
"claims": {
"sub": "sub",
"username": "preferred_username",
"fullName": "name",
"nickname": "nickname",
"avatarUrl": "picture"
"sub": "sub"
},
"groups": {
"schonherz": "TÖLTSD-KI-schönherzes-csoport-neve",
"tag": "TÖLTSD-KI-tag-csoport-neve",
"vezetoseg": "TÖLTSD-KI-vezetőség-csoport-neve"
"admin": "Admin",
"studio": "Stúdiós",
"studioCandidate": "Stúdiós jelölt",
"studioCandidateCandidate": "Stúdiós jelölt-jelölt",
"leadership": "Vezetőség",
"alumni": "Öregtag"
}
},
"youtube": {
Expand Down
4 changes: 2 additions & 2 deletions docs/oob-inputs.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ Az alkalmazás három bemenete out-of-band, azaz nem a git repóban érkezik. Hi
- Formája: JSON, a szerkezetét a [`docs/examples/oob-config.example.json`](./examples/oob-config.example.json) mutatja.
- Tartalma:
- Authentik OIDC kapcsolat: issuer URL, client id, client secret, scope-ok;
- claim-leképezés: `sub`, felhasználónév, teljes név, becenév, profilkép URL;
- csoportleképezés: schönherzes, tag és vezetőség csoport neve;
- claim-leképezés: az Authentik felhasználót a taggal összekötő `sub`;
- csoportleképezés: Admin, Stúdiós, Stúdiós jelölt, Stúdiós jelölt-jelölt, Vezetőség és Öregtag;
- médiahost (`media.host`, jelenleg `https://v.bsstudio.hu`);
- YouTube oEmbed végpont;
- seed JSON helye.
Expand Down
14 changes: 14 additions & 0 deletions drizzle/20260831195115_cool_violations/migration.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
ALTER TABLE "member_cache" ALTER COLUMN "membership_status" SET DATA TYPE text;--> statement-breakpoint
UPDATE "member_cache"
SET "membership_status" = CASE "membership_status"
WHEN 'studio_applicant' THEN 'MEMBER_CANDIDATE_CANDIDATE'
WHEN 'studio_candidate' THEN 'MEMBER_CANDIDATE'
WHEN 'studio_member' THEN 'MEMBER'
WHEN 'senior_active' THEN 'ACTIVE_ALUMNI'
WHEN 'senior_archived' THEN 'ALUMNI'
WHEN 'contributor' THEN 'ALUMNI'
ELSE "membership_status"
END;--> statement-breakpoint
DROP TYPE "membership_status";--> statement-breakpoint
CREATE TYPE "membership_status" AS ENUM('MEMBER_CANDIDATE_CANDIDATE', 'MEMBER_CANDIDATE', 'MEMBER', 'ACTIVE_ALUMNI', 'ALUMNI');--> statement-breakpoint
ALTER TABLE "member_cache" ALTER COLUMN "membership_status" SET DATA TYPE "membership_status" USING "membership_status"::"membership_status";
Loading