This commit is contained in:
Sofía Aritz 2024-06-30 18:46:35 +02:00
parent b0229c0817
commit e812c78d52
Signed by: sofia
GPG key ID: 90B5116E3542B28F
9 changed files with 59 additions and 11 deletions

View file

@ -17,6 +17,8 @@ for conditions such as dementia. Over time, the idea evolved and is now a genera
The Identity project is composed by a web-app and two servers. In the future, Docker containers may be built to ease the installation of this project. The Identity project is composed by a web-app and two servers. In the future, Docker containers may be built to ease the installation of this project.
The recommended Node.JS version is v21.5.0, others should also work.
### Development and local testing ### Development and local testing
#### `identity-web` #### `identity-web`

2
asset-api/.env.example Normal file
View file

@ -0,0 +1,2 @@
ASSET_API_ASSETS_FOLDER = "./.assets/"
ASSET_API_IDENTITY_API_ENDPOINT = "http://localhost:3000/"

View file

@ -14,3 +14,5 @@
.keys .keys
.assets .assets
.env

View file

@ -1,18 +1,19 @@
{ {
"name": "asset-api", "name": "asset-api",
"main": "index.js", "main": "src/index.js",
"type": "module", "type": "module",
"license": "AGPL-3.0-only", "license": "AGPL-3.0-only",
"packageManager": "yarn@4.3.0", "packageManager": "yarn@4.3.0",
"dependencies": { "dependencies": {
"@fastify/cors": "^9.0.1", "@fastify/cors": "^9.0.1",
"@fastify/multipart": "^8.3.0", "@fastify/multipart": "^8.3.0",
"dotenv": "^16.4.5",
"fastify": "^4.28.0", "fastify": "^4.28.0",
"mime": "^4.0.3", "mime": "^4.0.3",
"uuid": "^10.0.0" "uuid": "^10.0.0"
}, },
"scripts": { "scripts": {
"start": "node index.js", "start": "node src/index.js",
"lint:fix": "eslint --fix && prettier . --write", "lint:fix": "eslint --fix && prettier . --write",
"lint": "eslint && prettier . --check" "lint": "eslint && prettier . --check"
}, },

38
asset-api/src/consts.js Normal file
View file

@ -0,0 +1,38 @@
// Identity. Store your memories and mental belongings
// Copyright (C) 2024 Sofía Aritz
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published
// by the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
import "dotenv/config";
const REQUIRED_VARS = [
"ASSET_API_ASSETS_FOLDER",
"ASSET_API_IDENTITY_API_ENDPOINT"
];
REQUIRED_VARS.forEach((element) => {
if (
process.env[element] == null ||
(typeof process.env[element] === "string" && process.env[element].length === 0)
) {
console.error(`Required environment variable was not set: ${element}`);
process.exit(1);
}
});
export const ASSET_API_LANDING_MESSAGE = process.env["ASSET_API_LANDING_MESSAGE"] || "asset-api v0.0.1";
export const LISTEN_PORT = Number(process.env["ASSET_API_LISTEN_PORT"]) || 3001;
export const ASSETS_FOLDER = process.env["ASSET_API_ASSETS_FOLDER"];
export const IDENTITY_API_ENDPOINT = process.env["ASSET_API_IDENTITY_API_ENDPOINT"];
export const M2M_ALGORITHM = process.env["ASSET_API_M2M_ALGORITHM"] || "RSA-SHA512";

View file

@ -24,19 +24,14 @@ import mime from "mime";
import { promisify } from "node:util"; import { promisify } from "node:util";
import { pipeline } from "node:stream"; import { pipeline } from "node:stream";
import cors from "@fastify/cors"; import cors from "@fastify/cors";
import { M2M_ALGORITHM, ASSETS_FOLDER, ASSET_API_LANDING_MESSAGE, IDENTITY_API_ENDPOINT } from "./consts.js";
const M2M_ALGORITHM = "RSA-SHA512";
const { private: M2M_PRIVATE_KEY, public: M2M_PUBLIC_KEY } = loadM2MKeys(); const { private: M2M_PRIVATE_KEY, public: M2M_PUBLIC_KEY } = loadM2MKeys();
if (M2M_PRIVATE_KEY == null || M2M_PUBLIC_KEY == null) { if (M2M_PRIVATE_KEY == null || M2M_PUBLIC_KEY == null) {
console.error("Couldn't load keys"); console.error("Couldn't load keys");
process.exit(1); process.exit(1);
} }
const ASSETS_FOLDER = "./.assets/";
const ASSET_API_LANDING_MESSAGE = "asset-api v1.0.0";
const IDENTITY_API_ENDPOINT = "http://localhost:3000";
const app = new Fastify({ const app = new Fastify({
logger: true, logger: true,
}); });

View file

@ -296,6 +296,7 @@ __metadata:
"@eslint/js": "npm:^9.5.0" "@eslint/js": "npm:^9.5.0"
"@fastify/cors": "npm:^9.0.1" "@fastify/cors": "npm:^9.0.1"
"@fastify/multipart": "npm:^8.3.0" "@fastify/multipart": "npm:^8.3.0"
dotenv: "npm:^16.4.5"
eslint: "npm:9.x" eslint: "npm:9.x"
fastify: "npm:^4.28.0" fastify: "npm:^4.28.0"
globals: "npm:^15.5.0" globals: "npm:^15.5.0"
@ -433,6 +434,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"dotenv@npm:^16.4.5":
version: 16.4.5
resolution: "dotenv@npm:16.4.5"
checksum: 10c0/48d92870076832af0418b13acd6e5a5a3e83bb00df690d9812e94b24aff62b88ade955ac99a05501305b8dc8f1b0ee7638b18493deb6fe93d680e5220936292f
languageName: node
linkType: hard
"escape-string-regexp@npm:^4.0.0": "escape-string-regexp@npm:^4.0.0":
version: 4.0.0 version: 4.0.0
resolution: "escape-string-regexp@npm:4.0.0" resolution: "escape-string-regexp@npm:4.0.0"

View file

@ -1,4 +1,4 @@
IDENTITY_API_LANDING_MESSAGE = "identity-api v1.0.0" IDENTITY_API_LANDING_MESSAGE = "identity-api v0.0.1"
IDENTITY_API_JWT_SECRET = "cc7e0d44fd473002f1c42167459001140ec6389b7353f8088f4d9a95f2f596f2" IDENTITY_API_JWT_SECRET = "cc7e0d44fd473002f1c42167459001140ec6389b7353f8088f4d9a95f2f596f2"
IDENTITY_API_JWT_ALG = "HS256" IDENTITY_API_JWT_ALG = "HS256"
IDENTITY_API_ASSET_API_ENDPOINT = "http://localhost:3001" IDENTITY_API_ASSET_API_ENDPOINT = "http://localhost:3001"

View file

@ -34,7 +34,7 @@ REQUIRED_VARS.forEach((element) => {
} }
}); });
export const IDENTITY_API_LANDING_MESSAGE = process.env["IDENTITY_API_LANDING_MESSAGE"] || "identity-api v1.0.0"; export const IDENTITY_API_LANDING_MESSAGE = process.env["IDENTITY_API_LANDING_MESSAGE"] || "identity-api v0.0.1";
export const JWT_SECRET = new TextEncoder().encode(process.env["IDENTITY_API_JWT_SECRET"]); export const JWT_SECRET = new TextEncoder().encode(process.env["IDENTITY_API_JWT_SECRET"]);
export const JWT_ALG = process.env["IDENTITY_API_JWT_ALG"]; export const JWT_ALG = process.env["IDENTITY_API_JWT_ALG"];
export const LISTEN_PORT = Number(process.env["IDENTITY_API_LISTEN_PORT"]) || 3000; export const LISTEN_PORT = Number(process.env["IDENTITY_API_LISTEN_PORT"]) || 3000;