Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ dist/
*.user
*.userosscache
*.sln.docstates

.env
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

Expand Down
5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,14 @@
"@types/express": "^4.17.21",
"axios": "^1.6.2",
"cors": "^2.8.5",
"dotenv": "^16.3.1",
"express": "^4.18.2",
"helmet": "^6.0.1"
"helmet": "^6.0.1",
"jsonwebtoken": "^9.0.2"
},
"devDependencies": {
"@types/cors": "^2.8.17",
"@types/jsonwebtoken": "^9.0.5",
"@types/node": "^20.10.4",
"@typescript-eslint/eslint-plugin": "^6.15.0",
"@typescript-eslint/parser": "^6.15.0",
Expand Down
14 changes: 9 additions & 5 deletions src/controllers/auth.controller.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
import { Request, Response } from "express";
import { userService } from "../services/auth.service";

const authController = {
async login(req: Request, res: Response): Promise<void> {
const migrationAuthController = () => {
const login = async (req: Request, res: Response): Promise<void> => {
try {
const apiResp = await userService.loginUser(req);
res.status(500).json(apiResp);
res.status(200).json(apiResp);
} catch (error) {
console.error(error);
res.status(500).json({ message: "Internal Server Error" });
}
},
};

return {
login,
};
};

export default authController;
export const authControllr = migrationAuthController();
1 change: 0 additions & 1 deletion src/middlewares/auth.middleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ export const authenticateUser = (
): void => {
// Simulate authentication logic (e.g., check for a token)
const isAuthenticated = /* Your authentication logic here */ true;

if (isAuthenticated) {
next(); // User is authenticated, proceed to the next middleware or route handler
} else {
Expand Down
15 changes: 15 additions & 0 deletions src/models/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
export interface User {
email: string;
password: string;
}

export interface ResponseType {
message: string;
status: number;
migration_token: string | null;
}

export interface MigrationPayload {
region: string;
user_id: string;
}
4 changes: 0 additions & 4 deletions src/models/user.model.ts

This file was deleted.

4 changes: 2 additions & 2 deletions src/routes/auth.routes.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import express from "express";
import authController from "../controllers/auth.controller";
import { authControllr } from "../controllers/auth.controller";
import { authenticateUser } from "../middlewares/auth.middleware";

const router = express.Router();

// Login route
router.post("/login", authenticateUser, authController.login);
router.post("/login", authenticateUser, authControllr.login);

export default router;
2 changes: 2 additions & 0 deletions src/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@ import { parseCLIArgsFromProcess, loadConfigFile } from "./utils";
import { constants } from "./constants";
import express, { NextFunction, Request, Response } from "express";
import cors from "cors";
import dotenv from "dotenv";
import helmet from "helmet";
const PORT = process.env.PORT || 5000;
import authRoutes from "./routes/auth.routes";

try {
loadConfigFile(parseCLIArgsFromProcess(process.argv));
dotenv.config();

const app = express();
app.use(
Expand Down
60 changes: 49 additions & 11 deletions src/services/auth.service.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,58 @@
import { Request } from "express";
import axios from "axios";
import { API_MGMT_URL } from "../config";
import { generateToken } from "../utils/jwt.utils";
import * as fs from "fs/promises";
import { MigrationPayload, ResponseType } from "../models/types";

const createUserService = () => {
const loginUser = async (req: Request): Promise<void> => {
const loginUser = async (req: Request): Promise<ResponseType | null> => {
const userData = req.body;
const apiResponse = await axios({
method: "POST",
url: API_MGMT_URL,
headers: {
"Content-Type": "application/json",
},
data: userData,
});

return apiResponse.data;

try {
const apiResponse = await axios({
method: "POST",
url: API_MGMT_URL,
headers: {
"Content-Type": "application/json",
},
data: userData,
});

if (apiResponse) {
const migration_payload: MigrationPayload = {
region: userData.region,
user_id: apiResponse.data.user.uid,
};
const migration_token = generateToken(migration_payload);
const response = {
message: apiResponse.data.notice,
status: 200,
migration_token,
};

// Create an object with migration_token as the key
const dataToWrite = {
[migration_token]: apiResponse.data.user.authtoken,
};

// Write the data to a JSON file (e.g., tokens.json)
await fs.writeFile("tokens.json", JSON.stringify(dataToWrite, null, 2));

return response;
}

// Explicit return statement in case apiResponse is falsy
return null;
} catch (error) {
// Handle errors (e.g., log, return an error response)
console.error(error);
return {
message: "Error during login",
status: 500,
migration_token: null,
};
}
};

return {
Expand Down
10 changes: 10 additions & 0 deletions src/utils/jwt.utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/// src/utils/jwt.utils.ts
import jwt from "jsonwebtoken";
import { MigrationPayload } from "../models/types";

const secretKey = process.env.JWT_SECRET_KEY ?? "default_secret_key";

// @typescript-eslint/no-explicit-any
export const generateToken = (payload: MigrationPayload): string => {
return jwt.sign(payload, secretKey, { expiresIn: "1h" });
};