First Commit
This commit is contained in:
		
							
								
								
									
										6
									
								
								.editorconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								.editorconfig
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
			
		||||
root=true
 | 
			
		||||
[*]
 | 
			
		||||
charset = utf-8
 | 
			
		||||
indent_size = 3
 | 
			
		||||
indent_style = space
 | 
			
		||||
insert_final_newline = true
 | 
			
		||||
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
node_modules/
 | 
			
		||||
lib/
 | 
			
		||||
config.ini
 | 
			
		||||
							
								
								
									
										2132
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										2132
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										35
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
   "name": "@hibas123/issc",
 | 
			
		||||
   "version": "1.0.0",
 | 
			
		||||
   "description": "",
 | 
			
		||||
   "main": "lib/index.js",
 | 
			
		||||
   "bin": "lib/index.js",
 | 
			
		||||
   "scripts": {
 | 
			
		||||
      "dev": "nodemon -e ts --exec ts-node src/index.ts",
 | 
			
		||||
      "build": "tsc && pkg ."
 | 
			
		||||
   },
 | 
			
		||||
   "pkg": {
 | 
			
		||||
      "targets": [
 | 
			
		||||
         "node12-linux"
 | 
			
		||||
      ]
 | 
			
		||||
   },
 | 
			
		||||
   "author": "Fabian Stamm <dev@fabianstamm.de>",
 | 
			
		||||
   "license": "ISC",
 | 
			
		||||
   "devDependencies": {
 | 
			
		||||
      "@types/ini": "^1.3.30",
 | 
			
		||||
      "@types/node": "^14.0.23",
 | 
			
		||||
      "@types/nodemailer": "^6.4.0",
 | 
			
		||||
      "@types/yargs": "^15.0.5",
 | 
			
		||||
      "nodemon": "^2.0.4",
 | 
			
		||||
      "pkg": "^4.4.9",
 | 
			
		||||
      "ts-node": "^8.10.2",
 | 
			
		||||
      "typescript": "^3.9.7"
 | 
			
		||||
   },
 | 
			
		||||
   "dependencies": {
 | 
			
		||||
      "@hibas123/nodelogging": "^2.4.5",
 | 
			
		||||
      "get-stdin": "^8.0.0",
 | 
			
		||||
      "ini": "^1.3.5",
 | 
			
		||||
      "nodemailer": "^6.4.10",
 | 
			
		||||
      "yargs": "^15.4.1"
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										113
									
								
								src/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								src/index.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,113 @@
 | 
			
		||||
process.env.LOGGING_NO_DEFAULT = "true";
 | 
			
		||||
import { LoggingBase, ConsoleAdapter } from "@hibas123/logging";
 | 
			
		||||
 | 
			
		||||
import * as yargs from "yargs";
 | 
			
		||||
 | 
			
		||||
const options = yargs
 | 
			
		||||
   .option("verbose", {
 | 
			
		||||
      alias: "v",
 | 
			
		||||
      type: "boolean",
 | 
			
		||||
      description: "Print debug informations",
 | 
			
		||||
      required: false,
 | 
			
		||||
   })
 | 
			
		||||
   .option("config", {
 | 
			
		||||
      alias: "c",
 | 
			
		||||
      type: "string",
 | 
			
		||||
      default: "/etc/issc.ini",
 | 
			
		||||
      description: "Config file location",
 | 
			
		||||
   })
 | 
			
		||||
   .option("to", {
 | 
			
		||||
      alias: "t",
 | 
			
		||||
      description: "The receiver of the email",
 | 
			
		||||
      type: "string",
 | 
			
		||||
      required: true,
 | 
			
		||||
   })
 | 
			
		||||
   .option("subject", {
 | 
			
		||||
      alias: "s",
 | 
			
		||||
      description: "Subject of the mail",
 | 
			
		||||
      type: "string",
 | 
			
		||||
      required: false,
 | 
			
		||||
   }).argv;
 | 
			
		||||
 | 
			
		||||
const Logging = new LoggingBase({
 | 
			
		||||
   console: false,
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
if (options.verbose) {
 | 
			
		||||
   Logging.addAdapter(new ConsoleAdapter(true));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Logging.log("Starting INSANLY SIMPLE SMTP CLIENT");
 | 
			
		||||
 | 
			
		||||
const EXAMPLE_CONFIG = `
 | 
			
		||||
[smtp]
 | 
			
		||||
server=
 | 
			
		||||
from=
 | 
			
		||||
username=
 | 
			
		||||
password=
 | 
			
		||||
port=
 | 
			
		||||
`;
 | 
			
		||||
 | 
			
		||||
import * as nm from "nodemailer";
 | 
			
		||||
 | 
			
		||||
import * as ini from "ini";
 | 
			
		||||
import { readFileSync, fstat, existsSync } from "fs";
 | 
			
		||||
 | 
			
		||||
Logging.log("Loading configuration");
 | 
			
		||||
 | 
			
		||||
if (!existsSync(options.config)) {
 | 
			
		||||
   console.log(
 | 
			
		||||
      "Add configuration to /etc/issc.ini or set your location by using --config <path>. \n\n Example config: \n\n" +
 | 
			
		||||
         EXAMPLE_CONFIG
 | 
			
		||||
   );
 | 
			
		||||
   process.exit(1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const config = ini.parse(readFileSync(options.config, "utf-8"));
 | 
			
		||||
Logging.log("Creating Transport");
 | 
			
		||||
const transport = nm.createTransport({
 | 
			
		||||
   host: config.smtp.server,
 | 
			
		||||
   port: Number(config.smtp.port || 587),
 | 
			
		||||
   secure: false,
 | 
			
		||||
   auth: {
 | 
			
		||||
      user: config.smtp.username,
 | 
			
		||||
      pass: config.smtp.password,
 | 
			
		||||
      method: "PLAIN",
 | 
			
		||||
   },
 | 
			
		||||
   logger: {
 | 
			
		||||
      fatal: Logging.errorMessage,
 | 
			
		||||
      trace: Logging.log,
 | 
			
		||||
      level: () => undefined,
 | 
			
		||||
      debug: Logging.debug,
 | 
			
		||||
      error: Logging.errorMessage,
 | 
			
		||||
      info: Logging.log,
 | 
			
		||||
      warn: Logging.warn,
 | 
			
		||||
   },
 | 
			
		||||
});
 | 
			
		||||
Logging.log("Verifying transport");
 | 
			
		||||
 | 
			
		||||
import getstdin = require("get-stdin");
 | 
			
		||||
 | 
			
		||||
transport
 | 
			
		||||
   .verify()
 | 
			
		||||
   .then(async () => {
 | 
			
		||||
      Logging.log("Reading STDIN");
 | 
			
		||||
      const text = await getstdin();
 | 
			
		||||
      Logging.log("Sending mail");
 | 
			
		||||
      const res = await transport.sendMail({
 | 
			
		||||
         from: config.smtp.from,
 | 
			
		||||
         to: options.to,
 | 
			
		||||
         subject: options.subject,
 | 
			
		||||
         text,
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      console.log("Message sent");
 | 
			
		||||
   })
 | 
			
		||||
   .catch((err) => {
 | 
			
		||||
      Logging.error(err);
 | 
			
		||||
      console.log("Some error occured!", err.message);
 | 
			
		||||
   })
 | 
			
		||||
   .finally(() => {
 | 
			
		||||
      transport.close();
 | 
			
		||||
      process.exit();
 | 
			
		||||
   });
 | 
			
		||||
							
								
								
									
										11
									
								
								tsconfig.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								tsconfig.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
			
		||||
{
 | 
			
		||||
   "compilerOptions": {
 | 
			
		||||
      "outDir": "lib/",
 | 
			
		||||
      "target": "ESNext",
 | 
			
		||||
      "module": "CommonJS",
 | 
			
		||||
      "moduleResolution": "Node",
 | 
			
		||||
      "resolveJsonModule": true,
 | 
			
		||||
      "sourceMap": true
 | 
			
		||||
   },
 | 
			
		||||
   "include": ["src/"]
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user