hazo_auth 1.6.4 → 1.6.5
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/README.md +46 -1
- package/SETUP_CHECKLIST.md +70 -4
- package/dist/app/api/hazo_auth/user_management/permissions/route.d.ts +50 -0
- package/dist/app/api/hazo_auth/user_management/permissions/route.d.ts.map +1 -0
- package/dist/app/api/hazo_auth/user_management/permissions/route.js +257 -0
- package/dist/app/api/hazo_auth/user_management/roles/route.d.ts +40 -0
- package/dist/app/api/hazo_auth/user_management/roles/route.d.ts.map +1 -0
- package/dist/app/api/hazo_auth/user_management/roles/route.js +352 -0
- package/dist/app/api/hazo_auth/user_management/users/roles/route.d.ts +37 -0
- package/dist/app/api/hazo_auth/user_management/users/roles/route.d.ts.map +1 -0
- package/dist/app/api/hazo_auth/user_management/users/roles/route.js +276 -0
- package/dist/app/api/hazo_auth/user_management/users/route.d.ts +39 -0
- package/dist/app/api/hazo_auth/user_management/users/route.d.ts.map +1 -0
- package/dist/app/api/hazo_auth/user_management/users/route.js +170 -0
- package/dist/cli/generate.d.ts.map +1 -1
- package/dist/cli/generate.js +38 -5
- package/dist/cli/validate.d.ts.map +1 -1
- package/dist/cli/validate.js +14 -0
- package/dist/server/routes/index.d.ts +4 -0
- package/dist/server/routes/index.d.ts.map +1 -1
- package/dist/server/routes/index.js +5 -0
- package/dist/server/routes/user_management_permissions.d.ts +2 -0
- package/dist/server/routes/user_management_permissions.d.ts.map +1 -0
- package/dist/server/routes/user_management_permissions.js +2 -0
- package/dist/server/routes/user_management_roles.d.ts +2 -0
- package/dist/server/routes/user_management_roles.d.ts.map +1 -0
- package/dist/server/routes/user_management_roles.js +2 -0
- package/dist/server/routes/user_management_users.d.ts +2 -0
- package/dist/server/routes/user_management_users.d.ts.map +1 -0
- package/dist/server/routes/user_management_users.js +2 -0
- package/dist/server/routes/user_management_users_roles.d.ts +2 -0
- package/dist/server/routes/user_management_users_roles.d.ts.map +1 -0
- package/dist/server/routes/user_management_users_roles.js +2 -0
- package/hazo_auth_config.example.ini +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { NextRequest, NextResponse } from "next/server";
|
|
2
|
+
export declare const dynamic = "force-dynamic";
|
|
3
|
+
/**
|
|
4
|
+
* GET - Fetch all users with details or a specific user by id
|
|
5
|
+
* Query params: id (optional) - if provided, returns only that user
|
|
6
|
+
*/
|
|
7
|
+
export declare function GET(request: NextRequest): Promise<NextResponse<{
|
|
8
|
+
error: string;
|
|
9
|
+
}> | NextResponse<{
|
|
10
|
+
success: boolean;
|
|
11
|
+
users: {
|
|
12
|
+
id: unknown;
|
|
13
|
+
name: {} | null;
|
|
14
|
+
email_address: unknown;
|
|
15
|
+
email_verified: {};
|
|
16
|
+
is_active: boolean;
|
|
17
|
+
last_logon: {} | null;
|
|
18
|
+
created_at: {} | null;
|
|
19
|
+
profile_picture_url: {} | null;
|
|
20
|
+
profile_source: {} | null;
|
|
21
|
+
}[];
|
|
22
|
+
}>>;
|
|
23
|
+
/**
|
|
24
|
+
* PATCH - Update user (deactivate: set is_active to false)
|
|
25
|
+
*/
|
|
26
|
+
export declare function PATCH(request: NextRequest): Promise<NextResponse<{
|
|
27
|
+
error: string;
|
|
28
|
+
}> | NextResponse<{
|
|
29
|
+
success: boolean;
|
|
30
|
+
}>>;
|
|
31
|
+
/**
|
|
32
|
+
* POST - Send password reset email to user
|
|
33
|
+
*/
|
|
34
|
+
export declare function POST(request: NextRequest): Promise<NextResponse<{
|
|
35
|
+
error: string;
|
|
36
|
+
}> | NextResponse<{
|
|
37
|
+
success: boolean;
|
|
38
|
+
}>>;
|
|
39
|
+
//# sourceMappingURL=route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../../../src/app/api/hazo_auth/user_management/users/route.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAUxD,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAGvC;;;GAGG;AACH,wBAAsB,GAAG,CAAC,OAAO,EAAE,WAAW;;;;;;;;;;;;;;;IA2D7C;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,WAAW;;;;IA0E/C;AAED;;GAEG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW;;;;IA2E9C"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
// file_description: API route for user management operations (list users, deactivate, reset password)
|
|
2
|
+
// section: imports
|
|
3
|
+
import { NextResponse } from "next/server";
|
|
4
|
+
import { get_hazo_connect_instance } from "../../../../../lib/hazo_connect_instance.server";
|
|
5
|
+
import { createCrudService } from "hazo_connect/server";
|
|
6
|
+
import { create_app_logger } from "../../../../../lib/app_logger";
|
|
7
|
+
import { get_filename, get_line_number } from "../../../../../lib/utils/api_route_helpers";
|
|
8
|
+
import { request_password_reset } from "../../../../../lib/services/password_reset_service";
|
|
9
|
+
import { get_auth_cache } from "../../../../../lib/auth/auth_cache";
|
|
10
|
+
import { get_auth_utility_config } from "../../../../../lib/auth_utility_config.server";
|
|
11
|
+
// section: route_config
|
|
12
|
+
export const dynamic = 'force-dynamic';
|
|
13
|
+
// section: api_handler
|
|
14
|
+
/**
|
|
15
|
+
* GET - Fetch all users with details or a specific user by id
|
|
16
|
+
* Query params: id (optional) - if provided, returns only that user
|
|
17
|
+
*/
|
|
18
|
+
export async function GET(request) {
|
|
19
|
+
const logger = create_app_logger();
|
|
20
|
+
try {
|
|
21
|
+
const { searchParams } = new URL(request.url);
|
|
22
|
+
const user_id = searchParams.get("id");
|
|
23
|
+
const hazoConnect = get_hazo_connect_instance();
|
|
24
|
+
const users_service = createCrudService(hazoConnect, "hazo_users");
|
|
25
|
+
// Fetch users - filter by id if provided, otherwise get all
|
|
26
|
+
const users = await users_service.findBy(user_id ? { id: user_id } : {});
|
|
27
|
+
if (!Array.isArray(users)) {
|
|
28
|
+
return NextResponse.json({ error: "Failed to fetch users" }, { status: 500 });
|
|
29
|
+
}
|
|
30
|
+
logger.info("user_management_users_fetched", {
|
|
31
|
+
filename: get_filename(),
|
|
32
|
+
line_number: get_line_number(),
|
|
33
|
+
user_count: users.length,
|
|
34
|
+
});
|
|
35
|
+
return NextResponse.json({
|
|
36
|
+
success: true,
|
|
37
|
+
users: users.map((user) => ({
|
|
38
|
+
id: user.id,
|
|
39
|
+
name: user.name || null,
|
|
40
|
+
email_address: user.email_address,
|
|
41
|
+
email_verified: user.email_verified || false,
|
|
42
|
+
is_active: user.is_active !== false,
|
|
43
|
+
last_logon: user.last_logon || null,
|
|
44
|
+
created_at: user.created_at || null,
|
|
45
|
+
profile_picture_url: user.profile_picture_url || null,
|
|
46
|
+
profile_source: user.profile_source || null,
|
|
47
|
+
})),
|
|
48
|
+
}, { status: 200 });
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
const error_message = error instanceof Error ? error.message : "Unknown error";
|
|
52
|
+
const error_stack = error instanceof Error ? error.stack : undefined;
|
|
53
|
+
logger.error("user_management_users_fetch_error", {
|
|
54
|
+
filename: get_filename(),
|
|
55
|
+
line_number: get_line_number(),
|
|
56
|
+
error_message,
|
|
57
|
+
error_stack,
|
|
58
|
+
});
|
|
59
|
+
return NextResponse.json({ error: "Failed to fetch users" }, { status: 500 });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* PATCH - Update user (deactivate: set is_active to false)
|
|
64
|
+
*/
|
|
65
|
+
export async function PATCH(request) {
|
|
66
|
+
const logger = create_app_logger();
|
|
67
|
+
try {
|
|
68
|
+
const body = await request.json();
|
|
69
|
+
const { user_id, is_active } = body;
|
|
70
|
+
if (!user_id || typeof is_active !== "boolean") {
|
|
71
|
+
return NextResponse.json({ error: "user_id and is_active (boolean) are required" }, { status: 400 });
|
|
72
|
+
}
|
|
73
|
+
const hazoConnect = get_hazo_connect_instance();
|
|
74
|
+
const users_service = createCrudService(hazoConnect, "hazo_users");
|
|
75
|
+
// Update user with changed_at timestamp
|
|
76
|
+
const now = new Date().toISOString();
|
|
77
|
+
await users_service.updateById(user_id, {
|
|
78
|
+
is_active,
|
|
79
|
+
changed_at: now,
|
|
80
|
+
});
|
|
81
|
+
// Invalidate user cache after deactivation
|
|
82
|
+
if (is_active === false) {
|
|
83
|
+
try {
|
|
84
|
+
const config = get_auth_utility_config();
|
|
85
|
+
const cache = get_auth_cache(config.cache_max_users, config.cache_ttl_minutes, config.cache_max_age_minutes);
|
|
86
|
+
cache.invalidate_user(user_id);
|
|
87
|
+
}
|
|
88
|
+
catch (cache_error) {
|
|
89
|
+
// Log but don't fail user update if cache invalidation fails
|
|
90
|
+
const cache_error_message = cache_error instanceof Error ? cache_error.message : "Unknown error";
|
|
91
|
+
logger.warn("user_management_user_cache_invalidation_failed", {
|
|
92
|
+
filename: get_filename(),
|
|
93
|
+
line_number: get_line_number(),
|
|
94
|
+
user_id,
|
|
95
|
+
error: cache_error_message,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
logger.info("user_management_user_updated", {
|
|
100
|
+
filename: get_filename(),
|
|
101
|
+
line_number: get_line_number(),
|
|
102
|
+
user_id,
|
|
103
|
+
is_active,
|
|
104
|
+
});
|
|
105
|
+
return NextResponse.json({ success: true }, { status: 200 });
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
const error_message = error instanceof Error ? error.message : "Unknown error";
|
|
109
|
+
const error_stack = error instanceof Error ? error.stack : undefined;
|
|
110
|
+
logger.error("user_management_user_update_error", {
|
|
111
|
+
filename: get_filename(),
|
|
112
|
+
line_number: get_line_number(),
|
|
113
|
+
error_message,
|
|
114
|
+
error_stack,
|
|
115
|
+
});
|
|
116
|
+
return NextResponse.json({ error: "Failed to update user" }, { status: 500 });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* POST - Send password reset email to user
|
|
121
|
+
*/
|
|
122
|
+
export async function POST(request) {
|
|
123
|
+
const logger = create_app_logger();
|
|
124
|
+
try {
|
|
125
|
+
const body = await request.json();
|
|
126
|
+
const { user_id } = body;
|
|
127
|
+
if (!user_id) {
|
|
128
|
+
return NextResponse.json({ error: "user_id is required" }, { status: 400 });
|
|
129
|
+
}
|
|
130
|
+
const hazoConnect = get_hazo_connect_instance();
|
|
131
|
+
const users_service = createCrudService(hazoConnect, "hazo_users");
|
|
132
|
+
// Get user by ID
|
|
133
|
+
const users = await users_service.findBy({ id: user_id });
|
|
134
|
+
if (!Array.isArray(users) || users.length === 0) {
|
|
135
|
+
return NextResponse.json({ error: "User not found" }, { status: 404 });
|
|
136
|
+
}
|
|
137
|
+
const user = users[0];
|
|
138
|
+
const email = user.email_address;
|
|
139
|
+
// Request password reset using existing service
|
|
140
|
+
const result = await request_password_reset(hazoConnect, { email });
|
|
141
|
+
if (!result.success) {
|
|
142
|
+
logger.warn("user_management_password_reset_failed", {
|
|
143
|
+
filename: get_filename(),
|
|
144
|
+
line_number: get_line_number(),
|
|
145
|
+
user_id,
|
|
146
|
+
email,
|
|
147
|
+
error: result.error,
|
|
148
|
+
});
|
|
149
|
+
return NextResponse.json({ error: result.error || "Failed to send password reset email" }, { status: 500 });
|
|
150
|
+
}
|
|
151
|
+
logger.info("user_management_password_reset_sent", {
|
|
152
|
+
filename: get_filename(),
|
|
153
|
+
line_number: get_line_number(),
|
|
154
|
+
user_id,
|
|
155
|
+
email,
|
|
156
|
+
});
|
|
157
|
+
return NextResponse.json({ success: true }, { status: 200 });
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
const error_message = error instanceof Error ? error.message : "Unknown error";
|
|
161
|
+
const error_stack = error instanceof Error ? error.stack : undefined;
|
|
162
|
+
logger.error("user_management_password_reset_error", {
|
|
163
|
+
filename: get_filename(),
|
|
164
|
+
line_number: get_line_number(),
|
|
165
|
+
error_message,
|
|
166
|
+
error_stack,
|
|
167
|
+
});
|
|
168
|
+
return NextResponse.json({ error: "Failed to send password reset email" }, { status: 500 });
|
|
169
|
+
}
|
|
170
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/cli/generate.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,CAAC;
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/cli/generate.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,CAAC;AA4LF,wBAAgB,eAAe,CAAC,OAAO,GAAE,eAAoB,GAAG,IAAI,CA8DnE"}
|
package/dist/cli/generate.js
CHANGED
|
@@ -22,6 +22,20 @@ const ROUTES = [
|
|
|
22
22
|
{ name: "validate_reset_token", path: "api/hazo_auth/validate_reset_token", method: "GET", export_name: "validateResetTokenGET" },
|
|
23
23
|
{ name: "profile_picture_filename", path: "api/hazo_auth/profile_picture/[filename]", method: "GET", export_name: "profilePictureFilenameGET" },
|
|
24
24
|
{ name: "invalidate_cache", path: "api/hazo_auth/invalidate_cache", method: "POST", export_name: "invalidateCachePOST" },
|
|
25
|
+
// User management routes
|
|
26
|
+
{ name: "user_management_users", path: "api/hazo_auth/user_management/users", method: "GET", export_name: "userManagementUsersGET" },
|
|
27
|
+
{ name: "user_management_users_patch", path: "api/hazo_auth/user_management/users", method: "PATCH", export_name: "userManagementUsersPATCH" },
|
|
28
|
+
{ name: "user_management_users_post", path: "api/hazo_auth/user_management/users", method: "POST", export_name: "userManagementUsersPOST" },
|
|
29
|
+
{ name: "user_management_permissions", path: "api/hazo_auth/user_management/permissions", method: "GET", export_name: "userManagementPermissionsGET" },
|
|
30
|
+
{ name: "user_management_permissions_post", path: "api/hazo_auth/user_management/permissions", method: "POST", export_name: "userManagementPermissionsPOST" },
|
|
31
|
+
{ name: "user_management_permissions_put", path: "api/hazo_auth/user_management/permissions", method: "PUT", export_name: "userManagementPermissionsPUT" },
|
|
32
|
+
{ name: "user_management_permissions_delete", path: "api/hazo_auth/user_management/permissions", method: "DELETE", export_name: "userManagementPermissionsDELETE" },
|
|
33
|
+
{ name: "user_management_roles", path: "api/hazo_auth/user_management/roles", method: "GET", export_name: "userManagementRolesGET" },
|
|
34
|
+
{ name: "user_management_roles_post", path: "api/hazo_auth/user_management/roles", method: "POST", export_name: "userManagementRolesPOST" },
|
|
35
|
+
{ name: "user_management_roles_put", path: "api/hazo_auth/user_management/roles", method: "PUT", export_name: "userManagementRolesPUT" },
|
|
36
|
+
{ name: "user_management_users_roles", path: "api/hazo_auth/user_management/users/roles", method: "GET", export_name: "userManagementUsersRolesGET" },
|
|
37
|
+
{ name: "user_management_users_roles_post", path: "api/hazo_auth/user_management/users/roles", method: "POST", export_name: "userManagementUsersRolesPOST" },
|
|
38
|
+
{ name: "user_management_users_roles_put", path: "api/hazo_auth/user_management/users/roles", method: "PUT", export_name: "userManagementUsersRolesPUT" },
|
|
25
39
|
];
|
|
26
40
|
const PAGES = [
|
|
27
41
|
{ name: "login", path: "hazo_auth/login", component_name: "LoginPage", import_path: "hazo_auth/pages/login" },
|
|
@@ -63,6 +77,16 @@ function generate_route_content(route) {
|
|
|
63
77
|
export { ${route.export_name} as ${route.method} } from "hazo_auth/server/routes";
|
|
64
78
|
`;
|
|
65
79
|
}
|
|
80
|
+
function generate_route_content_multi(routes) {
|
|
81
|
+
const path = routes[0].path;
|
|
82
|
+
const exports = routes.map(r => `export { ${r.export_name} as ${r.method} } from "hazo_auth/server/routes";`).join("\n");
|
|
83
|
+
const methods = routes.map(r => r.method).join(", ");
|
|
84
|
+
return `// Generated by hazo_auth - do not edit manually
|
|
85
|
+
// Route: /${path}
|
|
86
|
+
// Methods: ${methods}
|
|
87
|
+
${exports}
|
|
88
|
+
`;
|
|
89
|
+
}
|
|
66
90
|
function generate_page_content(page) {
|
|
67
91
|
return `// Generated by hazo_auth - do not edit manually
|
|
68
92
|
// Page: /${page.path}
|
|
@@ -77,23 +101,32 @@ function generate_api_routes(app_dir, project_root) {
|
|
|
77
101
|
let skipped = 0;
|
|
78
102
|
let errors = 0;
|
|
79
103
|
console.log("\x1b[1m📡 Generating API routes...\x1b[0m\n");
|
|
104
|
+
// Group routes by path to handle multiple methods per path
|
|
105
|
+
const routes_by_path = new Map();
|
|
80
106
|
for (const route of ROUTES) {
|
|
81
|
-
const
|
|
107
|
+
const existing = routes_by_path.get(route.path) || [];
|
|
108
|
+
existing.push(route);
|
|
109
|
+
routes_by_path.set(route.path, existing);
|
|
110
|
+
}
|
|
111
|
+
for (const [route_path, routes_for_path] of routes_by_path) {
|
|
112
|
+
const route_dir = path.join(app_dir, route_path);
|
|
82
113
|
const route_file = path.join(route_dir, "route.ts");
|
|
83
114
|
if (file_exists(route_file)) {
|
|
84
|
-
console.log(`\x1b[33m[SKIP]\x1b[0m ${
|
|
115
|
+
console.log(`\x1b[33m[SKIP]\x1b[0m ${route_path}/route.ts (already exists)`);
|
|
85
116
|
skipped++;
|
|
86
117
|
continue;
|
|
87
118
|
}
|
|
88
119
|
try {
|
|
89
120
|
ensure_dir(route_dir);
|
|
90
|
-
|
|
121
|
+
// Generate content with all methods for this path
|
|
122
|
+
const content = generate_route_content_multi(routes_for_path);
|
|
91
123
|
fs.writeFileSync(route_file, content, "utf-8");
|
|
92
|
-
|
|
124
|
+
const methods = routes_for_path.map(r => r.method).join(", ");
|
|
125
|
+
console.log(`\x1b[32m[CREATE]\x1b[0m ${route_path}/route.ts (${methods})`);
|
|
93
126
|
created++;
|
|
94
127
|
}
|
|
95
128
|
catch (err) {
|
|
96
|
-
console.log(`\x1b[31m[ERROR]\x1b[0m ${
|
|
129
|
+
console.log(`\x1b[31m[ERROR]\x1b[0m ${route_path}/route.ts - ${err instanceof Error ? err.message : "Unknown error"}`);
|
|
97
130
|
errors++;
|
|
98
131
|
}
|
|
99
132
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"AAOA,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5C,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB,CAAC;
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"AAOA,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5C,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB,CAAC;AA0eF,wBAAgB,cAAc,IAAI,iBAAiB,CAqElD"}
|
package/dist/cli/validate.js
CHANGED
|
@@ -29,6 +29,20 @@ const REQUIRED_API_ROUTES = [
|
|
|
29
29
|
{ path: "api/hazo_auth/get_auth", method: "POST" },
|
|
30
30
|
{ path: "api/hazo_auth/validate_reset_token", method: "POST" },
|
|
31
31
|
{ path: "api/hazo_auth/profile_picture/[filename]", method: "GET" },
|
|
32
|
+
// User management routes
|
|
33
|
+
{ path: "api/hazo_auth/user_management/users", method: "GET" },
|
|
34
|
+
{ path: "api/hazo_auth/user_management/users", method: "PATCH" },
|
|
35
|
+
{ path: "api/hazo_auth/user_management/users", method: "POST" },
|
|
36
|
+
{ path: "api/hazo_auth/user_management/permissions", method: "GET" },
|
|
37
|
+
{ path: "api/hazo_auth/user_management/permissions", method: "POST" },
|
|
38
|
+
{ path: "api/hazo_auth/user_management/permissions", method: "PUT" },
|
|
39
|
+
{ path: "api/hazo_auth/user_management/permissions", method: "DELETE" },
|
|
40
|
+
{ path: "api/hazo_auth/user_management/roles", method: "GET" },
|
|
41
|
+
{ path: "api/hazo_auth/user_management/roles", method: "POST" },
|
|
42
|
+
{ path: "api/hazo_auth/user_management/roles", method: "PUT" },
|
|
43
|
+
{ path: "api/hazo_auth/user_management/users/roles", method: "GET" },
|
|
44
|
+
{ path: "api/hazo_auth/user_management/users/roles", method: "POST" },
|
|
45
|
+
{ path: "api/hazo_auth/user_management/users/roles", method: "PUT" },
|
|
32
46
|
];
|
|
33
47
|
// section: helpers
|
|
34
48
|
function get_project_root() {
|
|
@@ -16,4 +16,8 @@ export { GET as libraryPhotoGET } from "./library_photo.js";
|
|
|
16
16
|
export { GET as profilePictureFilenameGET } from "./profile_picture_filename.js";
|
|
17
17
|
export { POST as getAuthPOST } from "./get_auth.js";
|
|
18
18
|
export { POST as invalidateCachePOST } from "./invalidate_cache.js";
|
|
19
|
+
export { GET as userManagementUsersGET, PATCH as userManagementUsersPATCH, POST as userManagementUsersPOST } from "./user_management_users.js";
|
|
20
|
+
export { GET as userManagementPermissionsGET, POST as userManagementPermissionsPOST, PUT as userManagementPermissionsPUT, DELETE as userManagementPermissionsDELETE } from "./user_management_permissions.js";
|
|
21
|
+
export { GET as userManagementRolesGET, POST as userManagementRolesPOST, PUT as userManagementRolesPUT } from "./user_management_roles.js";
|
|
22
|
+
export { GET as userManagementUsersRolesGET, POST as userManagementUsersRolesPOST, PUT as userManagementUsersRolesPUT } from "./user_management_users_roles.js";
|
|
19
23
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/routes/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,GAAG,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAGvC,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,IAAI,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,GAAG,IAAI,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGzE,OAAO,EAAE,GAAG,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,IAAI,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAG1E,OAAO,EAAE,KAAK,IAAI,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,IAAI,IAAI,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,MAAM,IAAI,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,GAAG,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,GAAG,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,GAAG,IAAI,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAGjF,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,IAAI,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/routes/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,GAAG,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAGvC,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,IAAI,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,IAAI,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,GAAG,IAAI,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGzE,OAAO,EAAE,GAAG,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,IAAI,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAG1E,OAAO,EAAE,KAAK,IAAI,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,IAAI,IAAI,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,MAAM,IAAI,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,GAAG,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,GAAG,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,GAAG,IAAI,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAGjF,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,IAAI,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAGpE,OAAO,EAAE,GAAG,IAAI,sBAAsB,EAAE,KAAK,IAAI,wBAAwB,EAAE,IAAI,IAAI,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC/I,OAAO,EAAE,GAAG,IAAI,4BAA4B,EAAE,IAAI,IAAI,6BAA6B,EAAE,GAAG,IAAI,4BAA4B,EAAE,MAAM,IAAI,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;AAC9M,OAAO,EAAE,GAAG,IAAI,sBAAsB,EAAE,IAAI,IAAI,uBAAuB,EAAE,GAAG,IAAI,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAC3I,OAAO,EAAE,GAAG,IAAI,2BAA2B,EAAE,IAAI,IAAI,4BAA4B,EAAE,GAAG,IAAI,2BAA2B,EAAE,MAAM,kCAAkC,CAAC"}
|
|
@@ -23,3 +23,8 @@ export { GET as profilePictureFilenameGET } from "./profile_picture_filename.js"
|
|
|
23
23
|
// Auth utility routes
|
|
24
24
|
export { POST as getAuthPOST } from "./get_auth.js";
|
|
25
25
|
export { POST as invalidateCachePOST } from "./invalidate_cache.js";
|
|
26
|
+
// User management routes
|
|
27
|
+
export { GET as userManagementUsersGET, PATCH as userManagementUsersPATCH, POST as userManagementUsersPOST } from "./user_management_users.js";
|
|
28
|
+
export { GET as userManagementPermissionsGET, POST as userManagementPermissionsPOST, PUT as userManagementPermissionsPUT, DELETE as userManagementPermissionsDELETE } from "./user_management_permissions.js";
|
|
29
|
+
export { GET as userManagementRolesGET, POST as userManagementRolesPOST, PUT as userManagementRolesPUT } from "./user_management_roles.js";
|
|
30
|
+
export { GET as userManagementUsersRolesGET, POST as userManagementUsersRolesPOST, PUT as userManagementUsersRolesPUT } from "./user_management_users_roles.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user_management_permissions.d.ts","sourceRoot":"","sources":["../../../src/server/routes/user_management_permissions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,2DAA2D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user_management_roles.d.ts","sourceRoot":"","sources":["../../../src/server/routes/user_management_roles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,qDAAqD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user_management_users.d.ts","sourceRoot":"","sources":["../../../src/server/routes/user_management_users.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,qDAAqD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user_management_users_roles.d.ts","sourceRoot":"","sources":["../../../src/server/routes/user_management_users_roles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,2DAA2D,CAAC"}
|
|
@@ -296,7 +296,7 @@ enable_admin_ui = true
|
|
|
296
296
|
# Application permission list defaults (comma-separated)
|
|
297
297
|
# These permissions will be shown in the Permissions tab and can be migrated to the database
|
|
298
298
|
# Example: application_permission_list_defaults = PERM_ONE,PERM_TWO,PERM_THREE
|
|
299
|
-
|
|
299
|
+
application_permission_list_defaults = admin_user_management,admin_role_management,admin_permission_management
|
|
300
300
|
|
|
301
301
|
[hazo_auth__initial_setup]
|
|
302
302
|
# Initial setup configuration for initializing users, roles, and permissions
|