195 lines
5.7 KiB
JavaScript
195 lines
5.7 KiB
JavaScript
// - Add authentication check to ensure only admins can access this route.
|
|
// - Implement a load function to fetch a list of all users.
|
|
// - Create actions for updating user information (similar to the about/[id] route).
|
|
|
|
import { BASE_API_URI } from '$lib/utils/constants';
|
|
import { formatError, userDatesFromRFC3339 } from '$lib/utils/helpers';
|
|
import { fail, redirect } from '@sveltejs/kit';
|
|
import {
|
|
formDataToObject,
|
|
processSubscriptionFormData,
|
|
processUserFormData
|
|
} from '$lib/utils/processing';
|
|
import { base } from '$app/paths';
|
|
|
|
/** @type {import('./$types').PageServerLoad} */
|
|
export async function load({ locals }) {
|
|
// redirect user if not logged in
|
|
if (!locals.user) {
|
|
throw redirect(302, `${base}/auth/login?next=${base}/auth/admin/users`);
|
|
}
|
|
if (locals.user.role_id === 0) {
|
|
throw redirect(302, `${base}/auth/about/${locals.user.id}`);
|
|
}
|
|
}
|
|
|
|
/** @type {import('./$types').Actions} */
|
|
export const actions = {
|
|
/**
|
|
*
|
|
* @param request - The request object
|
|
* @param fetch - Fetch object from sveltekit
|
|
* @param cookies - SvelteKit's cookie object
|
|
* @param locals - The local object, housing current user
|
|
* @returns Error data or redirects user to the home page or the previous page
|
|
*/
|
|
updateUser: async ({ request, fetch, cookies, locals }) => {
|
|
let formData = await request.formData();
|
|
|
|
const rawData = formDataToObject(formData);
|
|
const processedData = processUserFormData(rawData);
|
|
|
|
console.dir(processedData.user.membership);
|
|
const isCreating = !processedData.user.id || processedData.user.id === 0;
|
|
console.log('Is creating: ', isCreating);
|
|
const apiURL = `${BASE_API_URI}/auth/users`;
|
|
|
|
/** @type {RequestInit} */
|
|
const requestOptions = {
|
|
method: isCreating ? 'POST' : 'PUT',
|
|
credentials: 'include',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
Cookie: `jwt=${cookies.get('jwt')}`
|
|
},
|
|
body: JSON.stringify(processedData)
|
|
};
|
|
|
|
const res = await fetch(apiURL, requestOptions);
|
|
|
|
if (!res.ok) {
|
|
const response = await res.json();
|
|
const errors = formatError(response.errors);
|
|
return fail(400, { errors: errors });
|
|
}
|
|
|
|
const response = await res.json();
|
|
console.log('Server success response:', response);
|
|
locals.user = response;
|
|
userDatesFromRFC3339(locals.user);
|
|
throw redirect(303, `${base}/auth/admin/users`);
|
|
},
|
|
|
|
/**
|
|
*
|
|
* @param request - The request object
|
|
* @param fetch - Fetch object from sveltekit
|
|
* @param cookies - SvelteKit's cookie object
|
|
* @param locals - The local object, housing current user
|
|
* @returns Error data or redirects user to the home page or the previous page
|
|
*/
|
|
updateSubscription: async ({ request, fetch, cookies }) => {
|
|
let formData = await request.formData();
|
|
|
|
const rawData = formDataToObject(formData);
|
|
const processedData = processSubscriptionFormData(rawData);
|
|
|
|
const isCreating = !processedData.subscription.id || processedData.subscription.id === 0;
|
|
console.log('Is creating: ', isCreating);
|
|
const apiURL = `${BASE_API_URI}/auth/subscriptions`;
|
|
|
|
/** @type {RequestInit} */
|
|
const requestOptions = {
|
|
method: isCreating ? 'POST' : 'PUT',
|
|
credentials: 'include',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
Cookie: `jwt=${cookies.get('jwt')}`
|
|
},
|
|
body: JSON.stringify(processedData)
|
|
};
|
|
|
|
const res = await fetch(apiURL, requestOptions);
|
|
|
|
if (!res.ok) {
|
|
const response = await res.json();
|
|
const errors = formatError(response.errors);
|
|
return fail(400, { errors: errors });
|
|
}
|
|
|
|
const response = await res.json();
|
|
console.log('Server success response:', response);
|
|
throw redirect(303, `${base}/auth/admin/users`);
|
|
},
|
|
|
|
/**
|
|
*
|
|
* @param request - The request object
|
|
* @param fetch - Fetch object from sveltekit
|
|
* @param cookies - SvelteKit's cookie object
|
|
* @param locals - The local object, housing current user
|
|
* @returns
|
|
*/
|
|
userDelete: async ({ request, fetch, cookies }) => {
|
|
let formData = await request.formData();
|
|
|
|
const rawData = formDataToObject(formData);
|
|
const processedData = processUserFormData(rawData);
|
|
|
|
const apiURL = `${BASE_API_URI}/auth/users`;
|
|
|
|
/** @type {RequestInit} */
|
|
const requestOptions = {
|
|
method: 'DELETE',
|
|
credentials: 'include',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
Cookie: `jwt=${cookies.get('jwt')}`
|
|
},
|
|
body: JSON.stringify(processedData)
|
|
};
|
|
|
|
const res = await fetch(apiURL, requestOptions);
|
|
|
|
if (!res.ok) {
|
|
const response = await res.json();
|
|
const errors = formatError(response.errors);
|
|
return fail(400, { errors: errors });
|
|
}
|
|
|
|
const response = await res.json();
|
|
console.log('Server success response:', response);
|
|
throw redirect(303, `${base}/auth/admin/users`);
|
|
},
|
|
|
|
/**
|
|
*
|
|
* @param request - The request object
|
|
* @param fetch - Fetch object from sveltekit
|
|
* @param cookies - SvelteKit's cookie object
|
|
* @param locals - The local object, housing current subscription
|
|
* @returns
|
|
*/
|
|
subscriptionDelete: async ({ request, fetch, cookies }) => {
|
|
let formData = await request.formData();
|
|
|
|
const rawData = formDataToObject(formData);
|
|
const processedData = processSubscriptionFormData(rawData);
|
|
|
|
const apiURL = `${BASE_API_URI}/auth/subscriptions`;
|
|
|
|
/** @type {RequestInit} */
|
|
const requestOptions = {
|
|
method: 'DELETE',
|
|
credentials: 'include',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
Cookie: `jwt=${cookies.get('jwt')}`
|
|
},
|
|
body: JSON.stringify(processedData)
|
|
};
|
|
|
|
const res = await fetch(apiURL, requestOptions);
|
|
|
|
if (!res.ok) {
|
|
const response = await res.json();
|
|
const errors = formatError(response.errors);
|
|
return fail(400, { errors: errors });
|
|
}
|
|
|
|
const response = await res.json();
|
|
console.log('Server success response:', response);
|
|
throw redirect(303, `${base}/auth/admin/users`);
|
|
}
|
|
};
|