@nacre.work/api 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters.d.ts +3 -0
- package/dist/adapters.d.ts.map +1 -1
- package/dist/adapters.js +82 -7
- package/dist/adapters.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/main.js +48 -2
- package/dist/main.js.map +1 -1
- package/dist/principals.d.ts +167 -0
- package/dist/principals.d.ts.map +1 -0
- package/dist/principals.js +314 -0
- package/dist/principals.js.map +1 -0
- package/dist/rebuild-collection.d.ts +2 -0
- package/dist/rebuild-collection.d.ts.map +1 -0
- package/dist/rebuild-collection.js +169 -0
- package/dist/rebuild-collection.js.map +1 -0
- package/dist/server.d.ts +48 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +495 -19
- package/dist/server.js.map +1 -1
- package/package.json +2 -2
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import type { Pool } from 'pg';
|
|
2
|
+
import type { AuthContext } from './auth.js';
|
|
3
|
+
import { type Page, type PageResult } from './pagination.js';
|
|
4
|
+
/**
|
|
5
|
+
* Users and groups — the principals a grant is issued to.
|
|
6
|
+
*
|
|
7
|
+
* `grants.principal_type` has admitted `user`, `group` and `service_account`
|
|
8
|
+
* since 0001, and only the third could be created through the API. So the
|
|
9
|
+
* documented way to onboard a colleague was to insert a row into `users` by
|
|
10
|
+
* hand, and the documented way to give a team access was to insert into
|
|
11
|
+
* `groups` and `group_members` by hand — which is the same shape of hole the
|
|
12
|
+
* workspace listing had: the model offers something the product gives no route
|
|
13
|
+
* to, and the route people find instead is `psql`.
|
|
14
|
+
*
|
|
15
|
+
* ## Why `org_admin` and not "admin on a scope"
|
|
16
|
+
*
|
|
17
|
+
* The same argument service accounts make. A user is a principal *in the
|
|
18
|
+
* organization* rather than an object inside a workspace, so there is no scope
|
|
19
|
+
* to check against — and someone holding `admin` on one layer must not be able
|
|
20
|
+
* to mint a principal, any more than they can mint a key. A caller without the
|
|
21
|
+
* role gets `404`, like everything else invariant 4 covers.
|
|
22
|
+
*
|
|
23
|
+
* ## Why a user is disabled and never deleted
|
|
24
|
+
*
|
|
25
|
+
* Two reasons and the second is structural. The audit log names a user id, and
|
|
26
|
+
* a row that disappears turns every past event into an unresolvable reference
|
|
27
|
+
* — which is the one thing an access log must not do. And `grants.created_by`
|
|
28
|
+
* references `users(id)` with no cascade, so deleting an administrator who has
|
|
29
|
+
* ever issued a grant raises a foreign key violation: the schema has always
|
|
30
|
+
* said this, and `disabled_at` is the column it said it with.
|
|
31
|
+
*
|
|
32
|
+
* A group *is* deleted, because nothing points at one that way and because
|
|
33
|
+
* "the team does not exist any more" is a different statement from "this person
|
|
34
|
+
* has left".
|
|
35
|
+
*/
|
|
36
|
+
export interface UserView {
|
|
37
|
+
readonly id: string;
|
|
38
|
+
readonly email: string;
|
|
39
|
+
readonly role: 'platform_admin' | 'org_admin' | 'member';
|
|
40
|
+
readonly createdAt: string;
|
|
41
|
+
readonly disabledAt: string | null;
|
|
42
|
+
/**
|
|
43
|
+
* Whether a password is set at all.
|
|
44
|
+
*
|
|
45
|
+
* Never the hash, and never anything derived from it. False is an SSO-only
|
|
46
|
+
* account — `users.password_hash` is nullable precisely so an IdP-backed user
|
|
47
|
+
* has no local credential to steal.
|
|
48
|
+
*/
|
|
49
|
+
readonly hasPassword: boolean;
|
|
50
|
+
}
|
|
51
|
+
export interface Users {
|
|
52
|
+
list(auth: AuthContext, page?: Page): Promise<PageResult<UserView>>;
|
|
53
|
+
/**
|
|
54
|
+
* The password is in the result and nowhere else, ever again.
|
|
55
|
+
*
|
|
56
|
+
* `undefined` when the address is already in use in this organization —
|
|
57
|
+
* `UNIQUE (org_id, email)`, and a duplicate is something the caller typed
|
|
58
|
+
* rather than an internal error.
|
|
59
|
+
*/
|
|
60
|
+
create(auth: AuthContext, email: string, role: 'org_admin' | 'member'): Promise<{
|
|
61
|
+
user: UserView;
|
|
62
|
+
password: string;
|
|
63
|
+
} | undefined>;
|
|
64
|
+
/**
|
|
65
|
+
* Change the role, the disabled state, or both.
|
|
66
|
+
*
|
|
67
|
+
* One call rather than a `disable` beside a `setRole`, because the guard
|
|
68
|
+
* below has to see both: demoting the last administrator and disabling them
|
|
69
|
+
* leave the organization in the same place, and two entry points with one
|
|
70
|
+
* check between them is how the guarded one gets routed around.
|
|
71
|
+
*
|
|
72
|
+
* `last-admin` refuses a change that would leave the organization with no
|
|
73
|
+
* active `org_admin`. Not paternalism — every endpoint that could appoint one
|
|
74
|
+
* is behind the role that was just given up, so the remedy would be SQL.
|
|
75
|
+
*/
|
|
76
|
+
update(auth: AuthContext, id: string, change: {
|
|
77
|
+
role?: 'org_admin' | 'member';
|
|
78
|
+
disabled?: boolean;
|
|
79
|
+
}): Promise<'updated' | 'last-admin' | 'no-user'>;
|
|
80
|
+
/** The new password, shown once. `undefined` when there is no such user here. */
|
|
81
|
+
resetPassword(auth: AuthContext, id: string): Promise<string | undefined>;
|
|
82
|
+
}
|
|
83
|
+
export interface GroupView {
|
|
84
|
+
readonly id: string;
|
|
85
|
+
readonly name: string;
|
|
86
|
+
readonly createdAt: string;
|
|
87
|
+
/** Direct members only. A nested group counts as one, not as its members. */
|
|
88
|
+
readonly memberCount: number;
|
|
89
|
+
}
|
|
90
|
+
export type GroupMember = {
|
|
91
|
+
readonly type: 'user';
|
|
92
|
+
readonly id: string;
|
|
93
|
+
readonly label: string;
|
|
94
|
+
} | {
|
|
95
|
+
readonly type: 'group';
|
|
96
|
+
readonly id: string;
|
|
97
|
+
readonly label: string;
|
|
98
|
+
};
|
|
99
|
+
export interface Groups {
|
|
100
|
+
list(auth: AuthContext, page?: Page): Promise<PageResult<GroupView>>;
|
|
101
|
+
/** `undefined` when the name is already in use in this organization. */
|
|
102
|
+
create(auth: AuthContext, name: string): Promise<GroupView | undefined>;
|
|
103
|
+
/** False when there is no such group here. */
|
|
104
|
+
remove(auth: AuthContext, id: string): Promise<boolean>;
|
|
105
|
+
/** `undefined` when there is no such group here — distinct from an empty one. */
|
|
106
|
+
members(auth: AuthContext, groupId: string, page?: Page): Promise<PageResult<GroupMember> | undefined>;
|
|
107
|
+
/**
|
|
108
|
+
* `no-group` and `no-member` are separate because the caller is an
|
|
109
|
+
* `org_admin` who can list both collections, so neither answer tells them
|
|
110
|
+
* anything they could not already read.
|
|
111
|
+
*/
|
|
112
|
+
addMember(auth: AuthContext, groupId: string, member: {
|
|
113
|
+
type: 'user' | 'group';
|
|
114
|
+
id: string;
|
|
115
|
+
}): Promise<'added' | 'already' | 'no-group' | 'no-member'>;
|
|
116
|
+
/** False when that edge is not there. */
|
|
117
|
+
removeMember(auth: AuthContext, groupId: string, member: {
|
|
118
|
+
type: 'user' | 'group';
|
|
119
|
+
id: string;
|
|
120
|
+
}): Promise<boolean>;
|
|
121
|
+
}
|
|
122
|
+
export declare function generatePassword(): string;
|
|
123
|
+
/**
|
|
124
|
+
* An email address, checked only enough to refuse what cannot be one.
|
|
125
|
+
*
|
|
126
|
+
* Deliberately not RFC 5322. A stricter test rejects addresses that work, and
|
|
127
|
+
* the column is `citext` with a uniqueness constraint — what matters here is
|
|
128
|
+
* that the value is a single token with an `@` and a dot after it, so a name or
|
|
129
|
+
* a uuid typed into the wrong field is refused where the operator can see it
|
|
130
|
+
* rather than becoming a user nobody can sign in as.
|
|
131
|
+
*/
|
|
132
|
+
export declare function looksLikeEmail(value: string): boolean;
|
|
133
|
+
export declare class PostgresUsers implements Users {
|
|
134
|
+
private readonly pool;
|
|
135
|
+
private readonly role?;
|
|
136
|
+
constructor(pool: Pool, role?: string | undefined);
|
|
137
|
+
private get scope();
|
|
138
|
+
list(auth: AuthContext, page?: Page): Promise<PageResult<UserView>>;
|
|
139
|
+
create(auth: AuthContext, email: string, role: 'org_admin' | 'member'): Promise<{
|
|
140
|
+
user: UserView;
|
|
141
|
+
password: string;
|
|
142
|
+
} | undefined>;
|
|
143
|
+
update(auth: AuthContext, id: string, change: {
|
|
144
|
+
role?: 'org_admin' | 'member';
|
|
145
|
+
disabled?: boolean;
|
|
146
|
+
}): Promise<'updated' | 'last-admin' | 'no-user'>;
|
|
147
|
+
resetPassword(auth: AuthContext, id: string): Promise<string | undefined>;
|
|
148
|
+
}
|
|
149
|
+
export declare class PostgresGroups implements Groups {
|
|
150
|
+
private readonly pool;
|
|
151
|
+
private readonly role?;
|
|
152
|
+
constructor(pool: Pool, role?: string | undefined);
|
|
153
|
+
private get scope();
|
|
154
|
+
list(auth: AuthContext, page?: Page): Promise<PageResult<GroupView>>;
|
|
155
|
+
create(auth: AuthContext, name: string): Promise<GroupView | undefined>;
|
|
156
|
+
remove(auth: AuthContext, id: string): Promise<boolean>;
|
|
157
|
+
members(auth: AuthContext, groupId: string, page?: Page): Promise<PageResult<GroupMember> | undefined>;
|
|
158
|
+
addMember(auth: AuthContext, groupId: string, member: {
|
|
159
|
+
type: 'user' | 'group';
|
|
160
|
+
id: string;
|
|
161
|
+
}): Promise<'added' | 'already' | 'no-group' | 'no-member'>;
|
|
162
|
+
removeMember(auth: AuthContext, groupId: string, member: {
|
|
163
|
+
type: 'user' | 'group';
|
|
164
|
+
id: string;
|
|
165
|
+
}): Promise<boolean>;
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=principals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"principals.d.ts","sourceRoot":"","sources":["../src/principals.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { randomInt } from 'node:crypto';
|
|
2
|
+
import { hashPassword, withOrg } from '@nacre.work/core';
|
|
3
|
+
import { pageOf } from './pagination.js';
|
|
4
|
+
const UUID = /^[0-9a-f-]{36}$/i;
|
|
5
|
+
/**
|
|
6
|
+
* A generated password, in the same shape `init` prints.
|
|
7
|
+
*
|
|
8
|
+
* Generated and never taken from the request, for the reason `init` gives and
|
|
9
|
+
* one more. An administrator who chooses a colleague's password knows it, and
|
|
10
|
+
* "the person who onboarded you can sign in as you" is not a property worth
|
|
11
|
+
* having; a value the process invented and showed once is nobody's to keep.
|
|
12
|
+
*
|
|
13
|
+
* Six words rather than a random string because this gets typed into a sign-in
|
|
14
|
+
* form by a person at least once, and read aloud more often than anyone plans.
|
|
15
|
+
*/
|
|
16
|
+
const WORDS = [
|
|
17
|
+
'abalone', 'aragonite', 'bloom', 'brine', 'calcite', 'compass', 'coral',
|
|
18
|
+
'crest', 'current', 'drift', 'estuary', 'fathom', 'ferry', 'harbour',
|
|
19
|
+
'iridescent', 'keel', 'lagoon', 'ledger', 'lustre', 'mantle', 'nacre',
|
|
20
|
+
'pelagic', 'prism', 'reef', 'shoal', 'sound', 'stratum', 'tide',
|
|
21
|
+
];
|
|
22
|
+
export function generatePassword() {
|
|
23
|
+
// randomInt rather than Math.random or a modulo of randomBytes: one is not a
|
|
24
|
+
// CSPRNG and the other is biased unless the range divides evenly.
|
|
25
|
+
const chosen = Array.from({ length: 6 }, () => WORDS[randomInt(WORDS.length)]);
|
|
26
|
+
return `${chosen.join('-')}-${String(randomInt(10, 100))}`;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* An email address, checked only enough to refuse what cannot be one.
|
|
30
|
+
*
|
|
31
|
+
* Deliberately not RFC 5322. A stricter test rejects addresses that work, and
|
|
32
|
+
* the column is `citext` with a uniqueness constraint — what matters here is
|
|
33
|
+
* that the value is a single token with an `@` and a dot after it, so a name or
|
|
34
|
+
* a uuid typed into the wrong field is refused where the operator can see it
|
|
35
|
+
* rather than becoming a user nobody can sign in as.
|
|
36
|
+
*/
|
|
37
|
+
export function looksLikeEmail(value) {
|
|
38
|
+
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
|
|
39
|
+
}
|
|
40
|
+
export class PostgresUsers {
|
|
41
|
+
pool;
|
|
42
|
+
role;
|
|
43
|
+
constructor(pool, role) {
|
|
44
|
+
this.pool = pool;
|
|
45
|
+
this.role = role;
|
|
46
|
+
}
|
|
47
|
+
get scope() {
|
|
48
|
+
return this.role === undefined ? {} : { role: this.role };
|
|
49
|
+
}
|
|
50
|
+
async list(auth, page) {
|
|
51
|
+
return withOrg(this.pool, auth.orgId, async (client) => {
|
|
52
|
+
const after = page?.after;
|
|
53
|
+
const seek = after === undefined ? '' : ' AND (created_at, id) > ($2::timestamptz, $3::uuid)';
|
|
54
|
+
const cap = page === undefined ? '' : ` LIMIT ${page.limit}`;
|
|
55
|
+
const { rows } = await client.query(`SELECT id, email, role, created_at, created_at::text AS created_at_text,
|
|
56
|
+
disabled_at, (password_hash IS NOT NULL) AS has_password
|
|
57
|
+
FROM users WHERE org_id = $1${seek} ORDER BY created_at, id${cap}`, after === undefined ? [auth.orgId] : [auth.orgId, after.createdAt, after.id]);
|
|
58
|
+
// Disabled ones are listed rather than hidden, on the same grounds as a
|
|
59
|
+
// revoked key: "this account was disabled on Tuesday" is the answer to
|
|
60
|
+
// the question being asked, and a row that vanishes looks like one that
|
|
61
|
+
// never existed.
|
|
62
|
+
const users = rows.map((r) => ({
|
|
63
|
+
id: r.id,
|
|
64
|
+
email: r.email,
|
|
65
|
+
role: r.role,
|
|
66
|
+
createdAt: r.created_at.toISOString(),
|
|
67
|
+
disabledAt: r.disabled_at?.toISOString() ?? null,
|
|
68
|
+
hasPassword: r.has_password,
|
|
69
|
+
}));
|
|
70
|
+
return pageOf(users, page, (u, i) => ({
|
|
71
|
+
createdAt: rows[i].created_at_text,
|
|
72
|
+
id: u.id,
|
|
73
|
+
}));
|
|
74
|
+
}, this.scope);
|
|
75
|
+
}
|
|
76
|
+
async create(auth, email, role) {
|
|
77
|
+
const password = generatePassword();
|
|
78
|
+
// Outside the transaction on purpose: scrypt at OWASP's minimum takes long
|
|
79
|
+
// enough that holding a database connection across it is a connection spent
|
|
80
|
+
// on arithmetic. `login.ts` makes the same call under a concurrency cap for
|
|
81
|
+
// the same reason.
|
|
82
|
+
const passwordHash = await hashPassword(password);
|
|
83
|
+
return withOrg(this.pool, auth.orgId, async (client) => {
|
|
84
|
+
// DO NOTHING rather than catching a unique violation: inside the
|
|
85
|
+
// transaction `withOrg` opens, a raised constraint error aborts
|
|
86
|
+
// everything after it, so recovering would need a savepoint. The empty
|
|
87
|
+
// result says the same thing without one.
|
|
88
|
+
const { rows } = await client.query(`INSERT INTO users (org_id, email, role, password_hash)
|
|
89
|
+
VALUES ($1,$2,$3,$4)
|
|
90
|
+
ON CONFLICT (org_id, email) DO NOTHING
|
|
91
|
+
RETURNING id, created_at`, [auth.orgId, email, role, passwordHash]);
|
|
92
|
+
const row = rows[0];
|
|
93
|
+
if (row === undefined)
|
|
94
|
+
return undefined;
|
|
95
|
+
return {
|
|
96
|
+
password,
|
|
97
|
+
user: {
|
|
98
|
+
id: row.id,
|
|
99
|
+
email,
|
|
100
|
+
role,
|
|
101
|
+
createdAt: row.created_at.toISOString(),
|
|
102
|
+
disabledAt: null,
|
|
103
|
+
hasPassword: true,
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
}, this.scope);
|
|
107
|
+
}
|
|
108
|
+
async update(auth, id, change) {
|
|
109
|
+
if (!UUID.test(id))
|
|
110
|
+
return 'no-user';
|
|
111
|
+
return withOrg(this.pool, auth.orgId, async (client) => {
|
|
112
|
+
const { rows } = await client.query('SELECT role, disabled_at FROM users WHERE org_id = $1 AND id = $2 FOR UPDATE', [auth.orgId, id]);
|
|
113
|
+
const current = rows[0];
|
|
114
|
+
if (current === undefined)
|
|
115
|
+
return 'no-user';
|
|
116
|
+
const role = change.role ?? current.role;
|
|
117
|
+
const disabled = change.disabled ?? current.disabled_at !== null;
|
|
118
|
+
const wasActiveAdmin = current.role === 'org_admin' && current.disabled_at === null;
|
|
119
|
+
const staysActiveAdmin = role === 'org_admin' && !disabled;
|
|
120
|
+
// Counted in the same transaction, and only when this change would
|
|
121
|
+
// actually give one up. `FOR UPDATE` on the row above plus this count
|
|
122
|
+
// is what stops two administrators demoting each other concurrently and
|
|
123
|
+
// both reading a count of two.
|
|
124
|
+
if (wasActiveAdmin && !staysActiveAdmin) {
|
|
125
|
+
const { rows: others } = await client.query(`SELECT count(*) AS n FROM users
|
|
126
|
+
WHERE org_id = $1 AND id <> $2 AND role = 'org_admin' AND disabled_at IS NULL`, [auth.orgId, id]);
|
|
127
|
+
if (Number(others[0]?.n ?? '0') === 0)
|
|
128
|
+
return 'last-admin';
|
|
129
|
+
}
|
|
130
|
+
// `disabled_at` keeps the instant it was set rather than being rewritten
|
|
131
|
+
// on every unrelated PATCH: "disabled since Tuesday" is the answer an
|
|
132
|
+
// operator is looking for, and re-stamping it on a role change would
|
|
133
|
+
// quietly move it.
|
|
134
|
+
const { rowCount } = await client.query(`UPDATE users
|
|
135
|
+
SET role = $3,
|
|
136
|
+
disabled_at = CASE
|
|
137
|
+
WHEN $4::boolean THEN COALESCE(disabled_at, now())
|
|
138
|
+
ELSE NULL
|
|
139
|
+
END
|
|
140
|
+
WHERE org_id = $1 AND id = $2`, [auth.orgId, id, role, disabled]);
|
|
141
|
+
return (rowCount ?? 0) > 0 ? 'updated' : 'no-user';
|
|
142
|
+
}, this.scope);
|
|
143
|
+
}
|
|
144
|
+
async resetPassword(auth, id) {
|
|
145
|
+
if (!UUID.test(id))
|
|
146
|
+
return undefined;
|
|
147
|
+
const password = generatePassword();
|
|
148
|
+
const passwordHash = await hashPassword(password);
|
|
149
|
+
return withOrg(this.pool, auth.orgId, async (client) => {
|
|
150
|
+
// A disabled account is deliberately still resettable: re-enabling and
|
|
151
|
+
// resetting are two decisions, and refusing here would make the second
|
|
152
|
+
// depend on the first in a way nothing asked for.
|
|
153
|
+
const { rowCount } = await client.query('UPDATE users SET password_hash = $3 WHERE org_id = $1 AND id = $2', [auth.orgId, id, passwordHash]);
|
|
154
|
+
return (rowCount ?? 0) > 0 ? password : undefined;
|
|
155
|
+
}, this.scope);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
export class PostgresGroups {
|
|
159
|
+
pool;
|
|
160
|
+
role;
|
|
161
|
+
constructor(pool, role) {
|
|
162
|
+
this.pool = pool;
|
|
163
|
+
this.role = role;
|
|
164
|
+
}
|
|
165
|
+
get scope() {
|
|
166
|
+
return this.role === undefined ? {} : { role: this.role };
|
|
167
|
+
}
|
|
168
|
+
async list(auth, page) {
|
|
169
|
+
return withOrg(this.pool, auth.orgId, async (client) => {
|
|
170
|
+
const after = page?.after;
|
|
171
|
+
const seek = after === undefined ? '' : ' AND (g.created_at, g.id) > ($2::timestamptz, $3::uuid)';
|
|
172
|
+
const cap = page === undefined ? '' : ` LIMIT ${page.limit}`;
|
|
173
|
+
const { rows } = await client.query(`SELECT g.id, g.name, g.created_at, g.created_at::text AS created_at_text,
|
|
174
|
+
(SELECT count(*) FROM group_members m
|
|
175
|
+
WHERE m.org_id = g.org_id AND m.group_id = g.id) AS member_count
|
|
176
|
+
FROM groups g WHERE g.org_id = $1${seek} ORDER BY g.created_at, g.id${cap}`, after === undefined ? [auth.orgId] : [auth.orgId, after.createdAt, after.id]);
|
|
177
|
+
const groups = rows.map((r) => ({
|
|
178
|
+
id: r.id,
|
|
179
|
+
name: r.name,
|
|
180
|
+
createdAt: r.created_at.toISOString(),
|
|
181
|
+
// count() is bigint, which pg hands over as a string rather than
|
|
182
|
+
// silently losing precision. Parsed here rather than left to JSON,
|
|
183
|
+
// where it would have serialized as a quoted number.
|
|
184
|
+
memberCount: Number(r.member_count),
|
|
185
|
+
}));
|
|
186
|
+
return pageOf(groups, page, (g, i) => ({
|
|
187
|
+
createdAt: rows[i].created_at_text,
|
|
188
|
+
id: g.id,
|
|
189
|
+
}));
|
|
190
|
+
}, this.scope);
|
|
191
|
+
}
|
|
192
|
+
async create(auth, name) {
|
|
193
|
+
return withOrg(this.pool, auth.orgId, async (client) => {
|
|
194
|
+
const { rows } = await client.query(`INSERT INTO groups (org_id, name) VALUES ($1,$2)
|
|
195
|
+
ON CONFLICT (org_id, name) DO NOTHING
|
|
196
|
+
RETURNING id, created_at`, [auth.orgId, name]);
|
|
197
|
+
const row = rows[0];
|
|
198
|
+
if (row === undefined)
|
|
199
|
+
return undefined;
|
|
200
|
+
return { id: row.id, name, createdAt: row.created_at.toISOString(), memberCount: 0 };
|
|
201
|
+
}, this.scope);
|
|
202
|
+
}
|
|
203
|
+
async remove(auth, id) {
|
|
204
|
+
if (!UUID.test(id))
|
|
205
|
+
return false;
|
|
206
|
+
return withOrg(this.pool, auth.orgId, async (client) => {
|
|
207
|
+
// Grants naming the group go first, and in the same transaction. There
|
|
208
|
+
// is no foreign key from `grants` to `groups` — `principal_id` is a
|
|
209
|
+
// bare uuid because it addresses three different tables — so nothing
|
|
210
|
+
// would clean them up, and a grant to a principal that no longer exists
|
|
211
|
+
// is a row `GET /v1/grants` lists and nobody can resolve.
|
|
212
|
+
//
|
|
213
|
+
// No permission answer changes either way: `effectivePrincipals` walks
|
|
214
|
+
// membership from the caller, and a deleted group has no members to
|
|
215
|
+
// walk from.
|
|
216
|
+
await client.query(`DELETE FROM grants WHERE org_id = $1 AND principal_type = 'group' AND principal_id = $2`, [auth.orgId, id]);
|
|
217
|
+
// `group_members` cascades on both endpoints, so the edges into and out
|
|
218
|
+
// of this group go with it. 0003's row trigger fires on those deletes
|
|
219
|
+
// and on this one, so `groups_version` moves and every cached principal
|
|
220
|
+
// set is composed from a different key on the next request.
|
|
221
|
+
const { rowCount } = await client.query('DELETE FROM groups WHERE org_id = $1 AND id = $2', [
|
|
222
|
+
auth.orgId,
|
|
223
|
+
id,
|
|
224
|
+
]);
|
|
225
|
+
return (rowCount ?? 0) > 0;
|
|
226
|
+
}, this.scope);
|
|
227
|
+
}
|
|
228
|
+
async members(auth, groupId, page) {
|
|
229
|
+
if (!UUID.test(groupId))
|
|
230
|
+
return undefined;
|
|
231
|
+
return withOrg(this.pool, auth.orgId, async (client) => {
|
|
232
|
+
// Asked first, so an empty group and a group that is not here are
|
|
233
|
+
// different answers. They are allowed to be: the caller is an
|
|
234
|
+
// `org_admin` who can list every group in the organization, so this
|
|
235
|
+
// tells them nothing `GET /v1/groups` would not.
|
|
236
|
+
const { rows: present } = await client.query('SELECT 1 FROM groups WHERE org_id = $1 AND id = $2', [auth.orgId, groupId]);
|
|
237
|
+
if (present.length === 0)
|
|
238
|
+
return undefined;
|
|
239
|
+
const after = page?.after;
|
|
240
|
+
// The tie-breaker is whichever member column is set: the CHECK from
|
|
241
|
+
// 0001 guarantees exactly one is, so the coalesce is total rather than
|
|
242
|
+
// a default.
|
|
243
|
+
const seek = after === undefined
|
|
244
|
+
? ''
|
|
245
|
+
: ' AND (m.created_at, COALESCE(m.member_user, m.member_group)) > ($3::timestamptz, $4::uuid)';
|
|
246
|
+
const cap = page === undefined ? '' : ` LIMIT ${page.limit}`;
|
|
247
|
+
const { rows } = await client.query(`SELECT m.member_user, m.member_group,
|
|
248
|
+
COALESCE(u.email, g.name) AS label,
|
|
249
|
+
m.created_at::text AS created_at_text
|
|
250
|
+
FROM group_members m
|
|
251
|
+
LEFT JOIN users u ON u.id = m.member_user AND u.org_id = m.org_id
|
|
252
|
+
LEFT JOIN groups g ON g.id = m.member_group AND g.org_id = m.org_id
|
|
253
|
+
WHERE m.org_id = $1 AND m.group_id = $2${seek}
|
|
254
|
+
ORDER BY m.created_at, COALESCE(m.member_user, m.member_group)${cap}`, after === undefined
|
|
255
|
+
? [auth.orgId, groupId]
|
|
256
|
+
: [auth.orgId, groupId, after.createdAt, after.id]);
|
|
257
|
+
const members = rows.map((r) => r.member_user !== null
|
|
258
|
+
? { type: 'user', id: r.member_user, label: r.label }
|
|
259
|
+
: { type: 'group', id: r.member_group, label: r.label });
|
|
260
|
+
return pageOf(members, page, (m, i) => ({
|
|
261
|
+
createdAt: rows[i].created_at_text,
|
|
262
|
+
id: m.id,
|
|
263
|
+
}));
|
|
264
|
+
}, this.scope);
|
|
265
|
+
}
|
|
266
|
+
async addMember(auth, groupId, member) {
|
|
267
|
+
if (!UUID.test(groupId))
|
|
268
|
+
return 'no-group';
|
|
269
|
+
if (!UUID.test(member.id))
|
|
270
|
+
return 'no-member';
|
|
271
|
+
return withOrg(this.pool, auth.orgId, async (client) => {
|
|
272
|
+
const { rows: group } = await client.query('SELECT 1 FROM groups WHERE org_id = $1 AND id = $2', [auth.orgId, groupId]);
|
|
273
|
+
if (group.length === 0)
|
|
274
|
+
return 'no-group';
|
|
275
|
+
const { rows: exists } = await client.query(member.type === 'user'
|
|
276
|
+
? 'SELECT 1 FROM users WHERE org_id = $1 AND id = $2'
|
|
277
|
+
: 'SELECT 1 FROM groups WHERE org_id = $1 AND id = $2', [auth.orgId, member.id]);
|
|
278
|
+
// Checked here as well as by the composite foreign key from 0002. The
|
|
279
|
+
// constraint is what makes a cross-tenant edge impossible; this is what
|
|
280
|
+
// makes a typo a `404` instead of a `500`, and the two are not
|
|
281
|
+
// substitutes — a raised constraint inside `withOrg`'s transaction
|
|
282
|
+
// aborts everything after it.
|
|
283
|
+
if (exists.length === 0)
|
|
284
|
+
return 'no-member';
|
|
285
|
+
// A cycle is not refused. `group_members`' own comment says cycles are
|
|
286
|
+
// the resolver's problem to terminate on rather than the schema's to
|
|
287
|
+
// prevent, and `effectivePrincipals` walks into a `Set` — so a group
|
|
288
|
+
// that contains itself resolves to the same principal set it already
|
|
289
|
+
// had. Refusing here would be a second, weaker implementation of a rule
|
|
290
|
+
// T14 already pins, and it would only catch the direct case anyway.
|
|
291
|
+
const { rowCount } = await client.query(member.type === 'user'
|
|
292
|
+
? `INSERT INTO group_members (org_id, group_id, member_user) VALUES ($1,$2,$3)
|
|
293
|
+
ON CONFLICT DO NOTHING`
|
|
294
|
+
: `INSERT INTO group_members (org_id, group_id, member_group) VALUES ($1,$2,$3)
|
|
295
|
+
ON CONFLICT DO NOTHING`, [auth.orgId, groupId, member.id]);
|
|
296
|
+
// `already` rather than an error. 0018 is what makes this reachable at
|
|
297
|
+
// all — before it, `NULLS DISTINCT` meant the constraint matched
|
|
298
|
+
// nothing and `ON CONFLICT DO NOTHING` was a no-op that inserted a
|
|
299
|
+
// duplicate every time a directory sync ran.
|
|
300
|
+
return (rowCount ?? 0) > 0 ? 'added' : 'already';
|
|
301
|
+
}, this.scope);
|
|
302
|
+
}
|
|
303
|
+
async removeMember(auth, groupId, member) {
|
|
304
|
+
if (!UUID.test(groupId) || !UUID.test(member.id))
|
|
305
|
+
return false;
|
|
306
|
+
return withOrg(this.pool, auth.orgId, async (client) => {
|
|
307
|
+
const { rowCount } = await client.query(member.type === 'user'
|
|
308
|
+
? 'DELETE FROM group_members WHERE org_id = $1 AND group_id = $2 AND member_user = $3'
|
|
309
|
+
: 'DELETE FROM group_members WHERE org_id = $1 AND group_id = $2 AND member_group = $3', [auth.orgId, groupId, member.id]);
|
|
310
|
+
return (rowCount ?? 0) > 0;
|
|
311
|
+
}, this.scope);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=principals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"principals.js","sourceRoot":"","sources":["../src/principals.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rebuild-collection.d.ts","sourceRoot":"","sources":["../src/rebuild-collection.ts"],"names":[],"mappings":""}
|