login.tsx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import {
  2. checkToken,
  3. getCryptoString,
  4. makeErrorResponse,
  5. makeSuccessResponse,
  6. setToken,
  7. } from "utils/server.ts";
  8. import { find, insert } from "utils/db.ts";
  9. import { define } from "utils/state.ts";
  10. export const handler = define.handlers({
  11. GET(ctx) {
  12. const tokenUserId = checkToken(ctx.req);
  13. if (tokenUserId) {
  14. const user = find("User", { id: tokenUserId }, ["name", "email"]);
  15. if (user.length > 0) {
  16. return makeSuccessResponse({
  17. name: user[0]["name"] as string,
  18. email: user[0]["email"] as string,
  19. });
  20. }
  21. }
  22. return makeErrorResponse();
  23. },
  24. async POST(ctx) {
  25. const req = ctx.req;
  26. const reqJson = await req.json();
  27. if (reqJson.email && reqJson.password) {
  28. const user = find("User", { email: reqJson.email }, ["id"]);
  29. if (user.length > 0) {
  30. // Generate token
  31. const token = await getCryptoString(
  32. reqJson.email + new Date().toString(),
  33. "MD5",
  34. );
  35. // Store token
  36. const newToken = insert("Token", {
  37. token,
  38. user_id: user[0]["id"] as string,
  39. });
  40. if (newToken.length > 0) {
  41. const successResponse = makeSuccessResponse(true);
  42. setToken(successResponse, token);
  43. return successResponse;
  44. }
  45. }
  46. }
  47. return makeErrorResponse();
  48. },
  49. });