ALL OF IT

This commit is contained in:
Jack 2025-03-06 20:55:36 +00:00
commit 6cc41936a4
8 changed files with 464 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/node_modules

29
Dockerfile Normal file
View File

@ -0,0 +1,29 @@
FROM node:18-alpine
RUN apk update && apk upgrade
WORKDIR /opt/app
COPY ./email.html /opt/app/
COPY ./jobChecker.js /opt/app/
COPY package.json /opt/app/
COPY package-lock.json /opt/app/
RUN npm install
#COPY ./crontab /etc/cron.d/crontab
#RUN chmod 0644 /etc/cron.d/crontab
#RUN /usr/bin/crontab /etc/cron.d/crontab
#RUN apk add sudo bash
RUN touch /var/log/cron.log
#CMD bash -c "crond -f -d 8"
CMD node jobChecker.js

1
crontab Normal file
View File

@ -0,0 +1 @@
0 0 * * WED node /opt/app/jobChecker.js

55
email.html Normal file
View File

@ -0,0 +1,55 @@
<!DOCTYPE html>
<html>
<head>
<style>
body {
margin: 0;
font-family: Arial, Helvetica, sans-serif;
background-image: url("https://tgj.services/assets/ahhhh-its-wednesday-my-dudes.gif")
}
button{
transition-duration: 0.15s;
border-radius: 4px;
padding: 6px 24px;
background-color: skyblue;
color:black;
border: 2px solid slategrey;
}
.main{
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
background-color: whitesmoke;
border-radius: 20px;
padding: 10px;
width: 500px;
text-align: center;
}
.addressPanel{
float:left;
text-align: left;
max-width: 200px;
}
</style>
</head>
<body>
<div class="main">
<h1>
<u>ITS WEDNESDAY MY DUDES!!!!</u>
</h1>
<div style=width:100%;height:240px;>
<img src="https://tgj.services/assets/wednesday.jpg" width="100%" height="100%"><img>
</div>
<hr>
<br>
<div>
<p>
ITS WEDNESDAY
</p>
</div>
</div>
</body>
</html>

106
jobChecker.js Normal file
View File

