login.tsx 1.5 KB

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