1.1.2Updated a month ago
import { Permission, Permissions } from "../../modules/permissions.ts";
import { Router } from "../router.ts";

const V1TokenRouter = new Router();

V1TokenRouter.any('*', (request, next) => {
  if(!request.permissions.can(Permission.MANAGE_TOKENS)) return 403;

  return next();
})

V1TokenRouter.get('/', (_request) => {
  const all_tokens = Object.entries(Permissions.Store).map(([token, map]) => {
    return {
      token,
      permissions: map
    }
  });

  return Response.json({
    count: all_tokens.length,
    data: all_tokens
  });
})

V1TokenRouter.get('/:id', (request) => {
  const map = Permissions.Store[request.params.id];

  if(!map) return 404;

  return Response.json({
    token: request.params.id,
    data: map
  });
})

V1TokenRouter.patch('/:id', async (request) => {
  const map = Permissions.Store[request.params.id];

  if(!map) return 404;

  let changed = false;

  try {
    const body = await request.json();
    for(const perm of Object.values(Permission)) {
      if(typeof body[perm] !== 'boolean') continue;
      if(map[perm] == body[perm]) continue;

      map[perm] = body[perm];
      changed = true;
    }
  } catch(_) {
    return 400;
  }

  return {
    token: request.params.id,
    changed,
    map
  };
})

export default V1TokenRouter;