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
53 changes: 53 additions & 0 deletions aws/src/lambdas/getBlockedDomains/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const promise_1 = require("mysql2/promise");
const dbConfig = {
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME,
};
const handler = async (event) => {
console.log('EVENT: \n' + JSON.stringify(event, null, 2));
let request_body;
try {
if (event.body) {
request_body = JSON.parse(event.body);
}
else {
console.log("No body found");
return {
statusCode: 400,
body: JSON.stringify({ message: "No body found" })
};
}
}
catch (error) {
console.error("Invalid JSON format", error);
return {
statusCode: 400,
body: JSON.stringify({ message: "Invalid JSON format" }),
};
}
const { uuid } = request_body;
const connection = await (0, promise_1.createConnection)(dbConfig);
;
try {
const [rows] = await connection.execute('SELECT domain FROM blocked_domains WHERE uuid = ?;', [uuid]);
console.log(rows);
await connection.end();
const domains = rows.map(row => row.domain);
return {
statusCode: 200,
body: JSON.stringify(domains)
};
}
catch (error) {
console.error("Error inserting data:", error);
return {
statusCode: 400,
body: JSON.stringify({ message: "Error with DB: " + error })
};
}
};
module.exports = { handler };
55 changes: 55 additions & 0 deletions aws/src/lambdas/getBlockedDomains/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import { APIGatewayEvent } from 'aws-lambda';
import { createConnection, RowDataPacket } from 'mysql2/promise';

const dbConfig = {
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME,
};

const handler = async (event: APIGatewayEvent) => {
console.log('EVENT: \n' + JSON.stringify(event, null, 2));
let request_body;
try {
if (event.body) {
request_body = JSON.parse(event.body)
} else {
console.log("No body found");
return {
statusCode: 400,
body: JSON.stringify({ message: "No body found" })
};
}
} catch (error) {
console.error("Invalid JSON format", error);
return {
statusCode: 400,
body: JSON.stringify({ message: "Invalid JSON format" }),
};
}

const { uuid } = request_body;
const connection = await createConnection(dbConfig);;
try {
const [rows] = await connection.execute<RowDataPacket[]>(
'SELECT domain FROM blocked_domains WHERE uuid = ?;',
[uuid]
);
console.log(rows);
await connection.end();
const domains = rows.map(row => row.domain);
return {
statusCode: 200,
body: JSON.stringify(domains)
}
} catch (error) {
console.error("Error inserting data:", error);
return {
statusCode: 400,
body: JSON.stringify({ message: "Error with DB: " + error })
};
}
}

module.exports = { handler };
14 changes: 14 additions & 0 deletions aws/src/lambdas/getBlockedDomains/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"scripts": {
"build": "npx tsc",
"zip": "(zip getBlockedDomains.zip index.js node_modules || powershell Compress-Archive -Path index.js, node_modules -DestinationPath getBlockedDomains.zip)",
"move": "(mv getBlockedDomains.zip ../../terraform || powershell Move-Item getBlockedDomains.zip ../../terraform)"
},
"devDependencies": {
"@types/aws-lambda": "^8.10.147",
"typescript": "^5.7.3"
},
"dependencies": {
"mysql2": "^3.13.0"
}
}
11 changes: 11 additions & 0 deletions aws/src/lambdas/getBlockedDomains/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"compilerOptions": {
"target": "ES2020",
"module": "CommonJS",
"lib": ["ES2020"],
"moduleResolution": "Node",
"rootDir": "./",
"strict": true,
"esModuleInterop": true
}
}
51 changes: 51 additions & 0 deletions aws/src/lambdas/insertBlockedDomain/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const promise_1 = require("mysql2/promise");
const dbConfig = {
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME,
};
const handler = async (event) => {
console.log('EVENT: \n' + JSON.stringify(event, null, 2));
let request_body;
try {
if (event.body) {
request_body = JSON.parse(event.body);
}
else {
console.log("No body found");
return {
statusCode: 400,
body: JSON.stringify({ message: "No body found" })
};
}
}
catch (error) {
console.error("Invalid JSON format", error);
return {
statusCode: 400,
body: JSON.stringify({ message: "Invalid JSON format" }),
};
}
const { uuid, domain } = request_body;
const connection = await (0, promise_1.createConnection)(dbConfig);
try {
const [rows] = await connection.execute('INSERT INTO blocked_domains (uuid, domain) VALUES (?, ?);', [uuid, domain]);
console.log(rows);
await connection.end();
return {
statusCode: 200,
body: JSON.stringify({ message: "Domain inserted successfully" })
};
}
catch (error) {
console.error("Error inserting data:", error);
return {
statusCode: 400,
body: JSON.stringify({ message: "Error with DB" })
};
}
};
module.exports = { handler };
54 changes: 54 additions & 0 deletions aws/src/lambdas/insertBlockedDomain/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import { APIGatewayEvent } from "aws-lambda";
import { createConnection } from 'mysql2/promise';

