From 5833d3d08db423891257e6e3708208191b541d98 Mon Sep 17 00:00:00 2001 From: Josef Date: Tue, 11 Nov 2025 14:13:39 +0100 Subject: [PATCH] Add Email Service --- browser/xhttp/Request.ts | 2 +- node/users/RequestHandler.ts | 2 +- node/users/UserManagementServerSettings.ts | 1 + node/users/email/RokojoriEmail.ts | 42 +++++++++++++++++++ node/users/handlers/info.ts | 2 +- node/users/handlers/login.ts | 2 +- node/users/handlers/logout.ts | 2 +- node/users/handlers/signup.ts | 3 +- .../users/requirements/user/UserIsLoggedIn.ts | 2 +- node/web/Request.ts | 41 ++++++++++++++++++ 10 files changed, 91 insertions(+), 8 deletions(-) create mode 100644 node/users/email/RokojoriEmail.ts create mode 100644 node/web/Request.ts diff --git a/browser/xhttp/Request.ts b/browser/xhttp/Request.ts index d8fd255..2eb17d9 100644 --- a/browser/xhttp/Request.ts +++ b/browser/xhttp/Request.ts @@ -10,7 +10,7 @@ export class Request console.log( "post", url, ">>", input); xhr.open( "POST", url, true ); - + xhr.setRequestHeader( "Content-Type", "application/json"); xhr.responseType = "text"; xhr.onload= diff --git a/node/users/RequestHandler.ts b/node/users/RequestHandler.ts index eb8db50..673994b 100644 --- a/node/users/RequestHandler.ts +++ b/node/users/RequestHandler.ts @@ -150,7 +150,7 @@ export abstract class RequestHandler getUser():Promise { let request = this._currentRequest; - let requestBody = JSON.parse( request.body as string ); + let requestBody = request.body; let tokenData = requestBody as { token:string }; let tokenID = tokenData.token; diff --git a/node/users/UserManagementServerSettings.ts b/node/users/UserManagementServerSettings.ts index 6a9c438..eb9cbbb 100644 --- a/node/users/UserManagementServerSettings.ts +++ b/node/users/UserManagementServerSettings.ts @@ -10,6 +10,7 @@ export class UserManagementServerSettings isDebugMode:boolean = false; httpsKeyPath:string; httpsCertPath:string; + emailKey:string; // Paths rootPath:string; diff --git a/node/users/email/RokojoriEmail.ts b/node/users/email/RokojoriEmail.ts new file mode 100644 index 0000000..053130b --- /dev/null +++ b/node/users/email/RokojoriEmail.ts @@ -0,0 +1,42 @@ +import { Message } from "../../../browser/messages/Message"; +import { RJLog } from "../../log/RJLog"; +import { Request } from "../../web/Request"; +import { EmailService } from "./EmailService"; + +export class EmailData +{ + to:string; + subject:string; + message:string; + reply:string; + key:string; +} + +export class RokojoriEmail extends EmailService +{ + _key:string; + + constructor( key:string ) + { + super(); + this._key = key; + } + + async send( reply:string, to:string, subject:string, message:string ):Promise + { + let emailData = + { + to: to, + subject: subject, + message: message, + reply: reply, + key: this._key + }; + + let url = "https://rokojori.com/_php/backend/email.php"; + + let result = await Request.postJSON( url, emailData ); + + RJLog.log( "Email", to, subject, ">>", result ); + } +} \ No newline at end of file diff --git a/node/users/handlers/info.ts b/node/users/handlers/info.ts index 294a4a4..3a8476a 100644 --- a/node/users/handlers/info.ts +++ b/node/users/handlers/info.ts @@ -32,7 +32,7 @@ export class InfoHandler extends RequestHandler async _handle( request:FastifyRequest, reply:FastifyReply ) { - let requestBody = JSON.parse( request.body as string ); + let requestBody = request.body; let tokenData = requestBody as { token:string }; let tokenID = tokenData.token; diff --git a/node/users/handlers/login.ts b/node/users/handlers/login.ts index 90574e3..ce0a098 100644 --- a/node/users/handlers/login.ts +++ b/node/users/handlers/login.ts @@ -17,7 +17,7 @@ export class LoginHandler extends RequestHandler async _handle( request:FastifyRequest, reply:FastifyReply ) { - let requestBody = JSON.parse( request.body as string ); + let requestBody = request.body; let { email, password, userName } = requestBody as { email: string; password: string; userName: string }; if ( ! email || ! password ) diff --git a/node/users/handlers/logout.ts b/node/users/handlers/logout.ts index 933479a..ec5415e 100644 --- a/node/users/handlers/logout.ts +++ b/node/users/handlers/logout.ts @@ -18,7 +18,7 @@ export class LogoutHandler extends RequestHandler async _handle( request:FastifyRequest, reply:FastifyReply ) { - let requestBody = JSON.parse( request.body as string ); + let requestBody = request.body; let tokenData = requestBody as { token:string }; let tokenID = tokenData.token; diff --git a/node/users/handlers/signup.ts b/node/users/handlers/signup.ts index e9d8693..73896d2 100644 --- a/node/users/handlers/signup.ts +++ b/node/users/handlers/signup.ts @@ -30,8 +30,7 @@ export class SignUpHandler extends RequestHandler async _handle( request:FastifyRequest, reply:FastifyReply ) { - RJLog.log( "Body:", request.body ); - let requestBody = JSON.parse( request.body as string ); + let requestBody = request.body; let { email, password, userName } = requestBody as { email: string; password: string; userName: string }; diff --git a/node/users/requirements/user/UserIsLoggedIn.ts b/node/users/requirements/user/UserIsLoggedIn.ts index 059d3cb..8117f5b 100644 --- a/node/users/requirements/user/UserIsLoggedIn.ts +++ b/node/users/requirements/user/UserIsLoggedIn.ts @@ -7,7 +7,7 @@ export class UserIsLoggedIn extends RequestRequirement async handle( request:FastifyRequest, reply:FastifyReply ):Promise { - let requestBody = JSON.parse( request.body as string ); + let requestBody = request.body; let tokenData = requestBody as { token:string }; if ( ! tokenData ) diff --git a/node/web/Request.ts b/node/web/Request.ts new file mode 100644 index 0000000..bed5cc0 --- /dev/null +++ b/node/web/Request.ts @@ -0,0 +1,41 @@ +export class Request +{ + + static async getJSON(url: string): Promise + { + let result = await fetch( url, + { + method: 'GET', + headers: { 'Accept': 'application/json' } + } + ); + + if ( ! result.ok ) + { + throw new Error( `GET ${url} failed: ${result.status} ${result.statusText}` ); + } + + return result.json() as Promise; + } + + static async postJSON(url: string, input: I): Promise + { + let result = await fetch( + url, + { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json' + }, + body: JSON.stringify( input ) + }); + + if ( ! result.ok ) + { + throw new Error( `POST ${url} failed: ${result.status} ${result.statusText}` ); + } + + return result.json() as Promise; + } +} \ No newline at end of file