akhfry

Untitled

Jan 17th, 2025
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.71 KB | Source Code | 0 0
  1. -->> index.ts ( my backend )
  2.  
  3. import express from "express";
  4. import dotenv from "dotenv";
  5. import cors from "cors";
  6. import connectDB from "./config/db";
  7. import authRoutes from "./routes/authRoutes";
  8. import userRoutes from "./routes/UserRoutes";
  9. import twoFaRoutes from "./routes/TwoFARoutes";
  10. import enhanceTextRoutes from "./routes/enhanceTextRoutes";
  11. import checklistRoutes from "./routes/checklistRoutes";
  12. import faqRoutes from "./routes/faqRoutes";
  13. import visitorSecurityRoutes from "./routes/visitor-routes/visitorSecurityRoutes";
  14. import aiChatRoutes from "./routes/AI-routes/aiChatRoutes";
  15. import incubatorRoutes from "./routes/incubator-routes/incubatorRoutes";
  16. import resourceRoutes from "./routes/resource-routes/resourceRoutes";
  17. import path from "path";
  18. import templateRoutes from "./routes/template-routes/templateRoutes";
  19. import adminRoutes from "./routes/admin-routes/adminRoutes";
  20. import cookieParser from "cookie-parser";
  21. import googleAuthRoutes from "./routes/google-auth/googleAuthRoutes";
  22. import influencerRoutes from "./routes/influencer-routes/influencerRoutes";
  23. import StartupInfluencerRoutes from "./routes/influencer-routes/StartupInfluencerRoutes";
  24. import AngelRoutes from "./routes/angel-routes/AngelRoutes";
  25. import preSeedRoutes from "./routes/preSeed-routes/preSeedRoutes";
  26. import seedRoutes from "./routes/Seed-Routes/seedRoutes";
  27.  
  28. dotenv.config();
  29.  
  30. const FRONTEND_URL = "https://founders-portal-test-server-client.onrender.com";
  31. const BACKEND_URL = "https://founders-portal-test-server-apii.onrender.com";
  32.  
  33. const app = express();
  34. const PORT = process.env.PORT || 5000;
  35.  
  36. app.use(cookieParser());
  37.  
  38. // Middleware
  39. app.use(
  40. cors({
  41. origin: "https://founders-portal-test-server-client.onrender.com",
  42. credentials: true,
  43. methods: ["GET", "POST", "PUT", "DELETE", "OPTIONS", "PATCH"],
  44. allowedHeaders: ["Content-Type", "Authorization", "Cookie"],
  45. exposedHeaders: ["set-cookie"],
  46. })
  47. );
  48.  
  49. app.use(express.json());
  50.  
  51. app.get("/", (req, res) => {
  52. res.send("API is running...");
  53. });
  54.  
  55. // Connect to Database
  56. connectDB();
  57.  
  58. // Routes
  59. app.use("/api/auth", googleAuthRoutes);
  60. app.use("/api/admin", adminRoutes);
  61.  
  62. app.use("/api", authRoutes);
  63. app.use("/api/user", userRoutes);
  64. app.use("/api/twofa", twoFaRoutes);
  65. app.use("/api/check", checklistRoutes);
  66. app.use("/api/faq", faqRoutes);
  67. app.use("/api", visitorSecurityRoutes);
  68.  
  69. app.use("/api/ai", enhanceTextRoutes);
  70. app.use("/api/ai-chat", aiChatRoutes);
  71.  
  72. app.use("/api", incubatorRoutes);
  73. app.use("/api", AngelRoutes);
  74. app.use("/api", preSeedRoutes);
  75. app.use("/api", seedRoutes);
  76.  
  77. app.use("/api", templateRoutes);
  78.  
  79. app.use("/api/resources", resourceRoutes);
  80. app.use("/api/influencers", influencerRoutes);
  81. app.use("/api/startup-influencers", StartupInfluencerRoutes);
  82.  
  83. app.use("/resuploads", (req, res, next) => {
  84. // Check if it's a download request
  85. if (req.query.download === "true") {
  86. // Set headers for download
  87. res.setHeader("Content-Disposition", "attachment");
  88. }
  89. next();
  90. });
  91.  
  92. app.use("/resuploads", express.static(path.join(__dirname, "Resuploads")));
  93.  
  94. if (process.env.NODE_ENV === "development") {
  95. app.get("/api/debug/routes", (req, res) => {
  96. const routes = app._router.stack
  97. .filter((r: any) => r.route)
  98. .map((r: any) => ({
  99. path: r.route.path,
  100. methods: Object.keys(r.route.methods),
  101. }));
  102. res.json(routes);
  103. });
  104. }
  105.  
  106. app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
  107.  
  108. export default app;
  109.  
  110. -->> frontend ( AdminLogin.tsx ) this is where the backend is connected to
  111.  
  112. import React, { useState } from "react";
  113. import { useNavigate } from "react-router-dom";
  114. import { Card, message } from "antd";
  115. import { GoogleLogin, GoogleOAuthProvider } from "@react-oauth/google";
  116.  
  117. const GOOGLE_CLIENT_ID = import.meta.env.VITE_ADMIN_PRODUCTION_GOOGLE_CLIENT_ID;
  118. const BACKEND_URL =
  119. import.meta.env.VITE_BACKEND_URL ||
  120. "https://founders-portal-test-server-apii.onrender.com";
  121.  
  122. const AdminLogin: React.FC = () => {
  123. const navigate = useNavigate();
  124. const [loading, setLoading] = useState(false);
  125.  
  126. const handleGoogleSuccess = async (credentialResponse: any) => {
  127. setLoading(true);
  128. try {
  129. const response = await fetch(`${BACKEND_URL}/api/auth/google-login`, {
  130. // Update with your actual backend URL
  131. method: "POST",
  132. headers: {
  133. "Content-Type": "application/json",
  134. },
  135. body: JSON.stringify({
  136. credential: credentialResponse.credential,
  137. }),
  138. credentials: "include",
  139. mode: "cors",
  140. });
  141.  
  142. if (!response.ok) {
  143. throw new Error("Authentication failed");
  144. }
  145.  
  146. const data = await response.json();
  147. if (data.isAdmin) {
  148. message.success("Login successful!");
  149. navigate("/adminPortal/dashboard");
  150. } else {
  151. message.error("You do not have admin access");
  152. }
  153. } catch (error) {
  154. console.error("Login error:", error);
  155. message.error("Login failed. Please try again.");
  156. } finally {
  157. setLoading(false);
  158. }
  159. };
  160.  
  161. return (
  162. <GoogleOAuthProvider clientId={GOOGLE_CLIENT_ID}>
  163. <div
  164. style={{
  165. minHeight: "100vh",
  166. display: "flex",
  167. alignItems: "center",
  168. justifyContent: "center",
  169. background: "#f0f2f5",
  170. }}
  171. >
  172. <Card style={{ width: 400 }}>
  173. <h1 style={{ textAlign: "center", marginBottom: 24 }}>Admin Login</h1>
  174. <div style={{ display: "flex", justifyContent: "center" }}>
  175. <GoogleLogin
  176. onSuccess={handleGoogleSuccess}
  177. onError={() => {
  178. console.error("Login Failed");
  179. message.error("Login Failed");
  180. }}
  181. useOneTap
  182. theme="outline"
  183. size="large"
  184. text="continue_with"
  185. />
  186. </div>
  187. </Card>
  188. </div>
  189. </GoogleOAuthProvider>
  190. );
  191. };
  192.  
  193. export default AdminLogin;
  194.  
  195. -->> GoogleAuthRoutes.ts ( route file, backend )
  196.  
  197. import express, { RequestHandler } from "express";
  198. import { googleLogin } from "../../controllers/googleauthController";
  199. import { authenticateAdmin } from "../../middleware/adminAuth";
  200.  
  201. const router = express.Router();
  202. const FRONTEND_URL = "https://founders-portal-test-server-client.onrender.com";
  203.  
  204. // Get current user info
  205. const getCurrentUser: RequestHandler = (req, res) => {
  206. res.header("Access-Control-Allow-Origin", FRONTEND_URL);
  207. res.header("Access-Control-Allow-Credentials", "true");
  208. res.json({
  209. id: req.adminuser?._id,
  210. adminemail: req.adminuser?.adminemail,
  211. adminname: req.adminuser?.adminname,
  212. adminrole: req.adminuser?.adminrole,
  213. profilePic: req.adminuser?.profilePic,
  214. });
  215. };
  216.  
  217. // Logout handler
  218. const logout: RequestHandler = (req, res) => {
  219. res.header("Access-Control-Allow-Origin", FRONTEND_URL);
  220. res.header("Access-Control-Allow-Credentials", "true");
  221. res.clearCookie("adminToken", {
  222. httpOnly: true,
  223. secure: true,
  224. sameSite: "none",
  225. });
  226. res.json({ message: "Logged out successfully" });
  227. };
  228.  
  229. // Wrap googleLogin to ensure proper headers
  230. const wrappedGoogleLogin: RequestHandler = async (req, res, next) => {
  231. try {
  232. const origin = req.headers.origin;
  233. if (origin === FRONTEND_URL) {
  234. res.header("Access-Control-Allow-Origin", FRONTEND_URL);
  235. res.header("Access-Control-Allow-Credentials", "true");
  236. }
  237. await googleLogin(req, res, next);
  238. } catch (error) {
  239. next(error);
  240. }
  241. };
  242.  
  243. // Route definitions
  244. router.post("/google-login", wrappedGoogleLogin);
  245. router.get("/current-user", authenticateAdmin, getCurrentUser);
  246. router.post("/logout", logout);
  247.  
  248. export default router;
Advertisement
Add Comment
Please, Sign In to add comment