const dbConfig = {
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME,
};

const handler = async (event: APIGatewayEvent) => {
console.log('EVENT: \n' + JSON.stringify(event, null, 2));
let request_body;
try {
if (event.body) {
request_body = JSON.parse(event.body)
} else {
console.log("No body found");
return {
statusCode: 400,
body: JSON.stringify({ message: "No body found" })
};
}
} catch (error) {
console.error("Invalid JSON format", error);
return {
statusCode: 400,
body: JSON.stringify({ message: "Invalid JSON format" }),
};
}

const { uuid, domain } = request_body;
const connection = await createConnection(dbConfig);
try {
const [rows] = await connection.execute(
'INSERT INTO blocked_domains (uuid, domain) VALUES (?, ?);',
[uuid, domain]
);
console.log(rows);
await connection.end();
return {
statusCode: 200,
body: JSON.stringify({ message: "Domain inserted successfully" })
}
} catch (error) {
console.error("Error inserting data:", error);
return {
statusCode: 400,
body: JSON.stringify({ message: "Error with DB" })
};
}
}

module.exports = { handler };
14 changes: 14 additions & 0 deletions aws/src/lambdas/insertBlockedDomain/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"scripts": {
"build": "npx tsc",
"zip": "(zip insertBlockedDomain.zip index.js node_modules || powershell Compress-Archive -Path index.js, node_modules -DestinationPath insertBlockedDomain.zip)",
"move": "(mv insertBlockedDomain.zip ../../terraform || powershell Move-Item insertBlockedDomain.zip ../../terraform)"
},
"devDependencies": {
"@types/aws-lambda": "^8.10.147",
"typescript": "^5.7.3"
},
"dependencies": {
"mysql2": "^3.13.0"
}
}
11 changes: 11 additions & 0 deletions aws/src/lambdas/insertBlockedDomain/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"compilerOptions": {
"target": "ES2020",
"module": "CommonJS",
"lib": ["ES2020"],
"moduleResolution": "Node",
"rootDir": "./",
"strict": true,
"esModuleInterop": true
}
}
43 changes: 42 additions & 1 deletion aws/src/terraform/api_gateway.tf
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,20 @@ resource "aws_apigatewayv2_integration" "calchash_integration" {
integration_method = "POST"
}

resource "aws_apigatewayv2_integration" "getBlockedDomains_integration" {
api_id = aws_apigatewayv2_api.http_api.id
integration_type = "AWS_PROXY"
integration_uri = aws_lambda_function.getBlockedDomains_lambda.invoke_arn
integration_method = "POST"
}

resource "aws_apigatewayv2_integration" "insertBlockedDomain_integration" {
api_id = aws_apigatewayv2_api.http_api.id
integration_type = "AWS_PROXY"
integration_uri = aws_lambda_function.insertBlockedDomain_lambda.invoke_arn
integration_method = "POST"
}

