ALL OF IT
This commit is contained in:
commit
6cc41936a4
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/node_modules
|
29
Dockerfile
Normal file
29
Dockerfile
Normal 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
|
55
email.html
Normal file
55
email.html
Normal 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
106
jobChecker.js
Normal 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
238
package-lock.json
generated
Normal 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
10
package.json
Normal 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
24
workflows/build.yaml
Normal 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
|
Loading…
x
Reference in New Issue
Block a user