login.tsx 1.4 KB

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