@ -0,0 +1,106 @@
var nodemailer = require("nodemailer");
var handlebars = require("handlebars");
const cron = require('node-cron');
var fs = require("fs");
let transporter = nodemailer.createTransport({
pool: true,
host: "mail.tgj.services",
port: 587,
secure: false, // use TLS
auth: {
user: "admin@tgj.services",
pass: "&,kErryPRominSBulOrTArDliaThstINtS,70",
},
tls: {
ciphers:'SSLv3'
}
});
var prefix = "/opt/app/"
var readHTMLFile = function(path, callback) {
fs.readFile(path, {encoding: 'utf-8'}, function (err, html) {
if (err) {
throw err;
callback(err);
}
else {
callback(null, html);
}
});
};
var mysql = require('mysql');
const { exit } = require("process");
var con = mysql.createConnection({
host: "db.tgj.services",
user: "wednesday",
password: "ki5htfYWwWUCdfqu",
database: "wednesday_db"
});
console.log("waiting for wednesday!")
con.connect(function(err) {
if (err) throw err;
//console.log("You are connected!");
console.log("connected waiting for wednesday!")
cron.schedule('0 0 * * WED', function() {
console.log('running a task every wed');
check();
});
});
var count = 0;
//console.log(mURL);
function check(){
query = "SELECT user_email FROM users WHERE need_wed = '1'";
con.query(query, function(error,results,fields){
if(error) throw error;
console.log(results);
results.forEach(row => {
var htmlToSend;
readHTMLFile(prefix+"email.html",function(err,html){
//console.log(html)
//console.log(randURL)
var template = handlebars.compile(html);
var replacements = {
htmlURL: "https://tgj.services",
};
htmlToSend = template(replacements);
var mailOptions = {
from: 'wednesday@tgj.services',
to: row["user_email"],
subject: "BACK BY POPULAR DEMAND: IT'S WEDNESDAY MY DUUDES!",
html: htmlToSend
};
//console.log(htmlToSend)
console.log("Job Finished! - " + row["user_email"]);
SendMail(mailOptions,results);
});
count += 1;
});
});
}
function SendMail(options,results){
transporter.sendMail(options, function(error, info){
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
console.log(count)
}
function disconnect(){
con.end();
}

238
package-lock.json generated Normal file
View File

@ -0,0 +1,238 @@
{
"name": "wednesday-emails",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"dependencies": {
"cron": "^4.1.0",
"handlebars": "^4.7.8",
"msql": "^1.0.3",
"mysql": "^2.18.1",
"node-cron": "^3.0.3",
"nodemailer": "^6.10.0"
}
},
"node_modules/@types/luxon": {
"version": "3.4.2",
"resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.4.2.tgz",
"integrity": "sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==",
"license": "MIT"
},
"node_modules/bignumber.js": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
"integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==",
"license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
"license": "MIT"
},
"node_modules/cron": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/cron/-/cron-4.1.0.tgz",
"integrity": "sha512-wmcuXr2qP0UZStYgwruG6jC2AYSO9n5VMm2t93hmcEXEjWY3S2bsXe3sfGUrTs/uQ1AvRCrZ0Pp9Q032L/V9tw==",
"license": "MIT",
"dependencies": {
"@types/luxon": "~3.4.0",
"luxon": "~3.5.0"
},
"engines": {
"node": ">=18.x"
}
},
"node_modules/handlebars": {
"version": "4.7.8",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
"integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
"license": "MIT",
"dependencies": {
"minimist": "^1.2.5",
"neo-async": "^2.6.2",
"source-map": "^0.6.1",
"wordwrap": "^1.0.0"
},
"bin": {
"handlebars": "bin/handlebars"
},
"engines": {
"node": ">=0.4.7"
},
"optionalDependencies": {
"uglify-js": "^3.1.4"
}
},
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"license": "ISC"
},
"node_modules/isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
"license": "MIT"
},
"node_modules/luxon": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz",
"integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==",
"license": "MIT",
"engines": {
"node": ">=12"
}
},
"node_modules/minimist": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/msql": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/msql/-/msql-1.0.3.tgz",
"integrity": "sha512-lzO7VQjSWu38g5iHkqOV9qSS5LhiWLFRKeXuEZOwfAXn2vOdLnEK+KoOLRn3YNogegXacG2A75YwmvDqH81S7A==",
"license": "MIT"
},
"node_modules/mysql": {
"version": "2.18.1",
"resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz",
"integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==",
"license": "MIT",
"dependencies": {
"bignumber.js": "9.0.0",
"readable-stream": "2.3.7",
"safe-buffer": "5.1.2",
"sqlstring": "2.3.1"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/neo-async": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"license": "MIT"
},
"node_modules/node-cron": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/node-cron/-/node-cron-3.0.3.tgz",
"integrity": "sha512-dOal67//nohNgYWb+nWmg5dkFdIwDm8EpeGYMekPMrngV3637lqnX0lbUcCtgibHTz6SEz7DAIjKvKDFYCnO1A==",
"license": "ISC",
"dependencies": {
"uuid": "8.3.2"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/nodemailer": {
"version": "6.10.0",
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.10.0.tgz",
"integrity": "sha512-SQ3wZCExjeSatLE/HBaXS5vqUOQk6GtBdIIKxiFdmm01mOQZX/POJkO3SUX1wDiYcwUOJwT23scFSC9fY2H8IA==",
"license": "MIT-0",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"license": "MIT"
},
"node_modules/readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
"license": "MIT",
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"node_modules/safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"license": "MIT"
},
"node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/sqlstring": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
"integrity": "sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"license": "MIT",
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/uglify-js": {
"version": "3.19.3",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz",
"integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==",
"license": "BSD-2-Clause",
"optional": true,
"bin": {
"uglifyjs": "bin/uglifyjs"
},
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"license": "MIT"
},
"node_modules/uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"license": "MIT",
"bin": {
"uuid": "dist/bin/uuid"
}
},
"node_modules/wordwrap": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
"integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
"license": "MIT"
}
}
}

10
package.json Normal file
View File

@ -0,0 +1,10 @@
{
"dependencies": {
"cron": "^4.1.0",
"handlebars": "^4.7.8",
"msql": "^1.0.3",
"mysql": "^2.18.1",
"node-cron": "^3.0.3",
"nodemailer": "^6.10.0"
}
}

24
workflows/build.yaml Normal file
View File

@ -0,0 +1,24 @@
name: Build and push image
on:
push:
branches: [main]
jobs:
Build:
runs-on: ubuntu-latest
steps:
- name: Check out repository code
uses: actions/checkout@v3
with:
token: ${{ gitsecrets.token }}
- name: Install
run: curl -fsSL get.docker.com | bash
- name: Clone
run: git clone https://git.tgj.services/thatguyjack/wednesday-emails.git .
- name: Login
run: echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login https://git.tgj.services -u ThatGuyJack --password-stdin
- name: Buildx Container
run: docker buildx create --name buildx --driver=docker-container
- name: Build wednesday
run: docker buildx build --builder=buildx --platform=linux/amd64 . -t git.tgj.services/thatguyjack/wednesday-emails:latest --push