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

+ +
+ +
+
+ +

Codes generated by MC-OAuth expire within 5 minutes of their creation!

+
+
+ + +
+

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.

+ +

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.

+
+ +
+

Other Links

+ +

Skin Previewer

+
+ + +
+

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 zcmeFYV|->^vOXMjY}>Zgv8|468y!0x+v%`lCmq|i(H%RvT6I;ey4G5I?b?V?QjkP|#f1d{0YQ+K5>xruKmD;ngMDnFVkfOXcId9+ny$ib zu9gnYATDOMHfFBGE;eSiX0Aj7DV!i6h^>E=Ys$;-H z{Gn}ZW?^N|PkPbbO-gKK%1^4nA|tkX@51ZBPx=>|ydTGZh?z)<|Dxh*!%wOyuS6{B;A}?B!N|hMN-6+LOiaw@ zY--M{A|~-S_{SMPsimu{BQFz^ySqE1I~${evjr0i4-XF$Gblal`7=+EVE^|W*R(~-T)-+1_7gvrCm zk%@(ondwiRxVW*9$r>fUJe#UE*>sErhn1< zyWhWCaBx<2aIh6nGP1IF{bK3hNUY@SK+M8H&&>P}@V_bj3tryA)XLoRpKHMVM-ABi zs01A|EAM|9`3KFv+2CXPgOGn9=r8R55!=7W|Nn?HHTjb_M>l8Nzci1j3DZXhvoo`I zb@||q<)67THQ_b+gE|N2|8n`)rud8FFJ?~vEd8$<*;)zwQ|J9_{Xe9C=j0F7zeM%V zM);WiyT|{v=sy}*Uj9!4{%yyxv-{`x{{rEaws&zgvNti4787uDvohs1H!|liHZ|p7 zFg9W{Wnf`3HDWL_Wn*D5Wn(kt;$Y!sHD@vYONWq`|3~cqc59k>Sp9v#{Zlx9l>GOB z@Q0N5j~=LMWoM@7Z1r)aFtYu(T9Z)xj5Lm{c$lAU}I)xV&P-@i=BUz|0_o8f57~s{9iGDhp5?G zxeBoU&CS1v|AzYa1M#oYk6GYjLSg!IM)~KV{@07f|Ni#x;r#F0{?p?BIr)={|K#BR z==x7s`cvos==zh2|K#BR==x7s`cvos==zh2|K#BR==x7s`cvosi!Ru|=cH!#ABm{@ zN5<)bI5+)AuInl-FAlX0frQLX)+z?v`w+o6N@=-(fH0E%v4VOO34Z+$LRbjP3xk0C zjDveI`UCE*Bwv;DwEBEN_2?l(a9 z(jfr$#vetvJqCAmu+%W2Dp(MG;W_Y)IOi?}y!WCeQu z`^O)?Hi47CW#A3a&o@{4=ziI&AMI+>Ee%*09dl8c%luwBf_w4=Xah^S{O!rQX)o&vYWeSv$pN1n*JFRO zjILR}KC8_w-6Nw6{bX!N4S@k#wc;D>Cb?C)WpWe)A%E)lzg9fkyjrh=uWDat*>XY} zXd(?IR<@e!F9AKLsh1U(+?S{TRF$A6TZ$i?p@}rTwHF7R4V-Cm7UwWs%D)ddc*2@R zt@mMUtQi0lZ3ve@mbw)NpAe%COOaj09DOrjggZ7my_@e2+t8aOnlw`=lIby=o6Lhf zch3QzZ7{G23$z7|_-qZ$!3TTGuR>?9N6uq_p;aSA*o1N2el1e1u>2x>h6{%zdwS_Vv;C>lE(vlTX>D+kT_@1dU=_&VGLwQmbG_3=mBfX4fd{ zS{J|{H$f@Zv1U@q9#{EQr~_FG9io1~O=-Gg8+IaeOy_m*+3nMwT0g13PQ;&U5F4+**axrosHC4sbxU~U$}oNtSxB_@y_4a-Fu zW~^p5;Wj=tLQ+W66O})SQfp~f0dUy2z-?T>)4`K_86zfSRj~f{I5cwKE!0smvVsXnaM68};g+o@ zl3xi|m6_Gq-KtpSX0O2RbEW|>EsZ{A=tz_cJ=Ft*`?&TST}_d_OgC{eR@DOtA{vVn zhF*1H_k4lnZfqhuf@b~1kmi6zz1){-{Rs(LJ^04@-rSEKm>K<5&n{x%dprfXY(fDp zVI^JS(4ibO-QbjDzp+~@(?;F9o3UpbkS8;yOv$TTp$x8uy7p7TH8AwsLcQ)qn&jXv zOC~ob;7U_9B)x3-x>|C7J0Y3^joP6rGpuVRpu?XGQ4+7DYsG=PZ2*ks?jP8_^Ak#XO=`3s9*ypFUZi?h= zGB0CY^--{L5SpRxvGylV>p|>YHI!|-a^PNv4}>k37~-7^12vP3E=9XiNdndB*5Nth zK>1a680AI7Qg^K3;Uk3Ix1icI>3eY(f0=|A?^wEqZDMP3DG>cYym|KZ~u^5 z3VAMCtl5j_wv~a+bM)9*|KLj)&>u4Z$g2xhdvl(NN9o~1iZ+Sjo#klBaS<|;Yx(|5v*JCO$N+vCUa$HpGxiBDN^p5fWHf4CXtd}mMi`&%$PS)};Y|AW;OoVdk z(>c6#X=c6~M&w7V&=*Sv_?R%A;z_Q-Z8`g82tWcY*!h1#WF{d*&*TLxb6m+FsK)yx zqXoo)f^5^Mgirjmhz}NgJyxuQj*Rf|^|e@c_qF4vWX5%|f%xV`rW~+hMB+q-6A(F1 z4#T|vghtxMSjQMUv279MjN5Z$k3wR)6(vL2r$to#co=r{2^8{<_BlgK8(e5GFLVYv z+JAEBNi6;z0EyWo*R38tOikDvNX>>uYOm`9LPC|AM6oP{hjv2;p#eyhSPOsw=6M>k ztgzW)^mCvSf(2GGe-06r6C3*K6E-XsdaDNiE5wYYV8inDWxd^9*8eEr$yp@&-4%7M z*(dyndl9CvkY>1E<^uD_cB`gd5=p61HH>YF5-P9Xt967xJuT#GKBd!k`CLJm-r%&JIWuC`Z3Q7LKs^w7fa&xp3 zD*y#-<>Uw{PW16g_+D4v+C)utdOEo5RPJRebd|FS_c$db0uB)LGJL^w$Y+3ECScRu zp+V*vPy5jY)NQ!3eq^CxtOS;l*(ovz^s|dRzVt{JjQZ`h*6ItXN7iGK#f~FHw zEh88rgH%>mab4uiM-)WNhazrK?I1bJIxe`1dXlRr_*zwFd(eiWhJ|EOHhmxcY9GS< zlVYK=)43st?F|_z9S2nO;(np5YOWI+^osvW zg4EAr6rV3Bc>QM0Sq~{JuA~6n84u~_tvex5@SNhWBWJ_@TCBhZAJ7g1rxUTBtxjU9 znt)LPZ)J^ZZipD;V1+?&&9eGr)~qrN+Y7q2WN3JUMSm};;~$C3;j55sbgkX%o&trI zX~LlqUi+EtQNM}{rmG@Ol)z~KPrXPHI>q2WrBEc*S>N;T!9eKO<%NYM*7tB-2@DXF zqeAq`m+8pJo`&Hfmcb zY~1U3mM+KD5tzZ4`n?fro3ycg-Z(xlX;Q%v45!0Z(CrIkM%l%;gE?i@*N89v1OY=+ zpq}D)ESgLL8Fk;Nj|S>L?-N=b8{!iKY>%p1EQfHU0+c_Ugb|c6&bl~KnWmGNr%ecq z5;9!BA9#s@uZVOEP$cr0G-b61^MBs0j_+TJK!;MT3Tm%c$m7jG8OJMX+Zk)KEAG_e z?y70B8JuDcC!IPLrrTk}rfbHOJtfaHG@d|WAyfpt8?15@_*OVyvfmxLE@ofMbcuL* zko5d5>nO#nuu$JUHH%2C_DLI@d+v4GFnqXYu^+vfC?J!zSTf$uIc!3PXk^wUduegW z-g>`(Z~M zpVF+TN*7<%nmjZ+>eMrki&Y0pz!WUxw!UrFo!f-S(Z_dFF2}Hw30J%1*TUHHS$c`j zGWlcVQTPD-XfuI?>hRrAo4)tw*^ubRY1nMEI$in>n_b!By*h#rH=%sc$m6FqfP!Nb z9{KQt=)MG>#_r^AlPxa#R-Is$^(xxN5isNC zGJ70|VwfoIJ_YKhh)_Sq<1F%n1B-isx1VvuBCGN*fayfYowu`YEvs${!{E3{T{FRX zmyfs@<4Me=@#1jC4VPM>L_-$Nu;>NKm4sz|V{~1cqNQh-%<}erL`yZ3!~;*bNrLC0W|p}cCg}tj6^3d z`B;j5RgU5bE<#XGX!WD=E#Yf5)ZVTd3ge@>X6ftx1~e<~R_@^bh|M;qo$~uE+?mEh zh%l=2n9?*dEs4c>J}Ry_+?V!4nM3*Y=IE?_7LCX|;A0UxLsDOKzmnkH1bZHM9qYP^an&q$t@k=9nEGs+`ng&1}OR(kmIcj-3$~;d#lc zKrUvyQy)~63CLo_=pu}309AhE&?XYBzG$-07&I?eHC(+>wTnIgTjvL`by2OxD$-yz zWmlhgMEo~Fi1vG3PGT&RTT7UGEPo8sf7sfIKd;sd_|ocv@p4$It*&x7!^ca8@sOOB;*wgl5q@NU$ZGVl&|{w zDm886?X>!;P?kzD`;|@h%Gb$XcX>reO#B}aHew*{S9Y`u1m)*?p90Q6_=#<;7B;&5 z}Lh!Zk3U(0A^4*U5jLw$zX!bJ5zHcmbJO!VqUV_{nY z;I&S~)M$|di7>kb;*{$kUNSX!5Y23;7Hb!4RqtvCR_G^^>_Y0%jTxFXKyiT@#*iCN z;8!?&>CYJ)jJ4`KP|cc<2B#=*xuv)0fedKHUIDRt+0H=JEn3 zm)}xZcdYQ@yNliqoB5H+oZ{L(x7F|v1jEa>8TB095h7I`I_NbRMv!RF!ekCIALE)| z-)hU+oWi_h>3jY1LVvO^a|{ah6)59KiQKADbweMIwGB=`Cwia{CNIhS{q~o)@}e4D zTY?{`$$r;dot?74`$-(g(^`4B$K-g&GF&@JPn?`9Q0jrsx|qIyz+@0gfPi*O4uJXoPF%2exgb@|1I}cmUo3Ete zD6~iCODJsYOITuwt~k?M@^cJC6-n$has+m?-9l{6Yu3a(xdGQ@_nr-dn&Z+9%jWg| zBSV7Lpii5xKzX~|28U!DMeIBwWP>5Ly$l%25)Y7HUPca=7Ak45dD={FE!7iYIXYq} zt*KFd^V;G#+VAY}ea5_q#3Vfe7Lf^OlZX~%vX+ z@?Ro&CMa9nG``*1*8!Sn74#+7;4y$luKl)x2rPyRKUpI6x7_sD7#VK+Jg^RI$y0JlqH=mFM zqhE7`;BoL2Ab_^V!b`VPQ6liOkjZ6R@{@yMe#e(;|MFc&nRDqdS+erEx4-Zl(?GeNocEQ43 z@L9y2E6yNz#<9G0m@N}EDR)YEKFRe!9SFD0=(5#*M1g01MeesV=L-(2U$H{k_QX`f zwq$*P^20zI8=41aDb|&x+bzc$Ujt*qXpL=206^zxd7a=WSk9QMVjay!l7zcoNxZ?7 zD<}3v7q%fVutHiUw5K5d=yP!zwfGt6B(=1dN=nsLD4}rr3C?Pf)5T_EQe<0eG5S=I zXIq=rsb6^kfP(%Gzm{#$#$$?bRqEWuz^i1c?3tg%P`j?73)V;Fkp-A7-$S`n5KVpm zWhU-$3W}IHdmzp}N#9n<+8jthD;8Og`=hp@G*$WW2EMb%_h18W)^WJg37t!GAp1Vg z;V}CdWb>B@i72B_rdAA$W7wY7(OoI-nt7WKbmVy?PBQ~6w|VdM+OoarMD%?4?Qc(s zw9&BaUPS-P^rB>)|M!dNJ;nvy9mxvEy+i_X2bcAEnunK!8Htw5`$h^K!x zFP@Ki!KNyd_;svu0bj$L0i$;yvOEAzAREv#bIWzpaHo zR%!(~o!cJK@~ORdDr2CeZUAD-BfM{I(gU}rw)O?c6X7*jOTSQ|_FJx|${%DV2C-7A zPN1jgwS#pn zp3=@zMn3ZxALFdrX~6xul0hMQ8)UkKOwVT}Lp85{OUHyT4$esrmd#QTyNSYnOIEI! zJ`^TDVx}f~Y5~o##8^CrEa@y@fj;>$S27-H2$0~i zV{MY^3w}v7Sc91REd%FpewSa&=_6Qc7APZNtvG99e2YX$9Q91mzq`em*wv4o)F1h2 z8Nt|ckp!O3sPvSu`J8=1zJ8^?$UYVpVoOhh8iAjs%*#U>SNmzxs{#xT3y2vL#%?L; z$|UNRpnnDmzFSWraqv>urP!Vks*rL(sT`Z(vV#wxabuI(W%HK!yvJ>3bHaF#U#gze zl`p+kULG#=?X@7dU2Pvq0>c8yC~QWjp9Wnke@r<8 zwoqL}vm*M!k11cUppXohz3UHLpDk#c^0K;9<_>d5VH&8wcn=&rqvDZ03}VYs)z679e>c*E~U~^ zO(S=-_`=;Ustu1UR~;s~igv!9tcSh_dpDE}RD`!&3-yMlJUdi{6q0zAnL^HA8j-hN zIK(^){8o5Sq+&>VVzKIJt5|TAE{1`H@~opxVpVA#h1pc;eyhh;&D}u}Z(Z;Emv|So zVZg+#joBzb27eX;*%2XLIeid|rE&S%@%oA+BINqB-(SOk?l7xiXP=^mL^%x}85pF^PQf`mr9N>e zzIng1vR!guP_(9%XUA~Sk@~sRW)2S%UYcNlTcZPUJe>X-g@B_HYxX_C;v^Dph`N$3 z(xedE(!~^XWOxF%4O7*v^J{>)IXFFrME}$Gmc!tJeK-AHW$eSl6tAW=buqhc_bp6g zgS625=1Y<1sS&3>*o>t4Qah-b#RpO_x9v454jWuY*X~e;#(Ut#Jc{$Qs11e zKW)kS^)W2DNw9GBEMpLxW%KnsU4A@a>4c`D=JZ=E$VyIOdqw2*L9dDfg2y*rF@^4^ z+i{(}TefMa<~(YN4Cx+gtd+xom%ICRLEb&ySp2}t!4mu}@N0T{`aJ7wBPbLVRtOs! z3{b<@ycgU!P#HY>x-#tN$Wh%G6(Mj0WXsr*6p+w_iZ zUZFvC42PuCsWz}P!9L=s*@m;<5=!1l70yajvl%UddHGtnqLDZO≠tTZwScR-6k3 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 literal 0 HcmV?d00001 diff --git a/templates/cape_change.html b/templates/cape_change.html new file mode 100644 index 0000000..8d62cdb --- /dev/null +++ b/templates/cape_change.html @@ -0,0 +1,40 @@ + + + + Action MC Skins + + + + + + +
+

ActionMC Skins

+
+ +
+

Cape Change

+

Please upload the cape you wish to put on your character:

+
+ +
+ +
+

Maximum file size is 16KB (16384 bytes). Skin must be a PNG file.

+

+
+ + + +
+

Powered by Theta, a custom skin server solution by Virtue.

+
+ + \ No newline at end of file diff --git a/templates/failure.html b/templates/failure.html new file mode 100644 index 0000000..023030f --- /dev/null +++ b/templates/failure.html @@ -0,0 +1,35 @@ + + + + Action MC Skins + + + + + + +
+

ActionMC Skins

+
+ +
+

An error occured.

+

The server encountered an error trying to handle your request.

+ +

+
+ + + +
+

Powered by Theta, a custom skin server solution by Virtue.

+
+ + \ No newline at end of file diff --git a/templates/landing.html b/templates/landing.html new file mode 100644 index 0000000..3ad0c71 --- /dev/null +++ b/templates/landing.html @@ -0,0 +1,49 @@ + + + + Action MC Skins + + + + + + +
+

ActionMC Skins

+
+ +
+

Hello, %%USERNAME%%.

+

What do you wish to change?

+ + +
+
+ +

+
+ +
+

These are your current skin and cape textures:

+ + + + + +

Skin

Cape

+

Keep in mind these are the skins we either have cached from Mojang for you or the skin you set using our service.

+
+ + +
+

Powered by Theta, a custom skin server solution by Virtue.

+
+ + \ No newline at end of file diff --git a/templates/size_too_big.html b/templates/size_too_big.html new file mode 100644 index 0000000..fd0ac04 --- /dev/null +++ b/templates/size_too_big.html @@ -0,0 +1,37 @@ + + + + Action MC Skins + + + + + + +
+

ActionMC Skins

+
+ +
+

Image size too big!

+

Skins must be either 64x32 or 64x64 pixels.

+

Capes can only be 64x32 pixels.

+ +

The file you have uploaded was removed from the server.

+

+
+ + + +
+

Powered by Theta, a custom skin server solution by Virtue.

+
+ + \ No newline at end of file diff --git a/templates/skin_change.html b/templates/skin_change.html new file mode 100644 index 0000000..1bdb0e2 --- /dev/null +++ b/templates/skin_change.html @@ -0,0 +1,40 @@ + + + + Action MC Skins + + + + + + +
+

ActionMC Skins

+
+ +
+

Skin Change

+

Please upload the skin you wish to put on your character:

+
+ +
+ +
+

Maximum file size is 16KB (16384 bytes). Skin must be a PNG file.

+

+
+ + + +
+

Powered by Theta, a custom skin server solution by Virtue.

+
+ + \ No newline at end of file diff --git a/templates/success.html b/templates/success.html new file mode 100644 index 0000000..ff893f3 --- /dev/null +++ b/templates/success.html @@ -0,0 +1,35 @@ + + + + Action MC Skins + + + + + + +
+

ActionMC Skins

+
+ +
+

Skin Successfully Changed!

+

You will now see your new skin in-game.

+ +

+
+ + + +
+

Powered by Theta, a custom skin server solution by Virtue.

+
+ + \ No newline at end of file