diff --git a/pages/api/accounts/index.js b/pages/api/accounts/index.js index acaf1451..4c2b8b20 100644 --- a/pages/api/accounts/index.js +++ b/pages/api/accounts/index.js @@ -19,13 +19,7 @@ export default async (req, res) => { } if (req.method === 'POST') { - await useAuth(req, res); - - if (!req.auth.is_admin) { - return unauthorized(res); - } - - const { username, password } = req.body; + const { username, password, account_uuid } = req.body; const accountByUsername = await getAccountByUsername(username); @@ -36,7 +30,7 @@ export default async (req, res) => { const created = await createAccount({ username, password: hashPassword(password), - account_uuid: uuid(), + account_uuid: account_uuid || uuid(), }); return ok(res, created); diff --git a/pages/api/websites/index.js b/pages/api/websites/index.js index 108a4a8a..65a078d1 100644 --- a/pages/api/websites/index.js +++ b/pages/api/websites/index.js @@ -1,4 +1,4 @@ -import { createWebsite, getAllWebsites, getUserWebsites } from 'queries'; +import { createWebsite, getAccount, getAllWebsites, getUserWebsites } from 'queries'; import { ok, methodNotAllowed, unauthorized, getRandomChars } from 'next-basics'; import { useAuth } from 'lib/middleware'; import { uuid } from 'lib/crypto'; @@ -6,9 +6,15 @@ import { uuid } from 'lib/crypto'; export default async (req, res) => { await useAuth(req, res); - const { user_id: current_user_id, is_admin } = req.auth; + const { user_id: current_user_id, is_admin, account_uuid } = req.auth; const { user_id, include_all } = req.query; - const userId = +user_id; + let account; + + if (account_uuid) { + account = await getAccount({ account_uuid }); + } + + const userId = account ? account.user_id : +user_id; if (req.method === 'GET') { if (userId && userId !== current_user_id && !is_admin) { @@ -29,7 +35,7 @@ export default async (req, res) => { const { is_admin: currentUserIsAdmin, user_id: currentUserId } = req.auth; const { name, domain, owner, enable_share_url } = req.body; - const website_owner = +owner; + const website_owner = account ? account.user_id : +owner; if (website_owner !== currentUserId && !currentUserIsAdmin) { return unauthorized(res); diff --git a/queries/admin/account/getAccount.js b/queries/admin/account/getAccount.js new file mode 100644 index 00000000..c414f56d --- /dev/null +++ b/queries/admin/account/getAccount.js @@ -0,0 +1,7 @@ +import prisma from 'lib/prisma'; + +export async function getAccount(where) { + return prisma.client.account.findUnique({ + where, + }); +} diff --git a/queries/index.js b/queries/index.js index 517307f6..35d79215 100644 --- a/queries/index.js +++ b/queries/index.js @@ -1,63 +1,31 @@ -import { createAccount } from './admin/account/createAccount'; -import { deleteAccount } from './admin/account/deleteAccount'; -import { getAccountById } from './admin/account/getAccountById'; -import { getAccountByUsername } from './admin/account/getAccountByUsername'; -import { getAccounts } from './admin/account/getAccounts'; -import { updateAccount } from './admin/account/updateAccount'; -import { createWebsite } from './admin/website/createWebsite'; -import { deleteWebsite } from './admin/website/deleteWebsite'; -import { getAllWebsites } from './admin/website/getAllWebsites'; -import { getUserWebsites } from './admin/website/getUserWebsites'; -import { getWebsiteById } from './admin/website/getWebsiteById'; -import { getWebsiteByShareId } from './admin/website/getWebsiteByShareId'; -import { getWebsiteByUuid } from './admin/website/getWebsiteByUuid'; -import { resetWebsite } from './admin/website/resetWebsite'; -import { updateWebsite } from './admin/website/updateWebsite'; -import { getEventMetrics } from './analytics/event/getEventMetrics'; -import { getEvents } from './analytics/event/getEvents'; -import { saveEvent } from './analytics/event/saveEvent'; -import { getPageviewMetrics } from './analytics/pageview/getPageviewMetrics'; -import { getPageviewParams } from './analytics/pageview/getPageviewParams'; -import { getPageviews } from './analytics/pageview/getPageviews'; -import { getPageviewStats } from './analytics/pageview/getPageviewStats'; -import { savePageView } from './analytics/pageview/savePageView'; -import { createSession } from './analytics/session/createSession'; -import { getSessionByUuid } from './analytics/session/getSessionByUuid'; -import { getSessionMetrics } from './analytics/session/getSessionMetrics'; -import { getSessions } from './analytics/session/getSessions'; -import { getActiveVisitors } from './analytics/stats/getActiveVisitors'; -import { getRealtimeData } from './analytics/stats/getRealtimeData'; -import { getWebsiteStats } from './analytics/stats/getWebsiteStats'; - -export { - createWebsite, - deleteWebsite, - getAllWebsites, - getUserWebsites, - getWebsiteById, - getWebsiteByShareId, - getWebsiteByUuid, - resetWebsite, - updateWebsite, - createAccount, - deleteAccount, - getAccountById, - getAccountByUsername, - getAccounts, - updateAccount, - getEventMetrics, - getEvents, - saveEvent, - getPageviewMetrics, - getPageviewParams, - getPageviews, - getPageviewStats, - savePageView, - createSession, - getSessionByUuid, - getSessionMetrics, - getSessions, - getActiveVisitors, - getRealtimeData, - getWebsiteStats, -}; +export * from './admin/account/createAccount'; +export * from './admin/account/deleteAccount'; +export * from './admin/account/getAccount'; +export * from './admin/account/getAccountById'; +export * from './admin/account/getAccountByUsername'; +export * from './admin/account/getAccounts'; +export * from './admin/account/updateAccount'; +export * from './admin/website/createWebsite'; +export * from './admin/website/deleteWebsite'; +export * from './admin/website/getAllWebsites'; +export * from './admin/website/getUserWebsites'; +export * from './admin/website/getWebsiteById'; +export * from './admin/website/getWebsiteByShareId'; +export * from './admin/website/getWebsiteByUuid'; +export * from './admin/website/resetWebsite'; +export * from './admin/website/updateWebsite'; +export * from './analytics/event/getEventMetrics'; +export * from './analytics/event/getEvents'; +export * from './analytics/event/saveEvent'; +export * from './analytics/pageview/getPageviewMetrics'; +export * from './analytics/pageview/getPageviewParams'; +export * from './analytics/pageview/getPageviews'; +export * from './analytics/pageview/getPageviewStats'; +export * from './analytics/pageview/savePageView'; +export * from './analytics/session/createSession'; +export * from './analytics/session/getSessionByUuid'; +export * from './analytics/session/getSessionMetrics'; +export * from './analytics/session/getSessions'; +export * from './analytics/stats/getActiveVisitors'; +export * from './analytics/stats/getRealtimeData'; +export * from './analytics/stats/getWebsiteStats';