From 8f1aec6d42a0a5b0611651cac2a294e446ddde2d Mon Sep 17 00:00:00 2001
From: xFuney <56867550+xFuney@users.noreply.github.com>
Date: Sat, 9 Jan 2021 13:28:39 +0000
Subject: [PATCH] add ability for user to override skin and cape without sysop
intervention
---
index.js | 241 +++++++++++++++++++++++++++++++++++-
package-lock.json | 95 ++++++++++++++
package.json | 4 +
static/auth.html | 40 ++++++
static/index.html | 45 ++++++-
static/skin-previewer.html | 2 +
static/style-dark.css | 76 ++++++++++++
static/tile_dark.png | Bin 0 -> 54798 bytes
templates/cape_change.html | 40 ++++++
templates/failure.html | 35 ++++++
templates/landing.html | 49 ++++++++
templates/size_too_big.html | 37 ++++++
templates/skin_change.html | 40 ++++++
templates/success.html | 35 ++++++
14 files changed, 735 insertions(+), 4 deletions(-)
create mode 100644 static/auth.html
create mode 100644 static/skin-previewer.html
create mode 100644 static/style-dark.css
create mode 100644 static/tile_dark.png
create mode 100644 templates/cape_change.html
create mode 100644 templates/failure.html
create mode 100644 templates/landing.html
create mode 100644 templates/size_too_big.html
create mode 100644 templates/skin_change.html
create mode 100644 templates/success.html
diff --git a/index.js b/index.js
index a1fe064..9b6dd52 100644
--- a/index.js
+++ b/index.js
@@ -6,6 +6,10 @@
const path = require('path');
const fs = require('fs');
const request = require('sync-request');
+const fetch = require('node-fetch');
+var session = require('express-session');
+const fileUpload = require('express-fileupload');
+var sizeOf = require('image-size');
function downloadFileSync(url) {
return require('child_process')
@@ -371,6 +375,23 @@ function get_cape(uname) {
}
}
+// oauth_to_uuid
+// Purpose: Uses mc-oauth.net to translate an OAuth code into a UUID.
+// Returns: Nothing - this is a callback based function.
+
+function oAuthToUUID(token, cb) {
+ return fetch('https://mc-oauth.net/api/api?token', {
+ method: "GET",
+ headers: {
+ "token": token
+ }
+ }).then(response => {
+ return response.json();
+ }).then(json => {
+ cb(json);
+ });
+}
+
// rm_dir
// Purpose: removes all files in a directory.
// Returns: nothing.
@@ -417,16 +438,232 @@ rm_dir(Cape_CacheLocation);
console.log('[CACHE] Cape cache wipe completed.')
// Initialise express.
-const express = require('express')
+const express = require('express');
+const { O_TRUNC } = require('constants');
+const { resourceUsage } = require('process');
const app = express()
-const port = 80
+const port = process.env.NODE_PORT || 6481
+
+// Initialise session cookie middleware.
+app.set('trust proxy', 1) // trust first proxy
+app.use(session({
+ secret: process.env.COOKIE_SECRET,
+ resave: false,
+ saveUninitialized: true,
+ cookie: { secure: false, maxAge: 7200000 }
+}))
// Initialise static folders.
app.use(express.static('static'))
app.use('/MinecraftResources', express.static('resources'))
+// Initialise middleware.
+app.use(express.urlencoded());
+
+app.use(fileUpload());
+
// Initialise routers.
+// POST /authenticate
+// Parameters:
+// code: OAuth code from MC-OAuth.
+// Returns:
+// 301 redirect to appropriate page.
+
+app.post('/authenticate', (req,res) => {
+ oAuthToUUID(req.body.code, (response) => {
+ if (response.status !== "fail") {
+ // add to session
+ req.session.username = response.username
+ req.session.uuid = response.uuid
+
+ // redirect
+ res.redirect('/skin_landing')
+ } else {
+ // throw back to auth page.
+ res.redirect('/auth.html')
+ }
+ })
+})
+
+// GET /end_session
+// No parameters.
+// Returns:
+// redirect to home page with user session expired.
+
+app.get('/end_session', (req,res) => {
+ req.session.regenerate(function(err) {
+ // will have a new session here
+ res.redirect('/')
+ })
+})
+
+// GET /skin_landing
+// No parameters.
+// Returns:
+// landing page
+
+app.get('/skin_landing', (req,res) => {
+ if (req.session.username !== undefined) {
+ let temp = fs.readFileSync(path.join(__dirname, 'templates', 'landing.html')).toString();
+ temp = temp.replace('%%USERNAME%%', req.session.username)
+ temp = temp.replace('%%USERNAME%%', req.session.username)
+ temp = temp.replace('%%USERNAME%%', req.session.username)
+ temp = temp.replace('%%USERNAME%%', req.session.username)
+ temp = temp.replace('%%USERNAME%%', req.session.username)
+ temp = temp.replace('%%USERNAME%%', req.session.username)
+ res.send(temp)
+ } else {
+ res.redirect('/')
+ }
+})
+
+// GET /skin_change
+// No parameters
+// Returns:
+// skin changing page
+
+app.get('/skin_change', (req,res) => {
+ if (req.session.username !== undefined) {
+ let temp = fs.readFileSync(path.join(__dirname, 'templates', 'skin_change.html')).toString();
+ temp = temp.replace('%%USERNAME%%', req.session.username)
+ res.send(temp)
+ } else {
+ res.redirect('/')
+ }
+})
+
+// POST /upload_skin
+// No parameters.
+// Returns:
+// success or fail page
+
+app.post('/upload_skin', (req,res) => {
+ if (req.session.username == undefined) {
+ // Don't even look at it.
+ return res.redirect('/')
+ }
+
+ if (!req.files || Object.keys(req.files).length === 0) {
+ return res.redirect('/skin_change');
+ }
+
+ if (req.files.upload.mimetype != "image/png") {
+ return res.redirect('/skin_change');
+ }
+
+ // The name of the input field (i.e. "sampleFile") is used to retrieve the uploaded file
+ let sampleFile = req.files.upload;
+
+ // Use the mv() method to place the file somewhere on your server
+ sampleFile.mv(path.join(Skin_OverrideLocation, req.session.username + '.png'), function(err) {
+ if (err) {
+ return res.redirect('/failure');
+ }
+
+ var dimensions = sizeOf(path.join(Skin_OverrideLocation, req.session.username + '.png'));
+
+ if (dimensions.width == "64" && dimensions.height == "32") {
+ // classic steve skin
+ res.redirect('/success');
+ } else if (dimensions.width == "64" && dimensions.height == "64") {
+ // non-classic skins (alex or something)
+ res.redirect('/success')
+ } else {
+ // user must be trying to test us.
+ fs.unlinkSync(path.join(Skin_OverrideLocation, req.session.username + '.png'))
+ res.sendFile(path.join(__dirname, 'templates', 'size_too_big.html'))
+ }
+
+ });
+})
+
+// GET /cape_change
+// No parameters
+// Returns:
+// cape changing page
+
+app.get('/cape_change', (req,res) => {
+ if (req.session.username !== undefined) {
+ let temp = fs.readFileSync(path.join(__dirname, 'templates', 'cape_change.html')).toString();
+ temp = temp.replace('%%USERNAME%%', req.session.username)
+ res.send(temp)
+ } else {
+ res.redirect('/')
+ }
+})
+
+// POST /upload_cape
+// No parameters.
+// Returns:
+// success or fail page
+
+app.post('/upload_cape', (req,res) => {
+ if (req.session.username == undefined) {
+ // Don't even look at it.
+ return res.redirect('/')
+ }
+
+ if (!req.files || Object.keys(req.files).length === 0) {
+ return res.redirect('/cape_change');
+ }
+
+ if (req.files.upload.mimetype != "image/png") {
+ return res.redirect('/cape_change');
+ }
+
+ // The name of the input field (i.e. "sampleFile") is used to retrieve the uploaded file
+ let sampleFile = req.files.upload;
+
+ // Use the mv() method to place the file somewhere on your server
+ sampleFile.mv(path.join(Cape_OverrideLocation, req.session.username + '.png'), function(err) {
+ if (err) {
+ return res.redirect('/failure');
+ }
+
+ var dimensions = sizeOf(path.join(Cape_OverrideLocation, req.session.username + '.png'));
+
+ if (dimensions.width == "64" && dimensions.height == "32") {
+ // cape, GOOD
+ res.redirect('/success');
+ } else {
+ // user must be trying to test us.
+ fs.unlinkSync(path.join(Cape_OverrideLocation, req.session.username + '.png'))
+ res.sendFile(path.join(__dirname, 'templates', 'size_too_big.html'))
+ }
+ });
+})
+
+// GET /success
+// No parameters.
+// Returns:
+// success page
+
+app.get('/success', (req,res) => {
+ if (req.session.username !== undefined) {
+ let temp = fs.readFileSync(path.join(__dirname, 'templates', 'success.html')).toString();
+ temp = temp.replace('%%USERNAME%%', req.session.username)
+ res.send(temp)
+ } else {
+ res.redirect('/')
+ }
+})
+
+// GET /failure
+// No parameters.
+// Returns:
+// failure page
+
+app.get('/failure', (req,res) => {
+ if (req.session.username !== undefined) {
+ let temp = fs.readFileSync(path.join(__dirname, 'templates', 'failure.html')).toString();
+ temp = temp.replace('%%USERNAME%%', req.session.username)
+ res.send(temp)
+ } else {
+ res.redirect('/')
+ }
+})
+
// GET /MinecraftSkins/:username
// Paramters:
// username: username of character to get skin for
diff --git a/package-lock.json b/package-lock.json
index f0618d2..4060699 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -76,6 +76,14 @@
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
},
+ "busboy": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz",
+ "integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==",
+ "requires": {
+ "dicer": "0.3.0"
+ }
+ },
"bytes": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
@@ -156,6 +164,14 @@
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
+ "dicer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz",
+ "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==",
+ "requires": {
+ "streamsearch": "0.1.2"
+ }
+ },
"download-file-sync": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/download-file-sync/-/download-file-sync-1.0.4.tgz",
@@ -218,6 +234,41 @@
"vary": "~1.1.2"
}
},
+ "express-fileupload": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/express-fileupload/-/express-fileupload-1.2.0.tgz",
+ "integrity": "sha512-oe4WpKcSppXnl5peornawWUa6tKmIc1/kJxMNRGJR1A0v4zyLL6VsFR6wZ8P2a4Iq3aGx8xae3Vlr+MOMQhFPw==",
+ "requires": {
+ "busboy": "^0.3.1"
+ }
+ },
+ "express-session": {
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.1.tgz",
+ "integrity": "sha512-UbHwgqjxQZJiWRTMyhvWGvjBQduGCSBDhhZXYenziMFjxst5rMV+aJZ6hKPHZnPyHGsrqRICxtX8jtEbm/z36Q==",
+ "requires": {
+ "cookie": "0.4.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~2.0.0",
+ "on-headers": "~1.0.2",
+ "parseurl": "~1.3.3",
+ "safe-buffer": "5.2.0",
+ "uid-safe": "~2.1.5"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
+ },
+ "safe-buffer": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
+ "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
+ }
+ }
+ },
"finalhandler": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
@@ -296,6 +347,14 @@
"safer-buffer": ">= 2.1.2 < 3"
}
},
+ "image-size": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.9.3.tgz",
+ "integrity": "sha512-5SakFa79uhUVSjKeQE30GVzzLJ0QNzB53+I+/VD1vIesD6GP6uatWIlgU0uisFNLt1u0d6kBydp7yfk+lLJhLQ==",
+ "requires": {
+ "queue": "6.0.1"
+ }
+ },
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
@@ -354,6 +413,11 @@
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
"integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
},
+ "node-fetch": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
+ "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
+ },
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@@ -362,6 +426,11 @@
"ee-first": "1.1.1"
}
},
+ "on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
+ },
"parse-cache-control": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
@@ -404,6 +473,19 @@
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
},
+ "queue": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.1.tgz",
+ "integrity": "sha512-AJBQabRCCNr9ANq8v77RJEv73DPbn55cdTb+Giq4X0AVnNVZvMHlYp7XlQiN+1npCZj1DuSmaA2hYVUUDgxFDg==",
+ "requires": {
+ "inherits": "~2.0.3"
+ }
+ },
+ "random-bytes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
+ "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs="
+ },
"range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
@@ -492,6 +574,11 @@
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
},
+ "streamsearch": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
+ "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
+ },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -562,6 +649,14 @@
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
},
+ "uid-safe": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
+ "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
+ "requires": {
+ "random-bytes": "~1.0.0"
+ }
+ },
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
diff --git a/package.json b/package.json
index 6c13c42..9e1504e 100644
--- a/package.json
+++ b/package.json
@@ -11,6 +11,10 @@
"dependencies": {
"download-file-sync": "^1.0.4",
"express": "^4.17.1",
+ "express-fileupload": "^1.2.0",
+ "express-session": "^1.17.1",
+ "image-size": "^0.9.3",
+ "node-fetch": "^2.6.1",
"sync-request": "^6.1.0"
}
}
diff --git a/static/auth.html b/static/auth.html
new file mode 100644
index 0000000..17cfc51
--- /dev/null
+++ b/static/auth.html
@@ -0,0 +1,40 @@
+
+
+
+ Action MC Skins
+
+
+
+
+
+
+
+
+
ActionMC Skins
+
+
+
+
To authenticate, join this server (works with MC 1.7.x to latest):
+ srv.mc-oauth.net
+ It will give you a six digit code, enter that in the input box below.
+
+
+
+
+
Authenticate
+
+
+
+
+
+
+
Powered by Theta, a custom skin server solution by Virtue.
+
+
+
\ No newline at end of file
diff --git a/static/index.html b/static/index.html
index 5f20a18..d85e3fb 100644
--- a/static/index.html
+++ b/static/index.html
@@ -1,2 +1,43 @@
-Theta Skin Server
-Your website goes here!
\ No newline at end of file
+
+
+
+ Action MC Skins
+
+
+
+
+
+
+
+
+
ActionMC Skins
+
+
+
+
This page lets you change your skin on our skins server.
+
+ Click the button below to start the authentication procedure.
+ Authenticate
+ Currently, changing your skin is only available to people with premium Minecraft accounts.
+ This is subject to change.
+
+
+
+
+
What is a "Premium" Minecraft account?
+
+ A premium Minecraft account is an account that you have PAID for e.g. bought from Mojang/Microsoft.
+
+
+
+
+
+
+
Powered by Theta, a custom skin server solution by Virtue.
+
+
+
\ No newline at end of file
diff --git a/static/skin-previewer.html b/static/skin-previewer.html
new file mode 100644
index 0000000..5f20a18
--- /dev/null
+++ b/static/skin-previewer.html
@@ -0,0 +1,2 @@
+Theta Skin Server
+Your website goes here!
\ No newline at end of file
diff --git a/static/style-dark.css b/static/style-dark.css
new file mode 100644
index 0000000..c8566d5
--- /dev/null
+++ b/static/style-dark.css
@@ -0,0 +1,76 @@
+body {
+ margin: 0;
+ font-family: Arial, Helvetica, sans-serif;
+ background-image: url("/tile.png");
+ background-repeat: repeat;
+}
+
+.body-dark {
+ background-image: url("/tile_dark.png");
+ background-repeat: repeat;
+}
+
+.alert-frame {
+ padding-top: 2px;
+ padding-bottom: 2px;
+ text-align:center;
+ background-color: #800080;
+ color: white;
+ margin: 20px;
+ width: 90%;
+ height: 90%;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.invis {
+ display: none;
+}
+.title-frame {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ text-align:center;
+ background-color: #3a3a3a;
+ color: white;
+ margin: 50px;
+ width: 90%;
+ height: 90%;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.main-frame {
+ padding-top: 2px;
+ padding-bottom: 2px;
+ text-align:center;
+ background-color: #4a4a4a;
+ color: white;
+ margin: 50px;
+ width: 90%;
+ height: 90%;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.server-frame {
+ padding-top: 2px;
+ padding-bottom: 2px;
+ text-align:center;
+ background-color: #606060;
+ color: white;
+ margin: 50px;
+ width: 90%;
+ height: 90%;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.hidden-frame {
+ text-align:center;
+ color: white;
+ margin: 50px;
+ width: 90%;
+ height: 90%;
+ margin-left: auto;
+ margin-right: auto;
+}
\ No newline at end of file
diff --git a/static/tile_dark.png b/static/tile_dark.png
new file mode 100644
index 0000000000000000000000000000000000000000..1daa596b00987c5589c7296f049ba7c4fc5fb5ef
GIT binary patch
literal 54798
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≠tTZwScR-6k3
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