resource "aws_apigatewayv2_route" "signup" {
api_id = aws_apigatewayv2_api.http_api.id
route_key = "POST /signup"
Expand Down Expand Up @@ -91,6 +105,18 @@ resource "aws_apigatewayv2_route" "calculateHash" {
target = "integrations/${aws_apigatewayv2_integration.calchash_integration.id}"
}

resource "aws_apigatewayv2_route" "getBlockedDomains" {
api_id = aws_apigatewayv2_api.http_api.id
route_key = "POST /getBlockedDomains"
target = "integrations/${aws_apigatewayv2_integration.getBlockedDomains_integration.id}"
}

resource "aws_apigatewayv2_route" "insertBlockedDomain" {
api_id = aws_apigatewayv2_api.http_api.id
route_key = "POST /insertBlockedDomain"
target = "integrations/${aws_apigatewayv2_integration.insertBlockedDomain_integration.id}"
}

resource "aws_lambda_permission" "apigw-lambda" {
statement_id = "AllowExecutionFromAPIGateway"
action = "lambda:InvokeFunction"
Expand Down Expand Up @@ -139,6 +165,22 @@ resource "aws_lambda_permission" "apigw-lambda_getUserInfo" {
source_arn = "arn:aws:execute-api:${var.AWS_REGION}:${var.AWS_ACCOUNT_ID}:${aws_apigatewayv2_api.http_api.id}/*"
}

resource "aws_lambda_permission" "apigw-lambda_getBlockedDomains" {
statement_id = "AllowExecutionFromAPIGateway"
action = "lambda:InvokeFunction"
function_name = aws_lambda_function.getBlockedDomains_lambda.function_name
principal = "apigateway.amazonaws.com"
source_arn = "arn:aws:execute-api:${var.AWS_REGION}:${var.AWS_ACCOUNT_ID}:${aws_apigatewayv2_api.http_api.id}/*"
}

resource "aws_lambda_permission" "apigw-lambda_insertBlockedDomain" {
statement_id = "AllowExecutionFromAPIGateway"
action = "lambda:InvokeFunction"
function_name = aws_lambda_function.insertBlockedDomain_lambda.function_name
principal = "apigateway.amazonaws.com"
source_arn = "arn:aws:execute-api:${var.AWS_REGION}:${var.AWS_ACCOUNT_ID}:${aws_apigatewayv2_api.http_api.id}/*"
}

resource "aws_apigatewayv2_route" "generate_password" {
api_id = aws_apigatewayv2_api.http_api.id
route_key = "POST /gen_pass"
Expand All @@ -152,7 +194,6 @@ resource "aws_apigatewayv2_integration" "genpass_integration" {
integration_method = "POST"
}


resource "aws_lambda_permission" "apigw-lambda_passgen" {
statement_id = "AllowExecutionFromAPIGateway"
action = "lambda:InvokeFunction"
Expand Down
Binary file added aws/src/terraform/calcHash.zip
Binary file not shown.
10 changes: 5 additions & 5 deletions aws/src/terraform/gen_pass.tf
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
resource "aws_lambda_function" "gen_pass_lambda" {
filename = "${path.cwd}/genPass.zip"
function_name = "gen_password"
role = aws_iam_role.iam_role2.arn
handler = "gen_password/index.handler"
runtime = "nodejs22.x"
filename = "${path.cwd}/genPass.zip"
function_name = "gen_password"
role = aws_iam_role.iam_role.arn
handler = "gen_password/index.handler"
runtime = "nodejs22.x"
source_code_hash = filebase64sha256("${path.cwd}/genPass.zip")
}
23 changes: 23 additions & 0 deletions aws/src/terraform/getBlockedDomains.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
resource "aws_lambda_function" "getBlockedDomains_lambda" {
filename = "${path.cwd}/getBlockedDomains.zip"
function_name = "getBlockedDomains"
role = aws_iam_role.iam_role.arn
handler = "getBlockedDomains/index.handler"
runtime = "nodejs22.x"
timeout = 29
source_code_hash = filebase64sha256("${path.cwd}/getBlockedDomains.zip")

vpc_config {
subnet_ids = ["subnet-08f7876b20ec2648d"]
security_group_ids = ["sg-097af9b3d4b9cc7a3"]
}

environment {
variables = {
DB_HOST = var.db_host
DB_USER = var.db_user
DB_PASS = var.db_pass
DB_NAME = var.db_name
}
}
}
Binary file added aws/src/terraform/getBlockedDomains.zip
Binary file not shown.
Loading
Loading