mirror of
https://github.com/PretendoNetwork/juxtaposition-ui.git
synced 2026-04-26 01:47:21 -05:00
Moved auth and language processing to middlewear. Fixed memory leak occurring with each database connection. Added posting on 3DS. Moved endpoints to single route between portal and ctr. Added post character limit (280 characters).
This commit is contained in:
parent
949e66493c
commit
11be7687d5
585
package-lock.json
generated
585
package-lock.json
generated
|
|
@ -54,7 +54,6 @@
|
|||
"version": "6.12.6",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
|
||||
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fast-deep-equal": "^3.1.1",
|
||||
"fast-json-stable-stringify": "^2.0.0",
|
||||
|
|
@ -104,11 +103,21 @@
|
|||
"sprintf-js": "~1.0.2"
|
||||
}
|
||||
},
|
||||
"arr-flatten": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
|
||||
"integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
|
||||
},
|
||||
"array-flatten": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
||||
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
|
||||
},
|
||||
"arraybuffer-to-string": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/arraybuffer-to-string/-/arraybuffer-to-string-1.0.2.tgz",
|
||||
"integrity": "sha512-WbIYlLVmvIAyUBdQRRuyGOJRriOQy9OAsWcyURmsRQp9+g647hdMSS2VFKXbJLVw0daUu06hqwLXm9etVrXI9A=="
|
||||
},
|
||||
"asn1": {
|
||||
"version": "0.2.4",
|
||||
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
|
||||
|
|
@ -120,8 +129,7 @@
|
|||
"assert-plus": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
|
||||
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
|
||||
"dev": true
|
||||
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
|
||||
},
|
||||
"async": {
|
||||
"version": "0.9.2",
|
||||
|
|
@ -132,25 +140,27 @@
|
|||
"asynckit": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
|
||||
"dev": true
|
||||
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
|
||||
},
|
||||
"at-least-node": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
|
||||
"integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="
|
||||
},
|
||||
"atob-lite": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz",
|
||||
"integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY="
|
||||
},
|
||||
"aws-sign2": {
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
|
||||
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
|
||||
"dev": true
|
||||
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
|
||||
},
|
||||
"aws4": {
|
||||
"version": "1.11.0",
|
||||
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
|
||||
"integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
|
||||
"dev": true
|
||||
"integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
|
||||
},
|
||||
"balanced-match": {
|
||||
"version": "1.0.0",
|
||||
|
|
@ -175,7 +185,6 @@
|
|||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
|
||||
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"tweetnacl": "^0.14.3"
|
||||
}
|
||||
|
|
@ -203,6 +212,11 @@
|
|||
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
|
||||
"integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
|
||||
},
|
||||
"bmp-js": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz",
|
||||
"integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM="
|
||||
},
|
||||
"body-parser": {
|
||||
"version": "1.19.0",
|
||||
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
|
||||
|
|
@ -250,6 +264,11 @@
|
|||
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
|
||||
"dev": true
|
||||
},
|
||||
"buffer-to-uint8array": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/buffer-to-uint8array/-/buffer-to-uint8array-1.1.0.tgz",
|
||||
"integrity": "sha1-z29BKHwCL0WNp1LDkcGo1TXsX3I="
|
||||
},
|
||||
"busboy": {
|
||||
"version": "0.2.14",
|
||||
"resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz",
|
||||
|
|
@ -294,8 +313,7 @@
|
|||
"caseless": {
|
||||
"version": "0.12.0",
|
||||
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
|
||||
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
|
||||
"dev": true
|
||||
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
|
||||
},
|
||||
"chalk": {
|
||||
"version": "2.4.2",
|
||||
|
|
@ -313,6 +331,16 @@
|
|||
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
|
||||
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
|
||||
},
|
||||
"clamp": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz",
|
||||
"integrity": "sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ="
|
||||
},
|
||||
"clip-pixels": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/clip-pixels/-/clip-pixels-1.0.1.tgz",
|
||||
"integrity": "sha512-nJ22fZvCwkJfMppkOEE7GciLX08rDnVzEJ+U46kBFZtwNzH2V4tNxMWa9Tc365WspCxy1c3NtGJ5EeT4SgjmCA=="
|
||||
},
|
||||
"code-point-at": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
|
||||
|
|
@ -335,6 +363,14 @@
|
|||
"color-name": "1.1.3"
|
||||
}
|
||||
},
|
||||
"color-id": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/color-id/-/color-id-1.1.0.tgz",
|
||||
"integrity": "sha512-2iRtAn6dC/6/G7bBIo0uupVrIne1NsQJvJxZOBCzQOfk7jRq97feaDZ3RdzuHakRXXnHGNwglto3pqtRx1sX0g==",
|
||||
"requires": {
|
||||
"clamp": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"color-name": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
|
||||
|
|
@ -358,11 +394,22 @@
|
|||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"delayed-stream": "~1.0.0"
|
||||
}
|
||||
},
|
||||
"compute-dims": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/compute-dims/-/compute-dims-1.1.0.tgz",
|
||||
"integrity": "sha512-YHMiIKjH/8Eom8zATk3g8/lH3HxGCZcVQyEfEoVrfWI7od/WRpTgRGShnei3jArYSx77mQqPxZNokjGHCdLfxg==",
|
||||
"requires": {
|
||||
"utils-copy": "^1.0.0",
|
||||
"validate.io-array": "^1.0.6",
|
||||
"validate.io-matrix-like": "^1.0.2",
|
||||
"validate.io-ndarray-like": "^1.0.0",
|
||||
"validate.io-positive-integer": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"concat-map": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||
|
|
@ -386,6 +433,16 @@
|
|||
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
|
||||
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
|
||||
},
|
||||
"const-max-uint32": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/const-max-uint32/-/const-max-uint32-1.0.2.tgz",
|
||||
"integrity": "sha1-8Am7YjDmeO2HTdLWqc2ePL+rtnY="
|
||||
},
|
||||
"const-pinf-float64": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/const-pinf-float64/-/const-pinf-float64-1.0.0.tgz",
|
||||
"integrity": "sha1-9u+w15+cCYbT558pI6v5twtj1yY="
|
||||
},
|
||||
"content-disposition": {
|
||||
"version": "0.5.3",
|
||||
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
|
||||
|
|
@ -439,7 +496,6 @@
|
|||
"version": "1.14.1",
|
||||
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
|
||||
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"assert-plus": "^1.0.0"
|
||||
}
|
||||
|
|
@ -468,8 +524,7 @@
|
|||
"delayed-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
|
||||
"dev": true
|
||||
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
|
||||
},
|
||||
"delegates": {
|
||||
"version": "1.0.0",
|
||||
|
|
@ -532,11 +587,15 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"dtype": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/dtype/-/dtype-2.0.0.tgz",
|
||||
"integrity": "sha1-zQUjI84GFETs0uj1dI9popvihDQ="
|
||||
},
|
||||
"ecc-jsbn": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
|
||||
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"jsbn": "~0.1.0",
|
||||
"safer-buffer": "^2.1.0"
|
||||
|
|
@ -641,26 +700,27 @@
|
|||
"extend": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
|
||||
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
|
||||
"dev": true
|
||||
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
|
||||
},
|
||||
"extsprintf": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
|
||||
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
|
||||
"dev": true
|
||||
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
|
||||
},
|
||||
"fast-deep-equal": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
||||
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
|
||||
"dev": true
|
||||
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
|
||||
},
|
||||
"fast-json-stable-stringify": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
|
||||
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
|
||||
"dev": true
|
||||
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
|
||||
},
|
||||
"file-type": {
|
||||
"version": "10.11.0",
|
||||
"resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz",
|
||||
"integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw=="
|
||||
},
|
||||
"file-uri-to-path": {
|
||||
"version": "1.0.0",
|
||||
|
|
@ -691,17 +751,28 @@
|
|||
"unpipe": "~1.0.0"
|
||||
}
|
||||
},
|
||||
"flatten-vertex-data": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/flatten-vertex-data/-/flatten-vertex-data-1.0.2.tgz",
|
||||
"integrity": "sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw==",
|
||||
"requires": {
|
||||
"dtype": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"flip-pixels": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/flip-pixels/-/flip-pixels-1.0.2.tgz",
|
||||
"integrity": "sha512-oXbJGbjDnfJRWPC7Va38EFhd+A8JWE5/hCiKcK8qjCdbLj9DTpsq6MEudwpRTH+V4qq+Jw7d3pUgQdSr3x3mTA=="
|
||||
},
|
||||
"forever-agent": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
|
||||
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
|
||||
"dev": true
|
||||
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
|
||||
},
|
||||
"form-data": {
|
||||
"version": "2.3.3",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
|
||||
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"asynckit": "^0.4.0",
|
||||
"combined-stream": "^1.0.6",
|
||||
|
|
@ -753,7 +824,6 @@
|
|||
"version": "0.1.7",
|
||||
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
|
||||
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"assert-plus": "^1.0.0"
|
||||
}
|
||||
|
|
@ -771,14 +841,12 @@
|
|||
"har-schema": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
|
||||
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
|
||||
"dev": true
|
||||
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
|
||||
},
|
||||
"har-validator": {
|
||||
"version": "5.1.5",
|
||||
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
|
||||
"integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ajv": "^6.12.3",
|
||||
"har-schema": "^2.0.0"
|
||||
|
|
@ -822,7 +890,6 @@
|
|||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
|
||||
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"assert-plus": "^1.0.0",
|
||||
"jsprim": "^1.2.2",
|
||||
|
|
@ -842,6 +909,116 @@
|
|||
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
|
||||
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
|
||||
},
|
||||
"image-decode": {
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/image-decode/-/image-decode-1.2.2.tgz",
|
||||
"integrity": "sha512-WJSWrPNmEnWVYGkY22bA6206MKYjfGl01fdlwIp6ovdnPL2qGJyC3wQj8QqYbdblchzwgglFg8Jcb/1f6fhaTQ==",
|
||||
"requires": {
|
||||
"bmp-js": "^0.1.0",
|
||||
"buffer-to-uint8array": "^1.1.0",
|
||||
"image-type": "^3.0.0",
|
||||
"jpeg-js": "^0.3.4",
|
||||
"omggif": "^1.0.9",
|
||||
"pngjs": "^3.3.3",
|
||||
"to-array-buffer": "^3.0.0",
|
||||
"utif": "^2.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"jpeg-js": {
|
||||
"version": "0.3.7",
|
||||
"resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.7.tgz",
|
||||
"integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ=="
|
||||
},
|
||||
"pngjs": {
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz",
|
||||
"integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"image-encode": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/image-encode/-/image-encode-1.3.1.tgz",
|
||||
"integrity": "sha512-XlDSaqGFrW0Rn08fxJM725+h9Hfx/D9u1RVMP8IrcSRN5Ib74UgVf7yuzoS8YAxKc6HqQ8bhDSvy+rIzCUoAYg==",
|
||||
"requires": {
|
||||
"bmp-js": "^0.1.0",
|
||||
"image-palette": "^2.0.1",
|
||||
"image-type": "^3.0.0",
|
||||
"is-plain-obj": "^1.1.0",
|
||||
"jpeg-js": "^0.4.1",
|
||||
"next-pow-2": "^1.0.0",
|
||||
"object-assign": "^4.1.1",
|
||||
"omggif": "^1.0.9",
|
||||
"pngjs": "^3.3.3",
|
||||
"pxls": "^2.3.1",
|
||||
"to-array-buffer": "^3.0.0",
|
||||
"utif": "^2.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"pngjs": {
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz",
|
||||
"integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"image-palette": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/image-palette/-/image-palette-2.1.0.tgz",
|
||||
"integrity": "sha512-3ImSEWD26+xuQFdP0RWR4WSXadZwvgrFhjGNpMEapTG1tf2XrBFS2dlKK5hNgH4UIaSQlSUFRn1NeA+zULIWbQ==",
|
||||
"requires": {
|
||||
"color-id": "^1.1.0",
|
||||
"pxls": "^2.0.0",
|
||||
"quantize": "^1.0.2"
|
||||
}
|
||||
},
|
||||
"image-pixels": {
|
||||
"version": "2.2.2",
|
||||
"resolved": "https://registry.npmjs.org/image-pixels/-/image-pixels-2.2.2.tgz",
|
||||
"integrity": "sha512-jcHECwLUEUBMQLqpZF0Bs0ac/jvZXs/97JwD6J39rP98vgTyvvNKhUjYaWf+BSKKPYXfenctOQV95sDC7Z/aZQ==",
|
||||
"requires": {
|
||||
"arr-flatten": "^1.1.0",
|
||||
"arraybuffer-to-string": "^1.0.2",
|
||||
"clip-pixels": "^1.0.1",
|
||||
"flip-pixels": "^1.0.1",
|
||||
"image-decode": "^1.1.0",
|
||||
"image-type": "^3.0.0",
|
||||
"is-base64": "^0.1.0",
|
||||
"is-blob": "^2.0.0",
|
||||
"is-browser": "^2.1.0",
|
||||
"is-buffer": "^2.0.3",
|
||||
"is-float-array": "^1.0.0",
|
||||
"is-plain-obj": "^1.1.0",
|
||||
"is-promise": "^2.1.0",
|
||||
"is-relative": "^1.0.0",
|
||||
"is-url": "^1.2.4",
|
||||
"object-assign": "^4.1.1",
|
||||
"parse-rect": "^1.2.0",
|
||||
"primitive-pool": "^1.1.0",
|
||||
"pxls": "^2.3.2",
|
||||
"request": "^2.88.0",
|
||||
"to-array-buffer": "^3.1.1",
|
||||
"to-uint8": "^1.4.0",
|
||||
"weak-map": "^1.0.5"
|
||||
}
|
||||
},
|
||||
"image-type": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/image-type/-/image-type-3.1.0.tgz",
|
||||
"integrity": "sha512-edYRXKQ3WD2yHXFGUbwoJVn5v7j1A6Z505uZUYIfzCwOOhPGLYSc3VOucF9fqbsaUbgb37DdjOU+WV4uo7ZooQ==",
|
||||
"requires": {
|
||||
"file-type": "^10.9.0"
|
||||
}
|
||||
},
|
||||
"indexed-image-converter": {
|
||||
"version": "github:PretendoNetwork/indexed-image-converter#f413e562396ac78cb71b6ab8dc8164bc077dd839",
|
||||
"from": "github:PretendoNetwork/indexed-image-converter",
|
||||
"requires": {
|
||||
"image-encode": "^1.3.1",
|
||||
"image-palette": "^2.1.0",
|
||||
"image-pixels": "^2.2.2"
|
||||
}
|
||||
},
|
||||
"inherits": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
||||
|
|
@ -862,6 +1039,31 @@
|
|||
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
|
||||
"integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
|
||||
},
|
||||
"is-base64": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmjs.org/is-base64/-/is-base64-0.1.0.tgz",
|
||||
"integrity": "sha512-WRRyllsGXJM7ZN7gPTCCQ/6wNPTRDwiWdPK66l5sJzcU/oOzcIcRRf0Rux8bkpox/1yjt0F6VJRsQOIG2qz5sg=="
|
||||
},
|
||||
"is-blob": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/is-blob/-/is-blob-2.1.0.tgz",
|
||||
"integrity": "sha512-SZ/fTft5eUhQM6oF/ZaASFDEdbFVe89Imltn9uZr03wdKMcWNVYSMjQPFtg05QuNkt5l5c135ElvXEQG0rk4tw=="
|
||||
},
|
||||
"is-browser": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/is-browser/-/is-browser-2.1.0.tgz",
|
||||
"integrity": "sha512-F5rTJxDQ2sW81fcfOR1GnCXT6sVJC104fCyfj+mjpwNEwaPYSn5fte5jiHmBg3DHsIoL/l8Kvw5VN5SsTRcRFQ=="
|
||||
},
|
||||
"is-buffer": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
|
||||
"integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="
|
||||
},
|
||||
"is-float-array": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-float-array/-/is-float-array-1.0.0.tgz",
|
||||
"integrity": "sha512-4ew1Sx6B6kEAl3T3NOM0yB94J3NZnBdNt4paw0e8nY73yHHTeTEhyQ3Lj7EQEnv5LD+GxNTaT4L46jcKjjpLiQ=="
|
||||
},
|
||||
"is-fullwidth-code-point": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
|
||||
|
|
@ -870,11 +1072,41 @@
|
|||
"number-is-nan": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"is-plain-obj": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
|
||||
"integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
|
||||
},
|
||||
"is-promise": {
|
||||
"version": "2.2.2",
|
||||
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
|
||||
"integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
|
||||
},
|
||||
"is-relative": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
|
||||
"integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
|
||||
"requires": {
|
||||
"is-unc-path": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"is-typedarray": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
|
||||
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
|
||||
"dev": true
|
||||
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
|
||||
},
|
||||
"is-unc-path": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
|
||||
"integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
|
||||
"requires": {
|
||||
"unc-path-regex": "^0.1.2"
|
||||
}
|
||||
},
|
||||
"is-url": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
|
||||
"integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="
|
||||
},
|
||||
"isarray": {
|
||||
"version": "1.0.0",
|
||||
|
|
@ -893,8 +1125,7 @@
|
|||
"isstream": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
|
||||
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
|
||||
"dev": true
|
||||
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
|
||||
},
|
||||
"jake": {
|
||||
"version": "10.8.2",
|
||||
|
|
@ -927,6 +1158,11 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"jpeg-js": {
|
||||
"version": "0.4.3",
|
||||
"resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz",
|
||||
"integrity": "sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q=="
|
||||
},
|
||||
"js-yaml": {
|
||||
"version": "3.14.0",
|
||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
|
||||
|
|
@ -939,26 +1175,22 @@
|
|||
"jsbn": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
|
||||
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
|
||||
"dev": true
|
||||
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
|
||||
},
|
||||
"json-schema": {
|
||||
"version": "0.2.3",
|
||||
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
|
||||
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
|
||||
"dev": true
|
||||
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
|
||||
},
|
||||
"json-schema-traverse": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
|
||||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
|
||||
"dev": true
|
||||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
|
||||
},
|
||||
"json-stringify-safe": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
|
||||
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
|
||||
"dev": true
|
||||
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
|
||||
},
|
||||
"jsonfile": {
|
||||
"version": "6.1.0",
|
||||
|
|
@ -980,7 +1212,6 @@
|
|||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
|
||||
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"assert-plus": "1.0.0",
|
||||
"extsprintf": "1.3.0",
|
||||
|
|
@ -1214,6 +1445,11 @@
|
|||
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
|
||||
"integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
|
||||
},
|
||||
"next-pow-2": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/next-pow-2/-/next-pow-2-1.0.0.tgz",
|
||||
"integrity": "sha1-y1wvHa4EDFbN1c2h3FxqOjOPQ2c="
|
||||
},
|
||||
"node-abi": {
|
||||
"version": "2.26.0",
|
||||
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.26.0.tgz",
|
||||
|
|
@ -1274,14 +1510,18 @@
|
|||
"oauth-sign": {
|
||||
"version": "0.9.0",
|
||||
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
|
||||
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
|
||||
},
|
||||
"object-assign": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
|
||||
},
|
||||
"object-keys": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
|
||||
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
|
||||
},
|
||||
"object-to-xml": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/object-to-xml/-/object-to-xml-2.0.0.tgz",
|
||||
|
|
@ -1293,6 +1533,11 @@
|
|||
"sanitizer": "0.1.3"
|
||||
}
|
||||
},
|
||||
"omggif": {
|
||||
"version": "1.0.10",
|
||||
"resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz",
|
||||
"integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw=="
|
||||
},
|
||||
"on-finished": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
|
||||
|
|
@ -1319,6 +1564,14 @@
|
|||
"resolved": "https://registry.npmjs.org/pako/-/pako-2.0.2.tgz",
|
||||
"integrity": "sha512-9e8DRI3+dRLomCmMBAH30B2ejh+blwXr7VmMEx/pVFZlSDA7oyI8uKMhKXr8IrZpoxBF2YlxUvhqRXzTT1i0NA=="
|
||||
},
|
||||
"parse-rect": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/parse-rect/-/parse-rect-1.2.0.tgz",
|
||||
"integrity": "sha512-4QZ6KYbnE6RTwg9E0HpLchUM9EZt6DnDxajFZZDSV4p/12ZJEvPO702DZpGvRYEPo00yKDys7jASi+/w7aO8LA==",
|
||||
"requires": {
|
||||
"pick-by-alias": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"parseurl": {
|
||||
"version": "1.3.3",
|
||||
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
|
||||
|
|
@ -1332,8 +1585,12 @@
|
|||
"performance-now": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
|
||||
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
|
||||
"dev": true
|
||||
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
|
||||
},
|
||||
"pick-by-alias": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/pick-by-alias/-/pick-by-alias-1.2.0.tgz",
|
||||
"integrity": "sha1-X3yysfIabh6ISgyHhVqko3NhEHs="
|
||||
},
|
||||
"pngjs": {
|
||||
"version": "6.0.0",
|
||||
|
|
@ -1361,6 +1618,11 @@
|
|||
"tunnel-agent": "^0.6.0"
|
||||
}
|
||||
},
|
||||
"primitive-pool": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/primitive-pool/-/primitive-pool-1.1.0.tgz",
|
||||
"integrity": "sha512-pl4l1R9OWWb4XmUpeX30yGz8ukZ25EiLhwlP2KqOqCb8NkwJt8qUeuCQEsk8CiAS7msICbPD18csu8jcIX7GNg=="
|
||||
},
|
||||
"process-nextick-args": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
|
||||
|
|
@ -1378,8 +1640,7 @@
|
|||
"psl": {
|
||||
"version": "1.8.0",
|
||||
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
|
||||
"integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
|
||||
},
|
||||
"pump": {
|
||||
"version": "3.0.0",
|
||||
|
|
@ -1393,14 +1654,31 @@
|
|||
"punycode": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
|
||||
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
|
||||
"dev": true
|
||||
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
|
||||
},
|
||||
"pxls": {
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npmjs.org/pxls/-/pxls-2.3.2.tgz",
|
||||
"integrity": "sha512-pQkwgbLqWPcuES5iEmGa10OlCf5xG0blkIF3dg7PpRZShbTYcvAdfFfGL03SMrkaSUaa/V0UpN9HWg40O2AIIw==",
|
||||
"requires": {
|
||||
"arr-flatten": "^1.1.0",
|
||||
"compute-dims": "^1.1.0",
|
||||
"flip-pixels": "^1.0.2",
|
||||
"is-browser": "^2.1.0",
|
||||
"is-buffer": "^2.0.3",
|
||||
"to-uint8": "^1.4.1"
|
||||
}
|
||||
},
|
||||
"qs": {
|
||||
"version": "6.7.0",
|
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
|
||||
"integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
|
||||
},
|
||||
"quantize": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/quantize/-/quantize-1.0.2.tgz",
|
||||
"integrity": "sha1-0lrCAKd7bXD0ASfKFxoQ4zyFRt4="
|
||||
},
|
||||
"range-parser": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
|
||||
|
|
@ -1442,6 +1720,11 @@
|
|||
"util-deprecate": "~1.0.1"
|
||||
}
|
||||
},
|
||||
"regex-regex": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/regex-regex/-/regex-regex-1.0.0.tgz",
|
||||
"integrity": "sha1-kEih6uuHD01IDavHb8Qs3MC8OnI="
|
||||
},
|
||||
"regexp-clone": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz",
|
||||
|
|
@ -1451,7 +1734,6 @@
|
|||
"version": "2.88.2",
|
||||
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
|
||||
"integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"aws-sign2": "~0.7.0",
|
||||
"aws4": "^1.8.0",
|
||||
|
|
@ -1478,8 +1760,7 @@
|
|||
"qs": {
|
||||
"version": "6.5.2",
|
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
|
||||
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
|
||||
"dev": true
|
||||
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -1656,7 +1937,6 @@
|
|||
"version": "1.16.1",
|
||||
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
|
||||
"integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"asn1": "~0.2.3",
|
||||
"assert-plus": "^1.0.0",
|
||||
|
|
@ -1680,6 +1960,15 @@
|
|||
"integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=",
|
||||
"dev": true
|
||||
},
|
||||
"string-to-arraybuffer": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/string-to-arraybuffer/-/string-to-arraybuffer-1.0.2.tgz",
|
||||
"integrity": "sha512-DaGZidzi93dwjQen5I2osxR9ERS/R7B1PFyufNMnzhj+fmlDQAc1DSDIJVJhgI8Oq221efIMbABUBdPHDRt43Q==",
|
||||
"requires": {
|
||||
"atob-lite": "^2.0.0",
|
||||
"is-base64": "^0.1.0"
|
||||
}
|
||||
},
|
||||
"string-width": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
|
||||
|
|
@ -1780,6 +2069,28 @@
|
|||
"debug": "^2.6.1"
|
||||
}
|
||||
},
|
||||
"to-array-buffer": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/to-array-buffer/-/to-array-buffer-3.2.0.tgz",
|
||||
"integrity": "sha512-zN33mwi0gpL+7xW1ITLfJ48CEj6ZQW0ZAP0MU+2W3kEY0PAIncyuxmD4OqkUVhPAbTP7amq9j/iwvZKYS+lzSQ==",
|
||||
"requires": {
|
||||
"flatten-vertex-data": "^1.0.2",
|
||||
"is-blob": "^2.0.1",
|
||||
"string-to-arraybuffer": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"to-uint8": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/to-uint8/-/to-uint8-1.4.1.tgz",
|
||||
"integrity": "sha512-o+ochsMlTZyucbww8It401FC2Rx+OP2RpDeYbA6h+y9HgedDl1UjdsJ9CmzKEG7AFP9es5PmJ4eDWeeeXihESg==",
|
||||
"requires": {
|
||||
"arr-flatten": "^1.1.0",
|
||||
"clamp": "^1.0.1",
|
||||
"is-base64": "^0.1.0",
|
||||
"is-float-array": "^1.0.0",
|
||||
"to-array-buffer": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"toidentifier": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
|
||||
|
|
@ -1806,7 +2117,6 @@
|
|||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
|
||||
"integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"psl": "^1.1.28",
|
||||
"punycode": "^2.1.1"
|
||||
|
|
@ -1823,8 +2133,7 @@
|
|||
"tweetnacl": {
|
||||
"version": "0.14.5",
|
||||
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
|
||||
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
|
||||
"dev": true
|
||||
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
|
||||
},
|
||||
"type-is": {
|
||||
"version": "1.6.18",
|
||||
|
|
@ -1835,12 +2144,22 @@
|
|||
"mime-types": "~2.1.24"
|
||||
}
|
||||
},
|
||||
"type-name": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/type-name/-/type-name-2.0.2.tgz",
|
||||
"integrity": "sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q="
|
||||
},
|
||||
"typedarray": {
|
||||
"version": "0.0.6",
|
||||
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
|
||||
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
|
||||
"dev": true
|
||||
},
|
||||
"unc-path-regex": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
|
||||
"integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo="
|
||||
},
|
||||
"universalify": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
|
||||
|
|
@ -1855,26 +2174,158 @@
|
|||
"version": "4.4.0",
|
||||
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz",
|
||||
"integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"punycode": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"utif": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz",
|
||||
"integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==",
|
||||
"requires": {
|
||||
"pako": "^1.0.5"
|
||||
},
|
||||
"dependencies": {
|
||||
"pako": {
|
||||
"version": "1.0.11",
|
||||
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
|
||||
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
||||
},
|
||||
"utils-copy": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/utils-copy/-/utils-copy-1.1.1.tgz",
|
||||
"integrity": "sha1-biuXmCqozXPhGCo+b4vsPA9AWKc=",
|
||||
"requires": {
|
||||
"const-pinf-float64": "^1.0.0",
|
||||
"object-keys": "^1.0.9",
|
||||
"type-name": "^2.0.0",
|
||||
"utils-copy-error": "^1.0.0",
|
||||
"utils-indexof": "^1.0.0",
|
||||
"utils-regex-from-string": "^1.0.0",
|
||||
"validate.io-array": "^1.0.3",
|
||||
"validate.io-buffer": "^1.0.1",
|
||||
"validate.io-nonnegative-integer": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"utils-copy-error": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/utils-copy-error/-/utils-copy-error-1.0.1.tgz",
|
||||
"integrity": "sha1-eR3jk8DwmJCv1Z88vqY18HmpT6U=",
|
||||
"requires": {
|
||||
"object-keys": "^1.0.9",
|
||||
"utils-copy": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"utils-indexof": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/utils-indexof/-/utils-indexof-1.0.0.tgz",
|
||||
"integrity": "sha1-IP6r8J7xAYtSNkPoOA57yD7GG1w=",
|
||||
"requires": {
|
||||
"validate.io-array-like": "^1.0.1",
|
||||
"validate.io-integer-primitive": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"utils-merge": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
|
||||
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
|
||||
},
|
||||
"utils-regex-from-string": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/utils-regex-from-string/-/utils-regex-from-string-1.0.0.tgz",
|
||||
"integrity": "sha1-/hopCfjeD/DVGCyA+8ZU1qaH0Yk=",
|
||||
"requires": {
|
||||
"regex-regex": "^1.0.0",
|
||||
"validate.io-string-primitive": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"uuid": {
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
|
||||
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
|
||||
"dev": true
|
||||
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
|
||||
},
|
||||
"validate.io-array": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz",
|
||||
"integrity": "sha1-W1osr9j4uFq7L4hroVPy2Tond00="
|
||||
},
|
||||
"validate.io-array-like": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/validate.io-array-like/-/validate.io-array-like-1.0.2.tgz",
|
||||
"integrity": "sha1-evn363tRcVvrIhVmjsXM5U+t21o=",
|
||||
"requires": {
|
||||
"const-max-uint32": "^1.0.2",
|
||||
"validate.io-integer-primitive": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"validate.io-buffer": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/validate.io-buffer/-/validate.io-buffer-1.0.2.tgz",
|
||||
"integrity": "sha1-hS1nNAIZFNXROvwyUxdh43IO1E4="
|
||||
},
|
||||
"validate.io-integer": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz",
|
||||
"integrity": "sha1-FoSWSAuVviJH7EQ/IjPeT4mHgGg=",
|
||||
"requires": {
|
||||
"validate.io-number": "^1.0.3"
|
||||
}
|
||||
},
|
||||
"validate.io-integer-primitive": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/validate.io-integer-primitive/-/validate.io-integer-primitive-1.0.0.tgz",
|
||||
"integrity": "sha1-qaoBA1X+hoHA/qbBp0rSQZyt3cY=",
|
||||
"requires": {
|
||||
"validate.io-number-primitive": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"validate.io-matrix-like": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/validate.io-matrix-like/-/validate.io-matrix-like-1.0.2.tgz",
|
||||
"integrity": "sha1-XsMqddCInaxzbepovdYUWxVe38M="
|
||||
},
|
||||
"validate.io-ndarray-like": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/validate.io-ndarray-like/-/validate.io-ndarray-like-1.0.0.tgz",
|
||||
"integrity": "sha1-2KOw7RZbvx0vwNAHMnDPpVIpWRk="
|
||||
},
|
||||
"validate.io-nonnegative-integer": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/validate.io-nonnegative-integer/-/validate.io-nonnegative-integer-1.0.0.tgz",
|
||||
"integrity": "sha1-gGkkOgjF+Y6VQTySnf17GPP28p8=",
|
||||
"requires": {
|
||||
"validate.io-integer": "^1.0.5"
|
||||
}
|
||||
},
|
||||
"validate.io-number": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz",
|
||||
"integrity": "sha1-9j/+2iSL8opnqNSODjtGGhZluvg="
|
||||
},
|
||||
"validate.io-number-primitive": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/validate.io-number-primitive/-/validate.io-number-primitive-1.0.0.tgz",
|
||||
"integrity": "sha1-0uAfICmJNp3PEVVElWQgOv5YTlU="
|
||||
},
|
||||
"validate.io-positive-integer": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/validate.io-positive-integer/-/validate.io-positive-integer-1.0.0.tgz",
|
||||
"integrity": "sha1-ftLQO0wnVYzGagCqsPDpIYFKZYI=",
|
||||
"requires": {
|
||||
"validate.io-integer": "^1.0.5"
|
||||
}
|
||||
},
|
||||
"validate.io-string-primitive": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/validate.io-string-primitive/-/validate.io-string-primitive-1.0.1.tgz",
|
||||
"integrity": "sha1-uBNbn7E3K94C/dU60dDM1t55j+4="
|
||||
},
|
||||
"vary": {
|
||||
"version": "1.1.2",
|
||||
|
|
@ -1885,13 +2336,17 @@
|
|||
"version": "1.10.0",
|
||||
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
|
||||
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"assert-plus": "^1.0.0",
|
||||
"core-util-is": "1.0.2",
|
||||
"extsprintf": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"weak-map": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.5.tgz",
|
||||
"integrity": "sha1-eWkVhNmGB/UHC9O3CkDmuyLkAes="
|
||||
},
|
||||
"wide-align": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
|
||||
|
|
|
|||
|
|
@ -24,6 +24,8 @@
|
|||
"express": "^4.17.1",
|
||||
"fs-extra": "^9.0.1",
|
||||
"hashmap": "^2.4.0",
|
||||
"image-pixels": "^2.2.2",
|
||||
"indexed-image-converter": "github:PretendoNetwork/indexed-image-converter",
|
||||
"memory-cache": "^0.2.0",
|
||||
"moment": "^2.29.1",
|
||||
"mongoose": "^5.10.14",
|
||||
|
|
@ -38,6 +40,7 @@
|
|||
"xmlbuilder2": "^2.4.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"bmp-js": "^0.1.0",
|
||||
"ejs": "^3.1.5",
|
||||
"express-subdomain": "^1.0.5",
|
||||
"multer": "^1.4.2",
|
||||
|
|
|
|||
|
|
@ -13,6 +13,9 @@ var HashMap = require('hashmap');
|
|||
let TGA = require('tga');
|
||||
let pako = require('pako');
|
||||
let PNG = require('pngjs').PNG;
|
||||
var bmp = require("bmp-js");
|
||||
const { toImage } = require('indexed-image-converter');
|
||||
const imagePixels = require('image-pixels');
|
||||
|
||||
let communityMap = new HashMap();
|
||||
let userMap = new HashMap();
|
||||
|
|
@ -165,25 +168,41 @@ let methods = {
|
|||
}
|
||||
return decryptedBody;
|
||||
},
|
||||
processPainting: function (painting) {
|
||||
let paintingBuffer = Buffer.from(painting, 'base64');
|
||||
let output = '';
|
||||
try
|
||||
{
|
||||
output = pako.inflate(paintingBuffer);
|
||||
processPainting: async function (painting, isTGA) {
|
||||
if (isTGA) {
|
||||
let paintingBuffer = Buffer.from(painting, 'base64');
|
||||
let output = '';
|
||||
try {
|
||||
output = pako.inflate(paintingBuffer);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
let tga = new TGA(Buffer.from(output));
|
||||
let png = new PNG({
|
||||
width: tga.width,
|
||||
height: tga.height
|
||||
});
|
||||
png.data = tga.pixels;
|
||||
let pngBuffer = PNG.sync.write(png);
|
||||
return `data:image/png;base64,${pngBuffer.toString('base64')}`;
|
||||
}
|
||||
catch (err)
|
||||
{
|
||||
console.error(err);
|
||||
else {
|
||||
let paintingBuffer = Buffer.from(painting, 'base64');
|
||||
let bitmap = bmp.decode(paintingBuffer)
|
||||
const tga = this.createBMPTgaBuffer(bitmap.width, bitmap.height, bitmap.data, false);
|
||||
|
||||
let output;
|
||||
try
|
||||
{
|
||||
output = pako.deflate(tga, {level: 6});
|
||||
}
|
||||
catch (err)
|
||||
{
|
||||
console.error(err);
|
||||
}
|
||||
|
||||
return new Buffer(output).toString('base64')
|
||||
}
|
||||
let tga = new TGA(Buffer.from(output));
|
||||
let png = new PNG({
|
||||
width: tga.width,
|
||||
height: tga.height
|
||||
});
|
||||
png.data = tga.pixels;
|
||||
let pngBuffer = PNG.sync.write(png);
|
||||
return `data:image/png;base64,${pngBuffer.toString('base64')}`;
|
||||
},
|
||||
nintendoPasswordHash: function(password, pid) {
|
||||
const pidBuffer = Buffer.alloc(4);
|
||||
|
|
@ -213,6 +232,35 @@ let methods = {
|
|||
return data;
|
||||
});
|
||||
},
|
||||
createBMPTgaBuffer: function(width, height, pixels, dontFlipY) {
|
||||
var buffer = Buffer.alloc(18 + pixels.length);
|
||||
// write header
|
||||
buffer.writeInt8(0, 0);
|
||||
buffer.writeInt8(0, 1);
|
||||
buffer.writeInt8(2, 2);
|
||||
buffer.writeInt16LE(0, 3);
|
||||
buffer.writeInt16LE(0, 5);
|
||||
buffer.writeInt8(0, 7);
|
||||
buffer.writeInt16LE(0, 8);
|
||||
buffer.writeInt16LE(0, 10);
|
||||
buffer.writeInt16LE(width, 12);
|
||||
buffer.writeInt16LE(height, 14);
|
||||
buffer.writeInt8(32, 16);
|
||||
buffer.writeInt8(8, 17);
|
||||
|
||||
var offset = 18;
|
||||
for (var i = 0; i < height; i++) {
|
||||
for (var j = 0; j < width; j++) {
|
||||
var idx = ((dontFlipY ? i : height - i - 1) * width + j) * 4;
|
||||
buffer.writeUInt8(pixels[idx + 1], offset++); // b
|
||||
buffer.writeUInt8(pixels[idx + 2], offset++); // g
|
||||
buffer.writeUInt8(pixels[idx + 3], offset++); // r
|
||||
buffer.writeUInt8(255, offset++); // a
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
},
|
||||
processLanguage: function (header) {
|
||||
if(!header)
|
||||
return translations.EN;
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ async function connect() {
|
|||
|
||||
function verifyConnected() {
|
||||
if (!connection) {
|
||||
throw new Error('Cannot make database requets without being connected');
|
||||
connect();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
30
src/middleware/auth.js
Normal file
30
src/middleware/auth.js
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
const config = require('../config.json');
|
||||
const util = require('../authentication');
|
||||
|
||||
function auth(request, response, next) {
|
||||
if(!request.headers["x-nintendo-parampack"] || !request.headers["x-nintendo-servicetoken"]) {
|
||||
return response.render('console/ban_notification.ejs', {
|
||||
user: null,
|
||||
error: "Missing auth headers"
|
||||
});
|
||||
}
|
||||
else {
|
||||
let pid = util.data.processServiceToken(request.headers["x-nintendo-servicetoken"]);
|
||||
let paramPackData = util.data.decodeParamPack(request.headers["x-nintendo-parampack"]);
|
||||
if(pid === null)
|
||||
return response.render('console/ban_notification.ejs', {
|
||||
user: null,
|
||||
error: "Unable to parse service token. Are you using a NNID?"
|
||||
});
|
||||
else {
|
||||
response.header('X-Nintendo-WhiteList', config.whitelist);
|
||||
request.lang = util.data.processLanguage(request.headers["x-nintendo-parampack"]);
|
||||
request.pid = pid;
|
||||
request.paramPackData = paramPackData;
|
||||
request.directory = request.subdomains[1];
|
||||
return next();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = auth;
|
||||
|
|
@ -3,6 +3,7 @@ const express = require('express');
|
|||
const morgan = require('morgan');
|
||||
const ejs = require('ejs');
|
||||
const xmlparser = require('./middleware/xml-parser');
|
||||
const auth = require('./middleware/auth');
|
||||
const database = require('./database');
|
||||
const logger = require('./logger');
|
||||
const config = require('./config.json');
|
||||
|
|
@ -28,6 +29,7 @@ app.use(express.urlencoded({
|
|||
parameterLimit: 100000
|
||||
}));
|
||||
app.use(xmlparser);
|
||||
app.use(auth);
|
||||
|
||||
|
||||
// import the servers into one
|
||||
|
|
|
|||
|
|
@ -5,17 +5,16 @@ const routes = require('./routes');
|
|||
|
||||
const router = express.Router();
|
||||
|
||||
const portal = express.Router();
|
||||
const ctr = express.Router();
|
||||
const console = express.Router();
|
||||
const admin = express.Router();
|
||||
const web_api = express.Router();
|
||||
|
||||
// Create subdomains
|
||||
logger.info('[JUXT-WEB] Creating \'Wii U\' subdomain');
|
||||
router.use(subdomain('portal.olv', portal));
|
||||
router.use(subdomain('portal.olv', console));
|
||||
|
||||
logger.info('[JUXT-WEB] Creating \'3DS\' subdomain');
|
||||
router.use(subdomain('ctr.olv', ctr));
|
||||
router.use(subdomain('ctr.olv', console));
|
||||
|
||||
logger.info('[JUXT-WEB] Creating \'Admin\' subdomain');
|
||||
router.use(subdomain('admin.olv', admin));
|
||||
|
|
@ -24,22 +23,14 @@ logger.info('[JUXT-WEB] Creating \'Web API\' subdomain');
|
|||
router.use(subdomain('web_api.olv', admin));
|
||||
|
||||
// Setup routes
|
||||
portal.use('/titles/show', routes.PORTAL_SHOW);
|
||||
portal.use('/communities', routes.PORTAL_COMMUNITIES);
|
||||
portal.use('/users', routes.PORTAL_USER);
|
||||
portal.use('/posts', routes.PORTAL_POST);
|
||||
portal.use('/activity-feed', routes.PORTAL_FEED);
|
||||
portal.use('/messages', routes.PORTAL_MESSAGES);
|
||||
portal.use('/news', routes.PORTAL_NEWS);
|
||||
portal.use('/', routes.PORTAL_WEB);
|
||||
|
||||
ctr.use('/titles/show', routes.CTR_SHOW);
|
||||
ctr.use('/communities', routes.CTR_COMMUNITIES);
|
||||
ctr.use('/users', routes.CTR_USER);
|
||||
ctr.use('/posts', routes.CTR_POST);
|
||||
ctr.use('/news', routes.CTR_NEWS);
|
||||
ctr.use('/activity-feed', routes.CTR_FEED);
|
||||
ctr.use('/', routes.CTR_WEB);
|
||||
console.use('/titles/show', routes.PORTAL_SHOW);
|
||||
console.use('/communities', routes.PORTAL_COMMUNITIES);
|
||||
console.use('/users', routes.PORTAL_USER);
|
||||
console.use('/posts', routes.PORTAL_POST);
|
||||
console.use('/activity-feed', routes.PORTAL_FEED);
|
||||
console.use('/messages', routes.PORTAL_MESSAGES);
|
||||
console.use('/news', routes.PORTAL_NEWS);
|
||||
console.use('/', routes.PORTAL_WEB);
|
||||
|
||||
admin.use('/', routes.WEB_ADMIN);
|
||||
admin.use('/v1/', routes.WEB_API);
|
||||
|
|
|
|||
|
|
@ -426,7 +426,7 @@ router.get('/users/loadPosts', function (req, res) {
|
|||
let communityMap = await util.data.getCommunityHash();
|
||||
if(newPosts.length > 0)
|
||||
{
|
||||
res.render('portal/more_posts.ejs', {
|
||||
res.render('console/more_posts.ejs', {
|
||||
communityMap: communityMap,
|
||||
moment: moment,
|
||||
user: user,
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ router.get('/css/juxt.css', function (req, res) {
|
|||
});
|
||||
|
||||
router.get('/favicon.ico', function (req, res) {
|
||||
res.sendFile('css/favicon.ico', {root: path.join(__dirname, '../../../../webfiles/portal/')});
|
||||
res.sendFile('css/favicon.ico', {root: path.join(__dirname, '../../../../webfiles/console/')});
|
||||
});
|
||||
|
||||
router.get('/icons/:image_id.png', function (req, res) {
|
||||
|
|
|
|||
135
src/services/juxt-web/routes/console/communities.js
Normal file
135
src/services/juxt-web/routes/console/communities.js
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
var express = require('express');
|
||||
var xml = require('object-to-xml');
|
||||
const database = require('../../../../database');
|
||||
const util = require('../../../../authentication');
|
||||
const config = require('../../../../config.json');
|
||||
var multer = require('multer');
|
||||
var moment = require('moment');
|
||||
var upload = multer({ dest: 'uploads/' });
|
||||
var router = express.Router();
|
||||
|
||||
router.get('/', async function (req, res) {
|
||||
let popularCommunities = await database.getMostPopularCommunities(9);
|
||||
let newCommunities = await database.getNewCommunities(6);
|
||||
res.render(req.directory + '/communities.ejs', {
|
||||
// EJS variable and server-side variable
|
||||
popularCommunities: popularCommunities,
|
||||
newCommunities: newCommunities,
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: req.lang
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/all', async function (req, res) {
|
||||
let communities = await database.getCommunities(90);
|
||||
res.render(req.directory + '/all_communities.ejs', {
|
||||
communities: communities,
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: req.lang
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/announcements', async function (req, res) {
|
||||
let user = await database.getUserByPID(req.pid);
|
||||
let community = await database.getCommunityByID('announcements');
|
||||
let communityMap = await util.data.getCommunityHash();
|
||||
let newPosts = await database.getNumberNewCommunityPostsByID(community, 25);
|
||||
let totalNumPosts = await database.getTotalPostsByCommunity(community);
|
||||
res.render(req.directory + '/announcements.ejs', {
|
||||
moment: moment,
|
||||
community: community,
|
||||
newPosts: newPosts,
|
||||
communityMap: communityMap,
|
||||
user: user,
|
||||
totalNumPosts: totalNumPosts,
|
||||
account_server: config.account_server_domain.slice(8),
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: req.lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/:communityID/:type', async function (req, res) {
|
||||
let user = await database.getUserByPID(req.pid);
|
||||
if(req.params.communityID === 'announcements')
|
||||
res.redirect('/communities/announcements')
|
||||
let community = await database.getCommunityByID(req.params.communityID.toString());
|
||||
let communityMap = await util.data.getCommunityHash();
|
||||
let newPosts = await database.getNumberNewCommunityPostsByID(community, 5);
|
||||
let totalNumPosts = await database.getTotalPostsByCommunity(community)
|
||||
res.render(req.directory + '/community.ejs', {
|
||||
// EJS variable and server-side variable
|
||||
moment: moment,
|
||||
community: community,
|
||||
communityMap: communityMap,
|
||||
newPosts: newPosts,
|
||||
totalNumPosts: totalNumPosts,
|
||||
user: user,
|
||||
account_server: config.account_server_domain.slice(8),
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: req.lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/:communityID/:type/loadPosts', async function (req, res) {
|
||||
let post = await database.getPostByID(req.query.postID);
|
||||
let user = await database.getUserByPID(req.pid);
|
||||
let communityMap = await util.data.getCommunityHash();
|
||||
let posts;
|
||||
if(post !== null)
|
||||
posts = await database.getCommunityPostsAfterTimestamp(post, 1);
|
||||
else {
|
||||
let community = await database.getCommunityByID(req.params.communityID)
|
||||
switch (req.params.type) {
|
||||
case 'popular':
|
||||
posts = await database.getNumberPopularCommunityPostsByID(community, 10);
|
||||
break;
|
||||
case 'verified':
|
||||
posts = await database.getNumberVerifiedCommunityPostsByID(community, 10);
|
||||
break;
|
||||
default:
|
||||
posts = await database.getNewPostsByCommunity(community, 10);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(posts.length > 0)
|
||||
{
|
||||
res.render(req.directory + '/more_posts.ejs', {
|
||||
communityMap: communityMap,
|
||||
moment: moment,
|
||||
database: database,
|
||||
user: user,
|
||||
newPosts: posts,
|
||||
account_server: config.account_server_domain.slice(8),
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: req.lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
res.sendStatus(204);
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/follow', upload.none(), async function (req, res) {
|
||||
let community = await database.getCommunityByID(req.body.communityID);
|
||||
let user = await database.getUserByPID(req.pid);
|
||||
if(req.body.type === 'true' && user !== null && user.followed_communities.indexOf(community.community_id) === -1)
|
||||
{
|
||||
community.upFollower();
|
||||
user.addToCommunities(community.community_id);
|
||||
res.sendStatus(200);
|
||||
}
|
||||
else if(req.body.type === 'false' && user !== null && user.followed_communities.indexOf(community.community_id) !== -1)
|
||||
{
|
||||
community.downFollower();
|
||||
user.removeFromCommunities(community.community_id);
|
||||
res.sendStatus(200);
|
||||
}
|
||||
else
|
||||
res.sendStatus(423);
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
53
src/services/juxt-web/routes/console/feed.js
Normal file
53
src/services/juxt-web/routes/console/feed.js
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
var express = require('express');
|
||||
var xml = require('object-to-xml');
|
||||
const database = require('../../../../database');
|
||||
const util = require('../../../../authentication');
|
||||
const config = require('../../../../config.json');
|
||||
var moment = require('moment');
|
||||
var router = express.Router();
|
||||
|
||||
router.get('/', async function (req, res) {
|
||||
let user = await database.getUserByPID(req.pid);
|
||||
let communityMap = await util.data.getCommunityHash();
|
||||
let posts = await database.getNewsFeed(user, 3);
|
||||
res.render(req.directory + '/feed.ejs', {
|
||||
moment: moment,
|
||||
user: user,
|
||||
posts: posts,
|
||||
communityMap: communityMap,
|
||||
account_server: config.account_server_domain.slice(8),
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: req.lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/loadposts', async function (req, res) {
|
||||
let post = await database.getPostByID(req.query.postID);
|
||||
let user = await database.getUserByPID(req.pid);
|
||||
let communityMap = await util.data.getCommunityHash();
|
||||
let posts;
|
||||
if(post !== null)
|
||||
posts = await database.getNewsFeedAfterTimestamp(user, 3, post);
|
||||
|
||||
if(posts.length > 0)
|
||||
{
|
||||
res.render(req.directory + '/more_posts.ejs', {
|
||||
communityMap: communityMap,
|
||||
moment: moment,
|
||||
database: database,
|
||||
user: user,
|
||||
newPosts: posts,
|
||||
account_server: config.account_server_domain.slice(8),
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: req.lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
res.sendStatus(204);
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
25
src/services/juxt-web/routes/console/messages.js
Normal file
25
src/services/juxt-web/routes/console/messages.js
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
var express = require('express');
|
||||
var xml = require('object-to-xml');
|
||||
const database = require('../../../../database');
|
||||
const util = require('../../../../authentication');
|
||||
const config = require('../../../../config.json');
|
||||
var moment = require('moment');
|
||||
var router = express.Router();
|
||||
|
||||
router.get('/', async function (req, res) {
|
||||
let user = await database.getUserByPID(req.pid);
|
||||
res.render(req.directory + '/messages.ejs', {
|
||||
moment: moment,
|
||||
user: user,
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: req.lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
user.notification_list.filter(noti => noti.read === false).forEach(function(notification) {
|
||||
notification.read = true;
|
||||
});
|
||||
user.markModified('notification_list');
|
||||
user.save();
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
24
src/services/juxt-web/routes/console/notifications.js
Normal file
24
src/services/juxt-web/routes/console/notifications.js
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
var express = require('express');
|
||||
var xml = require('object-to-xml');
|
||||
const database = require('../../../../database');
|
||||
const util = require('../../../../authentication');
|
||||
const config = require('../../../../config.json');
|
||||
var moment = require('moment');
|
||||
var router = express.Router();
|
||||
|
||||
router.get('/', async function (req, res) {
|
||||
let user = await database.getUserByPID(req.pid);
|
||||
res.render(req.directory + '/notifications.ejs', {
|
||||
moment: moment,
|
||||
user: user,
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: req.lang
|
||||
});
|
||||
user.notification_list.filter(noti => noti.read === false).forEach(function(notification) {
|
||||
notification.read = true;
|
||||
});
|
||||
user.markModified('notification_list');
|
||||
user.save();
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
154
src/services/juxt-web/routes/console/posts.js
Normal file
154
src/services/juxt-web/routes/console/posts.js
Normal file
|
|
@ -0,0 +1,154 @@
|
|||
var express = require('express');
|
||||
var xml = require('object-to-xml');
|
||||
const database = require('../../../../database');
|
||||
const util = require('../../../../authentication');
|
||||
const config = require('../../../../config.json');
|
||||
const { POST } = require('../../../../models/post');
|
||||
var multer = require('multer');
|
||||
var moment = require('moment');
|
||||
var upload = multer({ dest: 'uploads/' });
|
||||
const snowflake = require('node-snowflake').Snowflake;
|
||||
var router = express.Router();
|
||||
|
||||
router.post('/empathy', async function (req, res) {
|
||||
let post = await database.getPostByID(req.body.postID);
|
||||
let user = await database.getUserByPID(req.pid);
|
||||
if(req.body.type === 'up' && user.likes.indexOf(post.id) === -1 && user.id !== post.pid)
|
||||
{
|
||||
post.upEmpathy();
|
||||
user.addToLikes(post.id)
|
||||
res.sendStatus(200);
|
||||
}
|
||||
else if(req.body.type === 'down' && user.likes.indexOf(post.id) !== -1 && user.id !== post.pid)
|
||||
{
|
||||
post.downEmpathy();
|
||||
user.removeFromLike(post.id);
|
||||
res.sendStatus(200);
|
||||
}
|
||||
else
|
||||
res.sendStatus(423);
|
||||
});
|
||||
|
||||
router.get('/:post_id', async function (req, res) {
|
||||
let user = await database.getUserByPID(req.pid);
|
||||
let post = await database.getPostByID(req.params.post_id.toString());
|
||||
if(post === null)
|
||||
return res.sendStatus(404);
|
||||
let community = await database.getCommunityByID(post.community_id);
|
||||
let communityMap = await util.data.getCommunityHash();
|
||||
let replies = await database.getPostReplies(req.params.post_id.toString(), 25)
|
||||
res.render(req.directory + '/post.ejs', {
|
||||
moment: moment,
|
||||
user: user,
|
||||
post: post,
|
||||
replies: replies,
|
||||
community: community,
|
||||
communityMap: communityMap,
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: req.lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
});
|
||||
|
||||
router.post('/:post_id/new', upload.none(), async function (req, res, next) {
|
||||
let user = await database.getUserByPID(req.pid);
|
||||
if(user.account_status !== 0) {
|
||||
throw new Error('User not allowed to post')
|
||||
}
|
||||
let parentPost = await database.getPostByID(req.params.post_id.toString())
|
||||
let community = await database.getCommunityByID(req.body.olive_community_id);
|
||||
let appData = "";
|
||||
if (req.body.app_data) {
|
||||
appData = req.body.app_data.replace(/\0/g, "").trim();
|
||||
}
|
||||
let painting = "", paintingURI = "";
|
||||
if (req.body.painting && req.body.painting !== 'eJztwTEBACAMA7DCNRlIQRbu4ZoEviTJTNvjZNUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL55fYLL3w==') {
|
||||
painting = req.body.painting.replace(/\0/g, "").trim();
|
||||
paintingURI = await util.data.processPainting(painting);
|
||||
}
|
||||
let screenshot = "";
|
||||
if (req.body.screenshot) {
|
||||
screenshot = req.body.screenshot.replace(/\0/g, "").trim();
|
||||
}
|
||||
parentPost.reply_count = parentPost.reply_count + 1;
|
||||
parentPost.save();
|
||||
const document = {
|
||||
title_id: community.title_id[0],
|
||||
community_id: community.community_id,
|
||||
screen_name: user.user_id,
|
||||
body: req.body.body,
|
||||
app_data: appData,
|
||||
painting: painting,
|
||||
painting_uri: paintingURI,
|
||||
screenshot: screenshot,
|
||||
country_id: req.paramPackData.country_id,
|
||||
created_at: new Date(),
|
||||
feeling_id: req.body.emotion,
|
||||
id: snowflake.nextId(),
|
||||
is_autopost: req.body.is_autopost,
|
||||
is_spoiler: (req.body.spoiler) ? 1 : 0,
|
||||
is_app_jumpable: req.body.is_app_jumpable,
|
||||
language_id: req.body.language_id,
|
||||
mii: user.mii,
|
||||
mii_face_url: user.pfp_uri,
|
||||
pid: req.pid,
|
||||
platform_id: req.paramPackData.platform_id,
|
||||
region_id: req.paramPackData.region_id,
|
||||
verified: user.official,
|
||||
parent: parentPost.id
|
||||
};
|
||||
const newPost = new POST(document);
|
||||
newPost.save();
|
||||
await database.pushNewNotificationByPID(parentPost.pid, user.user_id + ' replied to your post!', '/posts/' + parentPost.id)
|
||||
res.redirect('/posts/' + req.params.post_id.toString());
|
||||
});
|
||||
|
||||
router.post('/new', upload.none(), async function (req, res, next) {
|
||||
let user = await database.getUserByPID(req.pid);
|
||||
if(user.account_status !== 0) {
|
||||
throw new Error('User not allowed to post')
|
||||
}
|
||||
let community = await database.getCommunityByID(req.body.olive_community_id);
|
||||
let appData = "";
|
||||
if (req.body.app_data) {
|
||||
appData = req.body.app_data.replace(/\0/g, "").trim();
|
||||
}
|
||||
let painting = "", paintingURI = "";
|
||||
if (req.body.painting && req.body.painting !== 'eJztwTEBACAMA7DCNRlIQRbu4ZoEviTJTNvjZNUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL55fYLL3w==') {
|
||||
painting = req.body.painting.replace(/\0/g, "").trim();
|
||||
paintingURI = await util.data.processPainting(painting, true);
|
||||
}
|
||||
let screenshot = "";
|
||||
if (req.body.screenshot) {
|
||||
screenshot = req.body.screenshot.replace(/\0/g, "").trim();
|
||||
}
|
||||
const document = {
|
||||
title_id: community.title_id[0],
|
||||
community_id: community.community_id,
|
||||
screen_name: user.user_id,
|
||||
body: req.body.body,
|
||||
app_data: appData,
|
||||
painting: painting,
|
||||
painting_uri: paintingURI,
|
||||
screenshot: screenshot,
|
||||
country_id: req.paramPackData.country_id,
|
||||
created_at: new Date(),
|
||||
feeling_id: req.body.emotion,
|
||||
id: snowflake.nextId(),
|
||||
is_autopost: req.body.is_autopost,
|
||||
is_spoiler: (req.body.spoiler) ? 1 : 0,
|
||||
is_app_jumpable: req.body.is_app_jumpable,
|
||||
language_id: req.body.language_id,
|
||||
mii: user.mii,
|
||||
mii_face_url: user.pfp_uri,
|
||||
pid: req.pid,
|
||||
platform_id: req.paramPackData.platform_id,
|
||||
region_id: req.paramPackData.region_id,
|
||||
verified: user.official
|
||||
};
|
||||
const newPost = new POST(document);
|
||||
newPost.save();
|
||||
res.redirect('/communities/' + community.community_id + '/new');
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
99
src/services/juxt-web/routes/console/show.js
Normal file
99
src/services/juxt-web/routes/console/show.js
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
var express = require('express');
|
||||
var xml = require('object-to-xml');
|
||||
const database = require('../../../../database');
|
||||
const util = require('../../../../authentication');
|
||||
const config = require('../../../../config.json');
|
||||
var moment = require('moment');
|
||||
var router = express.Router();
|
||||
|
||||
router.get('/', async function (req, res) {
|
||||
console.log(req.pid);
|
||||
try {
|
||||
if(req.pid === 1000000000) {
|
||||
res.render(req.directory + '/guest_notice.ejs', {
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: req.lang,
|
||||
});
|
||||
}
|
||||
else {
|
||||
let user = await database.getUserByPID(req.pid);
|
||||
if(user === null)
|
||||
{
|
||||
res.render(req.directory + '/first_run.ejs', {
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: req.lang,
|
||||
});
|
||||
}
|
||||
else {
|
||||
if(moment(user.ban_lift_date).format('YYYY-MM-DD') <= moment().format('YYYY-MM-DD') && user.account_status !== 3) {
|
||||
user.account_status = 0;
|
||||
user.save()
|
||||
}
|
||||
/**
|
||||
* Account Status
|
||||
* 0 - Fine
|
||||
* 1 - Limited from Posting
|
||||
* 2 - Temporary Ban
|
||||
* 3 - Forever Ban
|
||||
*/
|
||||
if(user.account_status !== 0)
|
||||
{
|
||||
res.render(req.directory + '/ban_notification.ejs', {
|
||||
user: user,
|
||||
moment: moment,
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: req.lang,
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
let popularCommunities = await database.getMostPopularCommunities(9);
|
||||
let newCommunities = await database.getNewCommunities(6);
|
||||
res.render(req.directory + '/communities.ejs', {
|
||||
popularCommunities: popularCommunities,
|
||||
newCommunities: newCommunities,
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: req.lang
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/first', async function (req, res) {
|
||||
res.render(req.directory + '/first_run.ejs', {
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: req.lang,
|
||||
});
|
||||
});
|
||||
|
||||
router.post('/newUser', async function (req, res) {
|
||||
if(req.pid === null)
|
||||
{
|
||||
res.sendStatus(401);
|
||||
}
|
||||
else
|
||||
{
|
||||
let user = await database.getUserByPID(req.pid);
|
||||
if(user === null)
|
||||
{
|
||||
await util.data.create_user(req.pid, req.body.experience, req.body.notifications, req.body.region);
|
||||
util.data.refreshCache();
|
||||
if(await database.getUserByPID(req.pid) !== null)
|
||||
res.sendStatus(200);
|
||||
else
|
||||
res.sendStatus(504);
|
||||
}
|
||||
else
|
||||
{
|
||||
res.sendStatus(504);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
215
src/services/juxt-web/routes/console/userpage.js
Normal file
215
src/services/juxt-web/routes/console/userpage.js
Normal file
|
|
@ -0,0 +1,215 @@
|
|||
var express = require('express');
|
||||
var xml = require('object-to-xml');
|
||||
const database = require('../../../../database');
|
||||
const util = require('../../../../authentication');
|
||||
const config = require('../../../../config.json');
|
||||
var multer = require('multer');
|
||||
var moment = require('moment');
|
||||
var upload = multer({ dest: 'uploads/' });
|
||||
var router = express.Router();
|
||||
|
||||
router.get('/menu', async function (req, res) {
|
||||
let user = await database.getUserByPID(req.pid);
|
||||
res.render('ctr/user_menu.ejs', {
|
||||
user: user,
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/me', async function (req, res) {
|
||||
let user = await database.getUserByPID(req.pid);
|
||||
let newPosts = await database.getNumberUserPostsByID(req.pid, 10);
|
||||
let numPosts = await database.getTotalPostsByUserID(req.pid);
|
||||
let communityMap = await util.data.getCommunityHash();
|
||||
res.render(req.directory + '/me_page.ejs', {
|
||||
communityMap: communityMap,
|
||||
moment: moment,
|
||||
user: user,
|
||||
newPosts: newPosts,
|
||||
numPosts: numPosts,
|
||||
account_server: config.account_server_domain.slice(8),
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: req.lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
});
|
||||
|
||||
router.post('/me', upload.none(), async function (req, res) {
|
||||
let user = await database.getUserByPID(req.pid);
|
||||
|
||||
user.country_visibility = !!req.body.country;
|
||||
user.birthday_visibility = !!req.body.birthday;
|
||||
user.game_skill_visibility = !!req.body.experience;
|
||||
user.profile_comment_visibility = !!req.body.commentShow;
|
||||
|
||||
if (req.body.comment)
|
||||
user.setProfileComment(req.body.comment);
|
||||
else
|
||||
user.setProfileComment('');
|
||||
|
||||
res.redirect('/users/me');
|
||||
});
|
||||
|
||||
router.get('/show', async function (req, res) {
|
||||
var userID = req.query.pid;
|
||||
if(userID === 'me') {
|
||||
res.sendStatus(504);
|
||||
return;
|
||||
}
|
||||
let parentUser = await database.getUserByPID(req.pid);
|
||||
let user = await database.getUserByPID(userID);
|
||||
if(user === null)
|
||||
res.sendStatus(404);
|
||||
if(user.pid === parentUser.pid)
|
||||
res
|
||||
let newPosts = await database.getNumberUserPostsByID(user.pid, 10);
|
||||
let numPosts = await database.getTotalPostsByUserID(user.pid);
|
||||
let communityMap = await util.data.getCommunityHash();
|
||||
res.render(req.directory + '/user_page.ejs', {
|
||||
// EJS variable and server-side variable
|
||||
communityMap: communityMap,
|
||||
moment: moment,
|
||||
user: user,
|
||||
newPosts: newPosts,
|
||||
numPosts: numPosts,
|
||||
parentUser: parentUser,
|
||||
account_server: config.account_server_domain.slice(8),
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: req.lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/loadPosts', async function (req, res) {
|
||||
let post = await database.getPostByID(req.query.postID);
|
||||
let user = await database.getUserByPID(req.pid);
|
||||
let newPosts = '';
|
||||
if(post !== null)
|
||||
newPosts = await database.getUserPostsAfterTimestamp(post, 10);
|
||||
else
|
||||
newPosts = await database.getNumberUserPostsByID(req.query.pid, 10);
|
||||
|
||||
let communityMap = await util.data.getCommunityHash();
|
||||
if(newPosts.length > 0)
|
||||
{
|
||||
res.render(req.directory + '/more_posts.ejs', {
|
||||
communityMap: communityMap,
|
||||
moment: moment,
|
||||
user: user,
|
||||
newPosts: newPosts,
|
||||
account_server: config.account_server_domain.slice(8),
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: req.lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
res.sendStatus(204)
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/following', async function (req, res) {
|
||||
let user = await database.getUserByPID(req.query.pid);
|
||||
let followers = await database.getFollowedUsers(user);
|
||||
let communities = user.followed_communities;
|
||||
let communityMap = await util.data.getCommunityHash();
|
||||
|
||||
if(user.followed_users[0] === '0')
|
||||
followers.splice(0, 1);
|
||||
if(communities[0] === '0')
|
||||
communities.splice(0, 1);
|
||||
|
||||
if(user.following > 0)
|
||||
{
|
||||
res.render(req.directory + '/following_list.ejs', {
|
||||
moment: moment,
|
||||
user: user,
|
||||
followers: followers,
|
||||
communities: communities,
|
||||
communityMap: communityMap,
|
||||
account_server: config.account_server_domain.slice(8),
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: req.lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
res.send('<p class="no-posts-text">' + req.lang.user_page.no_following + '</p>')
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/followers', async function (req, res) {
|
||||
let user = await database.getUserByPID(req.query.pid);
|
||||
let followers = await database.getFollowingUsers(user);
|
||||
let communities = [];
|
||||
let userMap = await util.data.getUserHash();
|
||||
|
||||
if(followers[0] === '0')
|
||||
followers.splice(0, 1);
|
||||
|
||||
if(user.followers > 0)
|
||||
{
|
||||
res.render(req.directory + '/following_list.ejs', {
|
||||
moment: moment,
|
||||
user: user,
|
||||
followers: followers,
|
||||
communities: communities,
|
||||
userMap: userMap,
|
||||
account_server: config.account_server_domain.slice(8),
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: req.lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
res.send('<p class="no-posts-text">' + req.lang.user_page.no_followers + '</p>')
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/friends', async function (req, res) {
|
||||
let user = await database.getUserByPID(req.query.pid);
|
||||
let friends = null;
|
||||
let userMap = await util.data.getUserHash();
|
||||
|
||||
if(friends)
|
||||
{
|
||||
res.render(req.directory + '/following_list.ejs', {
|
||||
moment: moment,
|
||||
user: user,
|
||||
friends: friends,
|
||||
userMap: userMap,
|
||||
account_server: config.account_server_domain.slice(8),
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: req.lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
res.send('<p class="no-posts-text">' + req.lang.user_page.no_friends + '</p>')
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/follow', upload.none(), async function (req, res) {
|
||||
let userToFollow = await database.getUserByPID(req.body.userID);
|
||||
let user = await database.getUserByPID(req.pid);
|
||||
if(req.body.type === 'true' && user !== null && user.followed_users.indexOf(userToFollow.pid) === -1)
|
||||
{
|
||||
userToFollow.addToFollowers(user.pid);
|
||||
user.addToUsers(userToFollow.pid);
|
||||
res.sendStatus(200);
|
||||
await database.pushNewNotificationByPID(userToFollow.pid, user.user_id + ' ' + req.lang.notifications.new_follower, '/users/show?pid=' + user.pid)
|
||||
}
|
||||
else if(req.body.type === 'false' && user !== null && user.followed_users.indexOf(userToFollow.pid) !== -1)
|
||||
{
|
||||
userToFollow.removeFromFollowers(user.pid);
|
||||
user.removeFromUsers(userToFollow.pid);
|
||||
res.sendStatus(200);
|
||||
}
|
||||
else
|
||||
res.sendStatus(423);
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
129
src/services/juxt-web/routes/console/web.js
Normal file
129
src/services/juxt-web/routes/console/web.js
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
var express = require('express');
|
||||
var router = express.Router();
|
||||
var xml = require('object-to-xml');
|
||||
const database = require('../../../../database');
|
||||
const util = require('../../../../authentication');
|
||||
var path = require('path');
|
||||
|
||||
router.get('/css/:filename', function (req, res) {
|
||||
res.set("Content-Type", "text/css");
|
||||
res.sendFile('/css/' + req.params.filename, {root: path.join(__dirname, '../../../../webfiles/' + req.directory)});
|
||||
});
|
||||
|
||||
router.get('/js/:filename', function (req, res) {
|
||||
res.set("Content-Type", "application/javascript; charset=utf-8");
|
||||
res.sendFile('/js/' + req.params.filename, {root: path.join(__dirname, '../../../../webfiles/' + req.directory)});
|
||||
});
|
||||
|
||||
router.get('/fonts/:filename', function (req, res) {
|
||||
res.set("Content-Type", "font/woff");
|
||||
res.sendFile('/fonts/' + req.params.filename, {root: path.join(__dirname, '../../../../webfiles/' + req.directory)});
|
||||
});
|
||||
|
||||
router.get('/favicon.ico', function (req, res) {
|
||||
res.set("Content-Type", "image/x-icon");
|
||||
res.sendFile('/css/favicon.ico', {root: path.join(__dirname, '../../../../webfiles/' + req.directory)});
|
||||
});
|
||||
|
||||
router.get('/icons/:image_id.png', async function (req, res) {
|
||||
res.set("Content-Type", "image/png");
|
||||
let community = await database.getCommunityByID(req.params.image_id.toString());
|
||||
if(community !== null) {
|
||||
if(community.browser_icon.indexOf('data:image/png;base64,') !== -1)
|
||||
res.send(Buffer.from(community.browser_icon.replace('data:image/png;base64,',''), 'base64'));
|
||||
else
|
||||
res.send(Buffer.from(community.browser_icon, 'base64'));
|
||||
}
|
||||
else {
|
||||
let user = await database.getUserByPID(req.params.image_id.toString());
|
||||
if(user !== null)
|
||||
if(user.pfp_uri.indexOf('data:image/png;base64,') !== -1)
|
||||
res.send(Buffer.from(user.pfp_uri.replace('data:image/png;base64,',''), 'base64'));
|
||||
else
|
||||
res.send(Buffer.from(user.pfp_uri, 'base64'));
|
||||
else
|
||||
res.sendStatus(404);
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/tip/:image_id.png', async function (req, res) {
|
||||
res.set("Content-Type", "image/png");
|
||||
let community = await database.getCommunityByID(req.params.image_id.toString());
|
||||
if(community !== null) {
|
||||
if(community.browser_thumbnail.indexOf('data:image/png;base64,') !== -1)
|
||||
res.send(Buffer.from(community.browser_thumbnail.replace('data:image/png;base64,',''), 'base64'));
|
||||
else
|
||||
res.send(Buffer.from(community.browser_thumbnail, 'base64'));
|
||||
}
|
||||
else {
|
||||
let user = await database.getUserByPID(req.params.image_id.toString());
|
||||
if (user !== null)
|
||||
if (user.pfp_uri.indexOf('data:image/png;base64,') !== -1)
|
||||
res.send(Buffer.from(user.pfp_uri.replace('data:image/png;base64,', ''), 'base64'));
|
||||
else
|
||||
res.send(Buffer.from(user.pfp_uri, 'base64'));
|
||||
else
|
||||
res.sendStatus(404);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
router.get('/banner/:image_id.png', async function (req, res) {
|
||||
res.set("Content-Type", "image/png");
|
||||
let community = await database.getCommunityByID(req.params.image_id.toString());
|
||||
if(community !== null)
|
||||
if(community.WiiU_browser_header.indexOf('data:image/png;base64,') !== -1)
|
||||
res.send(Buffer.from(community.WiiU_browser_header.replace('data:image/png;base64,',''), 'base64'));
|
||||
else
|
||||
res.send(Buffer.from(community.WiiU_browser_header, 'base64'));
|
||||
else
|
||||
res.sendStatus(404);
|
||||
});
|
||||
|
||||
router.get('/screenshot/:image_id.png', async function (req, res) {
|
||||
res.set("Content-Type", "image/png");
|
||||
let post = await database.getPostByID(req.params.image_id.toString());
|
||||
if(post !== null && post.screenshot !== '')
|
||||
if(post.screenshot.indexOf('data:image/png;base64,') !== -1)
|
||||
res.send(Buffer.from(post.screenshot.replace('data:image/png;base64,',''), 'base64'));
|
||||
else
|
||||
res.send(Buffer.from(post.screenshot, 'base64'));
|
||||
else
|
||||
res.sendStatus(404);
|
||||
});
|
||||
|
||||
router.get('/drawing/:image_id.png', async function (req, res) {
|
||||
res.set("Content-Type", "image/png");
|
||||
let post = await database.getPostByID(req.params.image_id.toString());
|
||||
if(post !== null && post.painting_uri !== '')
|
||||
if(post.painting_uri.indexOf('data:image/png;base64,') !== -1)
|
||||
res.send(Buffer.from(post.painting_uri.replace('data:image/png;base64,',''), 'base64'));
|
||||
else
|
||||
res.send(Buffer.from(post.painting_uri, 'base64'));
|
||||
else
|
||||
res.sendStatus(404);
|
||||
});
|
||||
|
||||
router.get('/notifications.json', async function (req, res) {
|
||||
let user = await database.getUserByPID(req.pid);
|
||||
if(user.notification_list) {
|
||||
res.send(
|
||||
{
|
||||
message_count: 0,
|
||||
notification_count: user.notification_list.filter(notification => notification.read === false).length,
|
||||
}
|
||||
)
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/:post_id/oembed.json', async function (req, res) {
|
||||
let post = await database.getPostByID(req.params.post_id.toString());
|
||||
let user = await database.getUserByPID(post.pid);
|
||||
let doc = {
|
||||
"author_name": user.user_id,
|
||||
"author_url": "https://portal.olv.pretendo.cc/users/show?pid=" + user.pid,
|
||||
}
|
||||
res.send(doc)
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
|
@ -1,226 +0,0 @@
|
|||
var express = require('express');
|
||||
var xml = require('object-to-xml');
|
||||
const database = require('../../../../database');
|
||||
const util = require('../../../../authentication');
|
||||
var multer = require('multer');
|
||||
var moment = require('moment');
|
||||
var upload = multer({ dest: 'uploads/' });
|
||||
var router = express.Router();
|
||||
|
||||
router.get('/', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2|fonts.googleapis.com,,2|https,www.googletagmanager.com,,2');
|
||||
database.connect().then(async e => {
|
||||
let popularCommunities = await database.getMostPopularCommunities(9);
|
||||
let newCommunities = await database.getNewCommunities(6);
|
||||
res.render('ctr/communities.ejs', {
|
||||
// EJS variable and server-side variable
|
||||
popularCommunities: popularCommunities,
|
||||
newCommunities: newCommunities
|
||||
});
|
||||
}).catch(error => {
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/all', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2|fonts.googleapis.com,,2|https,www.googletagmanager.com,,2');
|
||||
database.connect().then(async e => {
|
||||
let communities = await database.getCommunities(90);
|
||||
res.render('ctr/all_communities.ejs', {
|
||||
communities: communities,
|
||||
});
|
||||
}).catch(error => {
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/announcements', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2|fonts.googleapis.com,,2|https,www.googletagmanager.com,,2');
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
if(pid === null)
|
||||
pid = 1000000000;
|
||||
let user = await database.getUserByPID(pid);
|
||||
let community = await database.getCommunityByID('announcements');
|
||||
let newPosts = await database.getNumberNewCommunityPostsByID(community, 25);
|
||||
let totalNumPosts = await database.getTotalPostsByCommunity(community);
|
||||
res.render('ctr/announcements.ejs', {
|
||||
moment: moment,
|
||||
community: community,
|
||||
newPosts: newPosts,
|
||||
user: user,
|
||||
totalNumPosts: totalNumPosts
|
||||
});
|
||||
}).catch(error => {
|
||||
console.error(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/:communityID/:type', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2|fonts.googleapis.com,,2|https,www.googletagmanager.com,,2');
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
if(pid === null)
|
||||
pid = 1000000000;
|
||||
let user = await database.getUserByPID(pid);
|
||||
let community = await database.getCommunityByID(req.params.communityID.toString());
|
||||
let newPosts = await database.getNumberNewCommunityPostsByID(community, 1);
|
||||
let totalNumPosts = await database.getTotalPostsByCommunity(community)
|
||||
res.render('ctr/community.ejs', {
|
||||
moment: moment,
|
||||
community: community,
|
||||
newPosts: newPosts,
|
||||
totalNumPosts: totalNumPosts,
|
||||
user: user
|
||||
});
|
||||
}).catch(error => {
|
||||
console.error(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/:communityID/:type/loadPosts', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2|fonts.googleapis.com,,2|https,www.googletagmanager.com,,2');
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
let post = await database.getPostByID(req.query.postID);
|
||||
if(pid === null)
|
||||
pid = 1000000000;
|
||||
let user = await database.getUserByPID(pid);
|
||||
let communityMap = await util.data.getCommunityHash();
|
||||
let posts;
|
||||
if(post !== null)
|
||||
posts = await database.getCommunityPostsAfterTimestamp(post, 1);
|
||||
else {
|
||||
let community = await database.getCommunityByID(req.params.communityID)
|
||||
switch (req.params.type) {
|
||||
case 'popular':
|
||||
posts = await database.getNumberPopularCommunityPostsByID(community, 10);
|
||||
break;
|
||||
case 'verified':
|
||||
posts = await database.getNumberVerifiedCommunityPostsByID(community, 10);
|
||||
break;
|
||||
default:
|
||||
posts = await database.getNewPostsByCommunity(community, 10);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(posts.length > 0)
|
||||
{
|
||||
res.render('ctr/more_posts.ejs', {
|
||||
communityMap: communityMap,
|
||||
moment: moment,
|
||||
database: database,
|
||||
user: user,
|
||||
newPosts: posts,
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
res.sendStatus(204);
|
||||
}
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.post('/follow', upload.none(), function (req, res) {
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
let community = await database.getCommunityByID(req.body.communityID);
|
||||
if(pid === null)
|
||||
pid = 1000000000;
|
||||
let user = await database.getUserByPID(pid);
|
||||
if(req.body.type === 'true' && user !== null && user.followed_communities.indexOf(community.id) === -1)
|
||||
{
|
||||
console.log('following!')
|
||||
community.upFollower();
|
||||
user.addToCommunities(community.id);
|
||||
res.sendStatus(200);
|
||||
}
|
||||
else if(req.body.type === 'false' && user !== null && user.followed_communities.indexOf(community.id) !== -1)
|
||||
{
|
||||
console.log('unfollowing!')
|
||||
community.downFollower();
|
||||
user.removeFromCommunities(community.id);
|
||||
res.sendStatus(200);
|
||||
}
|
||||
else
|
||||
res.sendStatus(423);
|
||||
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 423;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
|
@ -1,86 +0,0 @@
|
|||
var express = require('express');
|
||||
var xml = require('object-to-xml');
|
||||
const database = require('../../../../database');
|
||||
const util = require('../../../../authentication');
|
||||
var moment = require('moment');
|
||||
var router = express.Router();
|
||||
|
||||
router.get('/', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2||fonts.googleapis.com,,2');
|
||||
database.connect().then(async e => {
|
||||
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
|
||||
if(pid === null)
|
||||
pid = 1000000000;
|
||||
let user = await database.getUserByPID(pid);
|
||||
let communityMap = await util.data.getCommunityHash();
|
||||
let posts = await database.getNewsFeed(user, 3);
|
||||
res.render('ctr/feed.ejs', {
|
||||
moment: moment,
|
||||
user: user,
|
||||
posts: posts,
|
||||
communityMap: communityMap,
|
||||
});
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/loadposts', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2|fonts.googleapis.com,,2|https,www.googletagmanager.com,,2');
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
let post = await database.getPostByID(req.query.postID);
|
||||
if(pid === null)
|
||||
pid = 1000000000;
|
||||
let user = await database.getUserByPID(pid);
|
||||
let communityMap = await util.data.getCommunityHash();
|
||||
let posts;
|
||||
if(post !== null)
|
||||
posts = await database.getNewsFeedAfterTimestamp(user, 3, post);
|
||||
|
||||
if(posts.length > 0)
|
||||
{
|
||||
res.render('ctr/more_posts.ejs', {
|
||||
communityMap: communityMap,
|
||||
moment: moment,
|
||||
database: database,
|
||||
user: user,
|
||||
newPosts: posts,
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
res.sendStatus(204);
|
||||
}
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
var express = require('express');
|
||||
var xml = require('object-to-xml');
|
||||
const database = require('../../../../database');
|
||||
const util = require('../../../../authentication');
|
||||
var moment = require('moment');
|
||||
var router = express.Router();
|
||||
|
||||
router.get('/', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2||fonts.googleapis.com,,2');
|
||||
database.connect().then(async e => {
|
||||
|
||||
//let paramPackData = util.data.decodeParamPack(req.headers["x-nintendo-parampack"]);
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
|
||||
if(pid === null)
|
||||
pid = 1000000000;
|
||||
let user = await database.getUserByPID(pid);
|
||||
res.render('ctr/notifications.ejs', {
|
||||
moment: moment,
|
||||
user: user,
|
||||
});
|
||||
user.notification_list.filter(noti => noti.read === false).forEach(function(notification) {
|
||||
notification.read = true;
|
||||
});
|
||||
user.markModified('notification_list');
|
||||
user.save();
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
|
@ -1,133 +0,0 @@
|
|||
var express = require('express');
|
||||
var xml = require('object-to-xml');
|
||||
const database = require('../../../../database');
|
||||
const util = require('../../../../authentication');
|
||||
const { POST } = require('../../../../models/post');
|
||||
var multer = require('multer');
|
||||
var upload = multer({ dest: 'uploads/' });
|
||||
const snowflake = require('node-snowflake').Snowflake;
|
||||
var router = express.Router();
|
||||
|
||||
router.post('/empathy', function (req, res) {
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
let post = await database.getPostByID(req.body.postID);
|
||||
let user = await database.getUserByPID(pid);
|
||||
|
||||
if(user.pid === 1000000000) {
|
||||
res.sendStatus(403);
|
||||
return;
|
||||
}
|
||||
|
||||
if(req.body.type === 'up' && user.likes.indexOf(post.id) === -1 && user.id !== post.pid)
|
||||
{
|
||||
post.upEmpathy();
|
||||
user.addToLikes(post.id)
|
||||
res.sendStatus(200);
|
||||
}
|
||||
else if(req.body.type === 'down' && user.likes.indexOf(post.id) !== -1 && user.id !== post.pid)
|
||||
{
|
||||
post.downEmpathy();
|
||||
user.removeFromLike(post.id);
|
||||
res.sendStatus(200);
|
||||
}
|
||||
else
|
||||
res.sendStatus(423);
|
||||
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 423;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.post('/new', upload.none(), async function (req, res, next) {
|
||||
try
|
||||
{
|
||||
let paramPackData = util.data.decodeParamPack(req.headers["x-nintendo-parampack"]);
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
if(pid === null)
|
||||
{
|
||||
throw new Error('The User token was not valid');
|
||||
}
|
||||
else
|
||||
{
|
||||
let usrObj = await database.getUserByPID(pid);
|
||||
if(usrObj.account_status !== 0) {
|
||||
throw new Error('User not allowed to post')
|
||||
}
|
||||
let community = await database.getCommunityByID(req.body.olive_community_id);
|
||||
let appData = "";
|
||||
if (req.body.app_data) {
|
||||
appData = req.body.app_data.replace(/\0/g, "").trim();
|
||||
}
|
||||
let painting = "";
|
||||
if (req.body.painting) {
|
||||
painting = req.body.painting.replace(/\0/g, "").trim();
|
||||
}
|
||||
let paintingURI = "";
|
||||
if (req.body.painting) {
|
||||
paintingURI = await util.data.processPainting(painting);
|
||||
}
|
||||
let screenshot = "";
|
||||
if (req.body.screenshot) {
|
||||
screenshot = req.body.screenshot.replace(/\0/g, "").trim();
|
||||
}
|
||||
const document = {
|
||||
title_id: community.title_id[0],
|
||||
community_id: community.community_id,
|
||||
screen_name: usrObj.user_id,
|
||||
body: req.body.body,
|
||||
app_data: appData,
|
||||
painting: painting,
|
||||
painting_uri: paintingURI,
|
||||
screenshot: screenshot,
|
||||
country_id: paramPackData.country_id,
|
||||
created_at: new Date(),
|
||||
feeling_id: req.body.feeling_id,
|
||||
id: snowflake.nextId(),
|
||||
is_autopost: req.body.is_autopost,
|
||||
is_spoiler: req.body.is_spoiler,
|
||||
is_app_jumpable: req.body.is_app_jumpable,
|
||||
language_id: req.body.language_id,
|
||||
mii: usrObj.mii,
|
||||
mii_face_url: usrObj.pfp_uri,
|
||||
pid: pid,
|
||||
platform_id: paramPackData.platform_id,
|
||||
region_id: paramPackData.region_id,
|
||||
};
|
||||
const newPost = new POST(document);
|
||||
newPost.save();
|
||||
res.redirect('/communities/' + community.community_id + '/new');
|
||||
}
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
console.error(e);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 7,
|
||||
message: "POSTING_FROM_NNID"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
|
@ -1,116 +0,0 @@
|
|||
var express = require('express');
|
||||
var xml = require('object-to-xml');
|
||||
const database = require('../../../../database');
|
||||
const util = require('../../../../authentication');
|
||||
var moment = require('moment');
|
||||
var router = express.Router();
|
||||
|
||||
router.get('/', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2|fonts.googleapis.com,,2|https,www.googletagmanager.com,,2');
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
let user = null;
|
||||
if(pid === null)
|
||||
{
|
||||
res.render('ctr/guest_notice.ejs', {});
|
||||
}
|
||||
else
|
||||
{
|
||||
user = await database.getUserByPID(pid);
|
||||
if(user === null)
|
||||
{
|
||||
res.render('ctr/first_run.ejs', {});
|
||||
}
|
||||
if(moment(user.ban_lift_date).format('YYYY-MM-DD') <= moment().format('YYYY-MM-DD') && user.account_status !== 3) {
|
||||
user.account_status = 0;
|
||||
user.save()
|
||||
}
|
||||
/**
|
||||
* Account Status
|
||||
* 0 - Fine
|
||||
* 1 - Limited from Posting
|
||||
* 2 - Temporary Ban
|
||||
* 3 - Forever Ban
|
||||
*/
|
||||
console.log(user.account_status)
|
||||
if(user.account_status !== 0)
|
||||
{
|
||||
res.render('ctr/ban_notification.ejs', {
|
||||
user: user,
|
||||
moment: moment
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
let popularCommunities = await database.getMostPopularCommunities(9);
|
||||
let newCommunities = await database.getNewCommunities(6);
|
||||
res.render('ctr/communities.ejs', {
|
||||
popularCommunities: popularCommunities,
|
||||
newCommunities: newCommunities
|
||||
});
|
||||
}
|
||||
}
|
||||
}).catch(error => {
|
||||
console.log(error)
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/first', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2|fonts.googleapis.com,,2|https,www.googletagmanager.com,,2');
|
||||
res.render('ctr/first_run.ejs', {});
|
||||
});
|
||||
|
||||
router.post('/newUser', function (req, res) {
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
let user = null;
|
||||
if(pid === null)
|
||||
{
|
||||
res.sendStatus(401);
|
||||
}
|
||||
else
|
||||
{
|
||||
user = await database.getUserByPID(pid);
|
||||
if(user === null)
|
||||
{
|
||||
await util.data.create_user(pid, req.body.experience, req.body.notifications, req.body.region);
|
||||
if(await database.getUserByPID(pid) !== null)
|
||||
res.sendStatus(200);
|
||||
else
|
||||
res.sendStatus(504);
|
||||
}
|
||||
else
|
||||
{
|
||||
res.sendStatus(504);
|
||||
}
|
||||
}
|
||||
}).catch(error => {
|
||||
console.log(error)
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
|
@ -1,126 +0,0 @@
|
|||
var express = require('express');
|
||||
var xml = require('object-to-xml');
|
||||
const database = require('../../../../database');
|
||||
const util = require('../../../../authentication');
|
||||
const ejs = require('ejs');
|
||||
var router = express.Router();
|
||||
|
||||
/* GET discovery server. */
|
||||
|
||||
router.get('/menu', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2||fonts.googleapis.com,,2');
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
if(pid === null)
|
||||
pid = 1000000000;
|
||||
let user = await database.getUserByPID(pid);
|
||||
res.render('ctr/user_menu.ejs', {
|
||||
user: user,
|
||||
});
|
||||
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/me', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2||fonts.googleapis.com,,2');
|
||||
var isAJAX = ((req.query.ajax+'').toLowerCase() === 'true')
|
||||
database.connect().then(async e => {
|
||||
|
||||
//let paramPackData = util.data.decodeParamPack(req.headers["x-nintendo-parampack"]);
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
//console.log(req.headers["x-nintendo-servicetoken"]);
|
||||
if(pid === null)
|
||||
pid = 1000000000;
|
||||
let user = await database.getUserByPID(pid);
|
||||
let newPosts = await database.getPostsByUserID(pid);
|
||||
let numPosts = await database.getNumberUserPostsByID(pid);
|
||||
if(isAJAX) {
|
||||
res.render('ctr/user_page.ejs', {
|
||||
// EJS variable and server-side variable
|
||||
user: user,
|
||||
newPosts: newPosts,
|
||||
numPosts: numPosts
|
||||
});
|
||||
}
|
||||
else {
|
||||
res.render('ctr/user_page.ejs', {
|
||||
// EJS variable and server-side variable
|
||||
user: user,
|
||||
newPosts: newPosts,
|
||||
numPosts: numPosts
|
||||
});
|
||||
}
|
||||
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/show', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2||fonts.googleapis.com,,2');
|
||||
var isAJAX = ((req.query.ajax+'').toLowerCase() === 'true')
|
||||
var userID = req.query.pid;
|
||||
database.connect().then(async e => {
|
||||
let user = await database.getUserByPID(userID);
|
||||
let newPosts = await database.getPostsByUserID(user.pid);
|
||||
let numPosts = await database.getNumberUserPostsByID(user.pid);
|
||||
if(isAJAX) {
|
||||
res.render('ctr/user_page_ajax.ejs', {
|
||||
// EJS variable and server-side variable
|
||||
user: user,
|
||||
newPosts: newPosts,
|
||||
numPosts: numPosts
|
||||
});
|
||||
}
|
||||
else {
|
||||
res.render('ctr/user_page.ejs', {
|
||||
// EJS variable and server-side variable
|
||||
user: user,
|
||||
newPosts: newPosts,
|
||||
numPosts: numPosts
|
||||
});
|
||||
}
|
||||
}).catch(error => {
|
||||
console.error(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
|
@ -1,137 +0,0 @@
|
|||
var express = require('express');
|
||||
var router = express.Router();
|
||||
const database = require('../../../../database');
|
||||
const util = require('../../../../authentication');
|
||||
var path = require('path');
|
||||
|
||||
router.get('/css/juxt.css', function (req, res) {
|
||||
res.set("Content-Type", "text/css");
|
||||
res.sendFile('css/juxt.css', {root: path.join(__dirname, '../../../../webfiles/ctr/')});
|
||||
});
|
||||
|
||||
router.get('/js/juxt.js', function (req, res) {
|
||||
res.set("Content-Type", "application/javascript; charset=utf-8");
|
||||
res.sendFile('js/juxt.js', {root: path.join(__dirname, '../../../../webfiles/ctr/')});
|
||||
});
|
||||
|
||||
router.get('/js/pjax.js', function (req, res) {
|
||||
res.set("Content-Type", "application/javascript; charset=utf-8");
|
||||
res.sendFile('js/pjax.js', {root: path.join(__dirname, '../../../../webfiles/ctr/')});
|
||||
});
|
||||
|
||||
router.get('/fonts/Poppins-Light.woff', function (req, res) {
|
||||
res.set("Content-Type", "font/woff");
|
||||
res.sendFile('fonts/Poppins-Light.woff', {root: path.join(__dirname, '../../../../webfiles/ctr/')});
|
||||
});
|
||||
|
||||
router.get('/fonts/Poppins-Light.ttf', function (req, res) {
|
||||
res.set("Content-Type", "font/ttf");
|
||||
res.sendFile('fonts/Poppins-Light.ttf', {root: path.join(__dirname, '../../../../webfiles/ctr/')});
|
||||
});
|
||||
|
||||
router.get('/favicon.ico', function (req, res) {
|
||||
res.set("Content-Type", "image/x-icon");
|
||||
res.sendFile('css/favicon.ico', {root: path.join(__dirname, '../../../../webfiles/portal/')});
|
||||
});
|
||||
|
||||
router.get('/icons/:image_id.png', function (req, res) {
|
||||
res.set("Content-Type", "image/png");
|
||||
database.connect().then(async e => {
|
||||
let community = await database.getCommunityByID(req.params.image_id.toString());
|
||||
if(community !== null) {
|
||||
if(community.browser_icon.indexOf('data:image/png;base64,') !== -1)
|
||||
res.send(Buffer.from(community.browser_icon.replace('data:image/png;base64,',''), 'base64'));
|
||||
else
|
||||
res.send(Buffer.from(community.browser_icon, 'base64'));
|
||||
}
|
||||
else {
|
||||
let user = await database.getUserByPID(req.params.image_id.toString());
|
||||
if(user !== null)
|
||||
if(user.pfp_uri.indexOf('data:image/png;base64,') !== -1)
|
||||
res.send(Buffer.from(user.pfp_uri.replace('data:image/png;base64,',''), 'base64'));
|
||||
else
|
||||
res.send(Buffer.from(user.pfp_uri, 'base64'));
|
||||
else
|
||||
res.sendStatus(404);
|
||||
}
|
||||
}).catch(error => {
|
||||
console.error(error);
|
||||
res.sendStatus(404)
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/tip/:image_id.png', function (req, res) {
|
||||
res.set("Content-Type", "image/png");
|
||||
database.connect().then(async e => {
|
||||
let community = await database.getCommunityByID(req.params.image_id.toString());
|
||||
if(community !== null) {
|
||||
if(community.browser_thumbnail.indexOf('data:image/png;base64,') !== -1)
|
||||
res.send(Buffer.from(community.browser_thumbnail.replace('data:image/png;base64,',''), 'base64'));
|
||||
else
|
||||
res.send(Buffer.from(community.browser_thumbnail, 'base64'));
|
||||
}
|
||||
else {
|
||||
let user = await database.getUserByPID(req.params.image_id.toString());
|
||||
if(user !== null)
|
||||
if(user.pfp_uri.indexOf('data:image/png;base64,') !== -1)
|
||||
res.send(Buffer.from(user.pfp_uri.replace('data:image/png;base64,',''), 'base64'));
|
||||
else
|
||||
res.send(Buffer.from(user.pfp_uri, 'base64'));
|
||||
else
|
||||
res.sendStatus(404);
|
||||
}
|
||||
}).catch(error => {
|
||||
console.error(error);
|
||||
res.sendStatus(404)
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/banner/:image_id.png', function (req, res) {
|
||||
res.set("Content-Type", "image/png");
|
||||
database.connect().then(async e => {
|
||||
let community = await database.getCommunityByID(req.params.image_id.toString());
|
||||
if(community !== null)
|
||||
if(community.WiiU_browser_header.indexOf('data:image/png;base64,') !== -1)
|
||||
res.send(Buffer.from(community.WiiU_browser_header.replace('data:image/png;base64,',''), 'base64'));
|
||||
else
|
||||
res.send(Buffer.from(community.WiiU_browser_header, 'base64'));
|
||||
else
|
||||
res.sendStatus(404);
|
||||
}).catch(error => {
|
||||
console.error(error);
|
||||
res.sendStatus(404)
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/notifications.json', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2||fonts.googleapis.com,,2');
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
if(pid === null)
|
||||
pid = 1000000000;
|
||||
let user = await database.getUserByPID(pid);
|
||||
res.send(
|
||||
{
|
||||
messages: 0,
|
||||
news: user.notification_list.filter(notification => notification.read === false).length,
|
||||
}
|
||||
)
|
||||
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
|
@ -1,19 +1,12 @@
|
|||
module.exports = {
|
||||
PORTAL_SHOW: require('./portal/show'),
|
||||
PORTAL_WEB: require('./portal/web'),
|
||||
PORTAL_COMMUNITIES: require('./portal/communities'),
|
||||
PORTAL_USER: require('./portal/userpage'),
|
||||
PORTAL_POST: require('./portal/posts'),
|
||||
PORTAL_FEED: require('./portal/feed'),
|
||||
PORTAL_NEWS: require('./portal/notifications'),
|
||||
PORTAL_MESSAGES: require('./portal/messages'),
|
||||
CTR_SHOW: require('./ctr/show'),
|
||||
CTR_WEB: require('./ctr/web'),
|
||||
CTR_COMMUNITIES: require('./ctr/communities'),
|
||||
CTR_USER: require('./ctr/userpage'),
|
||||
CTR_POST: require('./ctr/posts'),
|
||||
CTR_FEED: require('./ctr/feed'),
|
||||
CTR_NEWS: require('./ctr/notifications'),
|
||||
PORTAL_SHOW: require('./console/show'),
|
||||
PORTAL_WEB: require('./console/web'),
|
||||
PORTAL_COMMUNITIES: require('./console/communities'),
|
||||
PORTAL_USER: require('./console/userpage'),
|
||||
PORTAL_POST: require('./console/posts'),
|
||||
PORTAL_FEED: require('./console/feed'),
|
||||
PORTAL_NEWS: require('./console/notifications'),
|
||||
PORTAL_MESSAGES: require('./console/messages'),
|
||||
WEB_ADMIN: require('./admin/home'),
|
||||
WEB_API: require('./admin/api'),
|
||||
};
|
||||
|
|
@ -1,255 +0,0 @@
|
|||
var express = require('express');
|
||||
var xml = require('object-to-xml');
|
||||
const database = require('../../../../database');
|
||||
const util = require('../../../../authentication');
|
||||
const config = require('../../../../config.json');
|
||||
var multer = require('multer');
|
||||
var moment = require('moment');
|
||||
var upload = multer({ dest: 'uploads/' });
|
||||
var router = express.Router();
|
||||
|
||||
router.get('/', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList', config.whitelist);
|
||||
let lang = util.data.processLanguage(req.headers["x-nintendo-parampack"]);
|
||||
database.connect().then(async e => {
|
||||
let popularCommunities = await database.getMostPopularCommunities(9);
|
||||
let newCommunities = await database.getNewCommunities(6);
|
||||
res.render('portal/communities.ejs', {
|
||||
// EJS variable and server-side variable
|
||||
popularCommunities: popularCommunities,
|
||||
newCommunities: newCommunities,
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: lang
|
||||
|
||||
});
|
||||
}).catch(error => {
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/all', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList', config.whitelist);
|
||||
let lang = util.data.processLanguage(req.headers["x-nintendo-parampack"]);
|
||||
database.connect().then(async e => {
|
||||
let communities = await database.getCommunities(90);
|
||||
res.render('portal/all_communities.ejs', {
|
||||
communities: communities,
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: lang
|
||||
});
|
||||
}).catch(error => {
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/announcements', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList', config.whitelist);
|
||||
let lang = util.data.processLanguage(req.headers["x-nintendo-parampack"]);
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
if(pid === null)
|
||||
pid = 1000000000;
|
||||
let user = await database.getUserByPID(pid);
|
||||
let community = await database.getCommunityByID('announcements');
|
||||
let communityMap = await util.data.getCommunityHash();
|
||||
let newPosts = await database.getNumberNewCommunityPostsByID(community, 25);
|
||||
let totalNumPosts = await database.getTotalPostsByCommunity(community);
|
||||
res.render('portal/announcements.ejs', {
|
||||
moment: moment,
|
||||
community: community,
|
||||
newPosts: newPosts,
|
||||
communityMap: communityMap,
|
||||
user: user,
|
||||
totalNumPosts: totalNumPosts,
|
||||
account_server: config.account_server_domain.slice(8),
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
}).catch(error => {
|
||||
console.error(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/:communityID/:type', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList', config.whitelist);
|
||||
let lang = util.data.processLanguage(req.headers["x-nintendo-parampack"]);
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
if(pid === null)
|
||||
pid = 1000000000;
|
||||
let user = await database.getUserByPID(pid);
|
||||
if(req.params.communityID === 'announcements')
|
||||
res.redirect('/communities/announcements')
|
||||
let community = await database.getCommunityByID(req.params.communityID.toString());
|
||||
let communityMap = await util.data.getCommunityHash();
|
||||
let newPosts = await database.getNumberNewCommunityPostsByID(community, 5);
|
||||
let totalNumPosts = await database.getTotalPostsByCommunity(community)
|
||||
res.render('portal/community.ejs', {
|
||||
// EJS variable and server-side variable
|
||||
moment: moment,
|
||||
community: community,
|
||||
communityMap: communityMap,
|
||||
newPosts: newPosts,
|
||||
totalNumPosts: totalNumPosts,
|
||||
user: user,
|
||||
account_server: config.account_server_domain.slice(8),
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
}).catch(error => {
|
||||
console.error(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/:communityID/:type/loadPosts', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList', config.whitelist);
|
||||
let lang = util.data.processLanguage(req.headers["x-nintendo-parampack"]);
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
let post = await database.getPostByID(req.query.postID);
|
||||
if(pid === null)
|
||||
pid = 1000000000;
|
||||
let user = await database.getUserByPID(pid);
|
||||
let communityMap = await util.data.getCommunityHash();
|
||||
let posts;
|
||||
if(post !== null)
|
||||
posts = await database.getCommunityPostsAfterTimestamp(post, 1);
|
||||
else {
|
||||
let community = await database.getCommunityByID(req.params.communityID)
|
||||
switch (req.params.type) {
|
||||
case 'popular':
|
||||
posts = await database.getNumberPopularCommunityPostsByID(community, 10);
|
||||
break;
|
||||
case 'verified':
|
||||
posts = await database.getNumberVerifiedCommunityPostsByID(community, 10);
|
||||
break;
|
||||
default:
|
||||
posts = await database.getNewPostsByCommunity(community, 10);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(posts.length > 0)
|
||||
{
|
||||
res.render('portal/more_posts.ejs', {
|
||||
communityMap: communityMap,
|
||||
moment: moment,
|
||||
database: database,
|
||||
user: user,
|
||||
newPosts: posts,
|
||||
account_server: config.account_server_domain.slice(8),
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
res.sendStatus(204);
|
||||
}
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.post('/follow', upload.none(), function (req, res) {
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
let community = await database.getCommunityByID(req.body.communityID);
|
||||
if(pid === null) {
|
||||
throw "Guest Accounts Cannot Follow Communities";
|
||||
}
|
||||
let user = await database.getUserByPID(pid);
|
||||
if(req.body.type === 'true' && user !== null && user.followed_communities.indexOf(community.community_id) === -1)
|
||||
{
|
||||
community.upFollower();
|
||||
user.addToCommunities(community.community_id);
|
||||
res.sendStatus(200);
|
||||
}
|
||||
else if(req.body.type === 'false' && user !== null && user.followed_communities.indexOf(community.community_id) !== -1)
|
||||
{
|
||||
community.downFollower();
|
||||
user.removeFromCommunities(community.community_id);
|
||||
res.sendStatus(200);
|
||||
}
|
||||
else
|
||||
res.sendStatus(423);
|
||||
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 423;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
|
@ -1,101 +0,0 @@
|
|||
var express = require('express');
|
||||
var xml = require('object-to-xml');
|
||||
const database = require('../../../../database');
|
||||
const util = require('../../../../authentication');
|
||||
const config = require('../../../../config.json');
|
||||
var moment = require('moment');
|
||||
var router = express.Router();
|
||||
|
||||
router.get('/', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList', config.whitelist);
|
||||
let lang = util.data.processLanguage(req.headers["x-nintendo-parampack"]);
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
|
||||
if(pid === null)
|
||||
pid = 1000000000;
|
||||
let user = await database.getUserByPID(pid);
|
||||
let communityMap = await util.data.getCommunityHash();
|
||||
let posts = await database.getNewsFeed(user, 3);
|
||||
res.render('portal/feed.ejs', {
|
||||
moment: moment,
|
||||
user: user,
|
||||
posts: posts,
|
||||
communityMap: communityMap,
|
||||
account_server: config.account_server_domain.slice(8),
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
user.notification_list.filter(noti => noti.read === false).forEach(function(notification) {
|
||||
notification.read = true;
|
||||
});
|
||||
user.markModified('notification_list');
|
||||
user.save();
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/loadposts', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList', config.whitelist);
|
||||
let lang = util.data.processLanguage(req.headers["x-nintendo-parampack"]);
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
let post = await database.getPostByID(req.query.postID);
|
||||
if(pid === null)
|
||||
pid = 1000000000;
|
||||
let user = await database.getUserByPID(pid);
|
||||
let communityMap = await util.data.getCommunityHash();
|
||||
let posts;
|
||||
if(post !== null)
|
||||
posts = await database.getNewsFeedAfterTimestamp(user, 3, post);
|
||||
|
||||
if(posts.length > 0)
|
||||
{
|
||||
res.render('portal/more_posts.ejs', {
|
||||
communityMap: communityMap,
|
||||
moment: moment,
|
||||
database: database,
|
||||
user: user,
|
||||
newPosts: posts,
|
||||
account_server: config.account_server_domain.slice(8),
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
res.sendStatus(204);
|
||||
}
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
var express = require('express');
|
||||
var xml = require('object-to-xml');
|
||||
const database = require('../../../../database');
|
||||
const util = require('../../../../authentication');
|
||||
const config = require('../../../../config.json');
|
||||
var moment = require('moment');
|
||||
var router = express.Router();
|
||||
|
||||
router.get('/', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList', config.whitelist);
|
||||
let lang = util.data.processLanguage(req.headers["x-nintendo-parampack"]);
|
||||
database.connect().then(async e => {
|
||||
|
||||
//let paramPackData = util.data.decodeParamPack(req.headers["x-nintendo-parampack"]);
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
|
||||
if(pid === null)
|
||||
pid = 1000000000;
|
||||
let user = await database.getUserByPID(pid);
|
||||
res.render('portal/messages.ejs', {
|
||||
moment: moment,
|
||||
user: user,
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
user.notification_list.filter(noti => noti.read === false).forEach(function(notification) {
|
||||
notification.read = true;
|
||||
});
|
||||
user.markModified('notification_list');
|
||||
user.save();
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
var express = require('express');
|
||||
var xml = require('object-to-xml');
|
||||
const database = require('../../../../database');
|
||||
const util = require('../../../../authentication');
|
||||
const config = require('../../../../config.json');
|
||||
var moment = require('moment');
|
||||
var router = express.Router();
|
||||
|
||||
router.get('/', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList', config.whitelist);
|
||||
let lang = util.data.processLanguage(req.headers["x-nintendo-parampack"]);
|
||||
database.connect().then(async e => {
|
||||
|
||||
//let paramPackData = util.data.decodeParamPack(req.headers["x-nintendo-parampack"]);
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
|
||||
if(pid === null)
|
||||
pid = 1000000000;
|
||||
let user = await database.getUserByPID(pid);
|
||||
res.render('portal/notifications.ejs', {
|
||||
moment: moment,
|
||||
user: user,
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: lang
|
||||
});
|
||||
user.notification_list.filter(noti => noti.read === false).forEach(function(notification) {
|
||||
notification.read = true;
|
||||
});
|
||||
user.markModified('notification_list');
|
||||
user.save();
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
|
@ -1,256 +0,0 @@
|
|||
var express = require('express');
|
||||
var xml = require('object-to-xml');
|
||||
const database = require('../../../../database');
|
||||
const util = require('../../../../authentication');
|
||||
const config = require('../../../../config.json');
|
||||
const { POST } = require('../../../../models/post');
|
||||
var multer = require('multer');
|
||||
var moment = require('moment');
|
||||
var upload = multer({ dest: 'uploads/' });
|
||||
const snowflake = require('node-snowflake').Snowflake;
|
||||
var router = express.Router();
|
||||
|
||||
router.post('/empathy', function (req, res) {
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
let post = await database.getPostByID(req.body.postID);
|
||||
if(pid === null) {
|
||||
res.sendStatus(403);
|
||||
return;
|
||||
}
|
||||
let user = await database.getUserByPID(pid);
|
||||
if(req.body.type === 'up' && user.likes.indexOf(post.id) === -1 && user.id !== post.pid)
|
||||
{
|
||||
post.upEmpathy();
|
||||
user.addToLikes(post.id)
|
||||
res.sendStatus(200);
|
||||
}
|
||||
else if(req.body.type === 'down' && user.likes.indexOf(post.id) !== -1 && user.id !== post.pid)
|
||||
{
|
||||
post.downEmpathy();
|
||||
user.removeFromLike(post.id);
|
||||
res.sendStatus(200);
|
||||
}
|
||||
else
|
||||
res.sendStatus(423);
|
||||
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 423;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/:post_id', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList', config.whitelist);
|
||||
let lang = util.data.processLanguage(req.headers["x-nintendo-parampack"]);
|
||||
database.connect().then(async e => {
|
||||
|
||||
//let paramPackData = util.data.decodeParamPack(req.headers["x-nintendo-parampack"]);
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
|
||||
if(pid === null)
|
||||
pid = 1000000000;
|
||||
let user = await database.getUserByPID(pid);
|
||||
let post = await database.getPostByID(req.params.post_id.toString());
|
||||
let community = await database.getCommunityByID(post.community_id);
|
||||
let communityMap = await util.data.getCommunityHash();
|
||||
let replies = await database.getPostReplies(req.params.post_id.toString(), 25)
|
||||
res.render('portal/post.ejs', {
|
||||
moment: moment,
|
||||
user: user,
|
||||
post: post,
|
||||
replies: replies,
|
||||
community: community,
|
||||
communityMap: communityMap,
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.post('/:post_id/new', upload.none(), async function (req, res, next) {
|
||||
try
|
||||
{
|
||||
let paramPackData = util.data.decodeParamPack(req.headers["x-nintendo-parampack"]);
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
if(pid === null)
|
||||
{
|
||||
throw new Error('The User token was not valid');
|
||||
}
|
||||
else
|
||||
{
|
||||
let usrObj = await database.getUserByPID(pid);
|
||||
if(usrObj.account_status !== 0) {
|
||||
throw new Error('User not allowed to post')
|
||||
}
|
||||
let parentPost = await database.getPostByID(req.params.post_id.toString())
|
||||
let community = await database.getCommunityByID(req.body.olive_community_id);
|
||||
let appData = "";
|
||||
if (req.body.app_data) {
|
||||
appData = req.body.app_data.replace(/\0/g, "").trim();
|
||||
}
|
||||
let painting = "", paintingURI = "";
|
||||
if (req.body.painting && req.body.painting !== 'eJztwTEBACAMA7DCNRlIQRbu4ZoEviTJTNvjZNUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL55fYLL3w==') {
|
||||
painting = req.body.painting.replace(/\0/g, "").trim();
|
||||
paintingURI = await util.data.processPainting(painting);
|
||||
}
|
||||
let screenshot = "";
|
||||
if (req.body.screenshot) {
|
||||
screenshot = req.body.screenshot.replace(/\0/g, "").trim();
|
||||
}
|
||||
parentPost.reply_count = parentPost.reply_count + 1;
|
||||
parentPost.save();
|
||||
const document = {
|
||||
title_id: community.title_id[0],
|
||||
community_id: community.community_id,
|
||||
screen_name: usrObj.user_id,
|
||||
body: req.body.body,
|
||||
app_data: appData,
|
||||
painting: painting,
|
||||
painting_uri: paintingURI,
|
||||
screenshot: screenshot,
|
||||
country_id: paramPackData.country_id,
|
||||
created_at: new Date(),
|
||||
feeling_id: req.body.emotion,
|
||||
id: snowflake.nextId(),
|
||||
is_autopost: req.body.is_autopost,
|
||||
is_spoiler: (req.body.spoiler) ? 1 : 0,
|
||||
is_app_jumpable: req.body.is_app_jumpable,
|
||||
language_id: req.body.language_id,
|
||||
mii: usrObj.mii,
|
||||
mii_face_url: usrObj.pfp_uri,
|
||||
pid: pid,
|
||||
platform_id: paramPackData.platform_id,
|
||||
region_id: paramPackData.region_id,
|
||||
verified: usrObj.official,
|
||||
parent: req.params.post_id.toString()
|
||||
};
|
||||
const newPost = new POST(document);
|
||||
newPost.save();
|
||||
await database.pushNewNotificationByPID(parentPost.pid, usrObj.user_id + ' replied to your post!', '/posts/' + parentPost.id)
|
||||
res.redirect('/posts/' + req.params.post_id.toString());
|
||||
}
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
console.error(e);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 7,
|
||||
message: "POSTING_FROM_NNID"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
router.post('/new', upload.none(), async function (req, res, next) {
|
||||
try
|
||||
{
|
||||
let paramPackData = util.data.decodeParamPack(req.headers["x-nintendo-parampack"]);
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
if(pid === null)
|
||||
{
|
||||
throw new Error('The User token was not valid');
|
||||
}
|
||||
else
|
||||
{
|
||||
let usrObj = await database.getUserByPID(pid);
|
||||
if(usrObj.account_status !== 0) {
|
||||
throw new Error('User not allowed to post')
|
||||
}
|
||||
let community = await database.getCommunityByID(req.body.olive_community_id);
|
||||
let appData = "";
|
||||
if (req.body.app_data) {
|
||||
appData = req.body.app_data.replace(/\0/g, "").trim();
|
||||
}
|
||||
let painting = "", paintingURI = "";
|
||||
if (req.body.painting && req.body.painting !== 'eJztwTEBACAMA7DCNRlIQRbu4ZoEviTJTNvjZNUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL55fYLL3w==') {
|
||||
painting = req.body.painting.replace(/\0/g, "").trim();
|
||||
paintingURI = await util.data.processPainting(painting);
|
||||
}
|
||||
let screenshot = "";
|
||||
if (req.body.screenshot) {
|
||||
screenshot = req.body.screenshot.replace(/\0/g, "").trim();
|
||||
}
|
||||
const document = {
|
||||
title_id: community.title_id[0],
|
||||
community_id: community.community_id,
|
||||
screen_name: usrObj.user_id,
|
||||
body: req.body.body,
|
||||
app_data: appData,
|
||||
painting: painting,
|
||||
painting_uri: paintingURI,
|
||||
screenshot: screenshot,
|
||||
country_id: paramPackData.country_id,
|
||||
created_at: new Date(),
|
||||
feeling_id: req.body.emotion,
|
||||
id: snowflake.nextId(),
|
||||
is_autopost: req.body.is_autopost,
|
||||
is_spoiler: (req.body.spoiler) ? 1 : 0,
|
||||
is_app_jumpable: req.body.is_app_jumpable,
|
||||
language_id: req.body.language_id,
|
||||
mii: usrObj.mii,
|
||||
mii_face_url: usrObj.pfp_uri,
|
||||
pid: pid,
|
||||
platform_id: paramPackData.platform_id,
|
||||
region_id: paramPackData.region_id,
|
||||
verified: usrObj.official
|
||||
};
|
||||
const newPost = new POST(document);
|
||||
newPost.save();
|
||||
res.redirect('/communities/' + community.community_id + '/new');
|
||||
}
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
console.error(e);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 7,
|
||||
message: "POSTING_FROM_NNID"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
|
@ -1,135 +0,0 @@
|
|||
var express = require('express');
|
||||
var xml = require('object-to-xml');
|
||||
const database = require('../../../../database');
|
||||
const util = require('../../../../authentication');
|
||||
const config = require('../../../../config.json');
|
||||
var moment = require('moment');
|
||||
var router = express.Router();
|
||||
|
||||
router.get('/', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList', config.whitelist);
|
||||
let lang = util.data.processLanguage(req.headers["x-nintendo-parampack"]);
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
let user = null;
|
||||
if(pid === null)
|
||||
{
|
||||
res.render('portal/guest_notice.ejs', {
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: lang,
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
user = await database.getUserByPID(pid);
|
||||
if(user === null)
|
||||
{
|
||||
res.render('portal/first_run.ejs', {
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: lang,
|
||||
});
|
||||
}
|
||||
else {
|
||||
if(moment(user.ban_lift_date).format('YYYY-MM-DD') <= moment().format('YYYY-MM-DD') && user.account_status !== 3) {
|
||||
user.account_status = 0;
|
||||
user.save()
|
||||
}
|
||||
/**
|
||||
* Account Status
|
||||
* 0 - Fine
|
||||
* 1 - Limited from Posting
|
||||
* 2 - Temporary Ban
|
||||
* 3 - Forever Ban
|
||||
*/
|
||||
if(user.account_status !== 0)
|
||||
{
|
||||
res.render('portal/ban_notification.ejs', {
|
||||
user: user,
|
||||
moment: moment,
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: lang,
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
let popularCommunities = await database.getMostPopularCommunities(9);
|
||||
let newCommunities = await database.getNewCommunities(6);
|
||||
res.render('portal/communities.ejs', {
|
||||
popularCommunities: popularCommunities,
|
||||
newCommunities: newCommunities,
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: lang
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}).catch(error => {
|
||||
console.log(error)
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/first', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList', config.whitelist);
|
||||
let lang = util.data.processLanguage(req.headers["x-nintendo-parampack"]);
|
||||
res.render('portal/first_run.ejs', {
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: lang,
|
||||
});
|
||||
});
|
||||
|
||||
router.post('/newUser', function (req, res) {
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
let user = null;
|
||||
if(pid === null)
|
||||
{
|
||||
res.sendStatus(401);
|
||||
}
|
||||
else
|
||||
{
|
||||
user = await database.getUserByPID(pid);
|
||||
if(user === null)
|
||||
{
|
||||
await util.data.create_user(pid, req.body.experience, req.body.notifications, req.body.region);
|
||||
util.data.refreshCache();
|
||||
if(await database.getUserByPID(pid) !== null)
|
||||
res.sendStatus(200);
|
||||
else
|
||||
res.sendStatus(504);
|
||||
}
|
||||
else
|
||||
{
|
||||
res.sendStatus(504);
|
||||
}
|
||||
}
|
||||
}).catch(error => {
|
||||
console.log(error)
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
|
@ -1,345 +0,0 @@
|
|||
var express = require('express');
|
||||
var xml = require('object-to-xml');
|
||||
const database = require('../../../../database');
|
||||
const util = require('../../../../authentication');
|
||||
const config = require('../../../../config.json');
|
||||
var multer = require('multer');
|
||||
var moment = require('moment');
|
||||
var upload = multer({ dest: 'uploads/' });
|
||||
var router = express.Router();
|
||||
|
||||
router.get('/me', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList', config.whitelist);
|
||||
let lang = util.data.processLanguage(req.headers["x-nintendo-parampack"]);
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
if(pid === null)
|
||||
pid = 1000000000;
|
||||
let user = await database.getUserByPID(pid);
|
||||
let newPosts = await database.getNumberUserPostsByID(pid, 10);
|
||||
let numPosts = await database.getTotalPostsByUserID(pid);
|
||||
let communityMap = await util.data.getCommunityHash();
|
||||
res.render('portal/me_page.ejs', {
|
||||
communityMap: communityMap,
|
||||
moment: moment,
|
||||
user: user,
|
||||
newPosts: newPosts,
|
||||
numPosts: numPosts,
|
||||
account_server: config.account_server_domain.slice(8),
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.post('/me', upload.none(), function (req, res) {
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
if (pid === null)
|
||||
throw new Error('User does not exist');
|
||||
let user = await database.getUserByPID(pid);
|
||||
|
||||
user.country_visibility = !!req.body.country;
|
||||
user.birthday_visibility = !!req.body.birthday;
|
||||
user.game_skill_visibility = !!req.body.experience;
|
||||
user.profile_comment_visibility = !!req.body.commentShow;
|
||||
|
||||
if (req.body.comment)
|
||||
user.setProfileComment(req.body.comment);
|
||||
else
|
||||
user.setProfileComment('');
|
||||
|
||||
res.redirect('/users/me');
|
||||
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
})
|
||||
});
|
||||
|
||||
router.get('/show', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList', config.whitelist);
|
||||
let lang = util.data.processLanguage(req.headers["x-nintendo-parampack"]);
|
||||
var userID = req.query.pid;
|
||||
if(userID === 'me') {
|
||||
res.sendStatus(504);
|
||||
return;
|
||||
}
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
if(pid === null)
|
||||
pid = 1000000000;
|
||||
let parentUser = await database.getUserByPID(pid);
|
||||
let user = await database.getUserByPID(userID);
|
||||
if(user === null)
|
||||
res.sendStatus(404);
|
||||
if(user.pid === parentUser.pid)
|
||||
res
|
||||
let newPosts = await database.getNumberUserPostsByID(user.pid, 10);
|
||||
let numPosts = await database.getTotalPostsByUserID(user.pid);
|
||||
let communityMap = await util.data.getCommunityHash();
|
||||
res.render('portal/user_page.ejs', {
|
||||
// EJS variable and server-side variable
|
||||
communityMap: communityMap,
|
||||
moment: moment,
|
||||
user: user,
|
||||
newPosts: newPosts,
|
||||
numPosts: numPosts,
|
||||
parentUser: parentUser,
|
||||
account_server: config.account_server_domain.slice(8),
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
}).catch(error => {
|
||||
console.error(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/loadPosts', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList', config.whitelist);
|
||||
let lang = util.data.processLanguage(req.headers["x-nintendo-parampack"]);
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
let post = await database.getPostByID(req.query.postID);
|
||||
if(pid === null)
|
||||
pid = 1000000000;
|
||||
let user = await database.getUserByPID(pid);
|
||||
let newPosts = '';
|
||||
if(post !== null)
|
||||
newPosts = await database.getUserPostsAfterTimestamp(post, 10);
|
||||
else
|
||||
newPosts = await database.getNumberUserPostsByID(req.query.pid, 10);
|
||||
|
||||
let communityMap = await util.data.getCommunityHash();
|
||||
if(newPosts.length > 0)
|
||||
{
|
||||
res.render('portal/more_posts.ejs', {
|
||||
communityMap: communityMap,
|
||||
moment: moment,
|
||||
user: user,
|
||||
newPosts: newPosts,
|
||||
account_server: config.account_server_domain.slice(8),
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
res.sendStatus(204)
|
||||
}
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/following', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList', config.whitelist);
|
||||
let lang = util.data.processLanguage(req.headers["x-nintendo-parampack"]);
|
||||
database.connect().then(async e => {
|
||||
let user = await database.getUserByPID(req.query.pid);
|
||||
let followers = await database.getFollowedUsers(user);
|
||||
let communities = user.followed_communities;
|
||||
let communityMap = await util.data.getCommunityHash();
|
||||
|
||||
if(user.followed_users[0] === '0')
|
||||
followers.splice(0, 1);
|
||||
if(communities[0] === '0')
|
||||
communities.splice(0, 1);
|
||||
|
||||
|
||||
if(user.following > 0)
|
||||
{
|
||||
res.render('portal/following_list.ejs', {
|
||||
moment: moment,
|
||||
user: user,
|
||||
followers: followers,
|
||||
communities: communities,
|
||||
communityMap: communityMap,
|
||||
account_server: config.account_server_domain.slice(8),
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
res.send('<p class="no-posts-text">' + lang.user_page.no_following + '</p>')
|
||||
}
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.send('<p class="no-posts-text">' + lang.user_page.no_following + '</p>')
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/followers', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList', config.whitelist);
|
||||
let lang = util.data.processLanguage(req.headers["x-nintendo-parampack"]);
|
||||
database.connect().then(async e => {
|
||||
let user = await database.getUserByPID(req.query.pid);
|
||||
let followers = await database.getFollowingUsers(user);
|
||||
let communities = [];
|
||||
let userMap = await util.data.getUserHash();
|
||||
|
||||
if(followers[0] === '0')
|
||||
followers.splice(0, 1);
|
||||
|
||||
if(user.followers > 0)
|
||||
{
|
||||
res.render('portal/following_list.ejs', {
|
||||
moment: moment,
|
||||
user: user,
|
||||
followers: followers,
|
||||
communities: communities,
|
||||
userMap: userMap,
|
||||
account_server: config.account_server_domain.slice(8),
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
res.send('<p class="no-posts-text">' + lang.user_page.no_followers + '</p>')
|
||||
}
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.send('<p class="no-posts-text">' + lang.user_page.no_followers + '</p>')
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/friends', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList', config.whitelist);
|
||||
let lang = util.data.processLanguage(req.headers["x-nintendo-parampack"]);
|
||||
database.connect().then(async e => {
|
||||
let user = await database.getUserByPID(req.query.pid);
|
||||
let friends = null;
|
||||
let userMap = await util.data.getUserHash();
|
||||
|
||||
if(friends)
|
||||
{
|
||||
res.render('portal/following_list.ejs', {
|
||||
moment: moment,
|
||||
user: user,
|
||||
friends: friends,
|
||||
userMap: userMap,
|
||||
account_server: config.account_server_domain.slice(8),
|
||||
cdnURL: config.CDN_domain,
|
||||
lang: lang,
|
||||
mii_image_CDN: config.mii_image_CDN
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
res.send('<p class="no-posts-text">' + lang.user_page.no_friends + '</p>')
|
||||
}
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.post('/follow', upload.none(), function (req, res) {
|
||||
let lang = util.data.processLanguage(req.headers["x-nintendo-parampack"]);
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
let userToFollow = await database.getUserByPID(req.body.userID);
|
||||
if(pid === null)
|
||||
pid = 1000000000;
|
||||
let user = await database.getUserByPID(pid);
|
||||
if(req.body.type === 'true' && user !== null && user.followed_users.indexOf(userToFollow.pid) === -1)
|
||||
{
|
||||
userToFollow.addToFollowers(user.pid);
|
||||
user.addToUsers(userToFollow.pid);
|
||||
res.sendStatus(200);
|
||||
await database.pushNewNotificationByPID(userToFollow.pid, user.user_id + ' ' + lang.notifications.new_follower, '/users/show?pid=' + user.pid)
|
||||
}
|
||||
else if(req.body.type === 'false' && user !== null && user.followed_users.indexOf(userToFollow.pid) !== -1)
|
||||
{
|
||||
userToFollow.removeFromFollowers(user.pid);
|
||||
user.removeFromUsers(userToFollow.pid);
|
||||
res.sendStatus(200);
|
||||
}
|
||||
else
|
||||
res.sendStatus(423);
|
||||
|
||||
}).catch(error => {
|
||||
console.log(error);
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 423;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
|
@ -1,274 +0,0 @@
|
|||
var express = require('express');
|
||||
var router = express.Router();
|
||||
var xml = require('object-to-xml');
|
||||
const database = require('../../../../database');
|
||||
const util = require('../../../../authentication');
|
||||
var path = require('path');
|
||||
|
||||
router.get('/css/juxt.css', function (req, res) {
|
||||
res.set("Content-Type", "text/css");
|
||||
res.sendFile('css/juxt.css', {root: path.join(__dirname, '../../../../webfiles/portal/')});
|
||||
});
|
||||
|
||||
router.get('/js/juxt.js', function (req, res) {
|
||||
res.set("Content-Type", "application/javascript; charset=utf-8");
|
||||
res.sendFile('js/juxt.js', {root: path.join(__dirname, '../../../../webfiles/portal/')});
|
||||
});
|
||||
|
||||
router.get('/js/pjax.min.js', function (req, res) {
|
||||
res.set("Content-Type", "application/javascript; charset=utf-8");
|
||||
res.sendFile('js/pjax.min.js', {root: path.join(__dirname, '../../../../webfiles/portal/')});
|
||||
});
|
||||
|
||||
router.get('/fonts/Poppins-Light.woff', function (req, res) {
|
||||
res.set("Content-Type", "font/woff");
|
||||
res.sendFile('fonts/Poppins-Light.woff', {root: path.join(__dirname, '../../../../webfiles/portal/')});
|
||||
});
|
||||
|
||||
router.get('/fonts/Poppins-Light.ttf', function (req, res) {
|
||||
res.set("Content-Type", "font/ttf");
|
||||
res.sendFile('fonts/Poppins-Light.ttf', {root: path.join(__dirname, '../../../../webfiles/portal/')});
|
||||
});
|
||||
|
||||
router.get('/favicon.ico', function (req, res) {
|
||||
res.set("Content-Type", "image/x-icon");
|
||||
res.sendFile('css/favicon.ico', {root: path.join(__dirname, '../../../../webfiles/portal/')});
|
||||
});
|
||||
|
||||
router.get('/icons/:image_id.png', function (req, res) {
|
||||
res.set("Content-Type", "image/png");
|
||||
database.connect().then(async e => {
|
||||
let community = await database.getCommunityByID(req.params.image_id.toString());
|
||||
if(community !== null) {
|
||||
if(community.browser_icon.indexOf('data:image/png;base64,') !== -1)
|
||||
res.send(Buffer.from(community.browser_icon.replace('data:image/png;base64,',''), 'base64'));
|
||||
else
|
||||
res.send(Buffer.from(community.browser_icon, 'base64'));
|
||||
}
|
||||
else {
|
||||
let user = await database.getUserByPID(req.params.image_id.toString());
|
||||
if(user !== null)
|
||||
if(user.pfp_uri.indexOf('data:image/png;base64,') !== -1)
|
||||
res.send(Buffer.from(user.pfp_uri.replace('data:image/png;base64,',''), 'base64'));
|
||||
else
|
||||
res.send(Buffer.from(user.pfp_uri, 'base64'));
|
||||
else
|
||||
res.sendStatus(404);
|
||||
}
|
||||
}).catch(error => {
|
||||
console.error(error);
|
||||
res.sendStatus(404)
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/tip/:image_id.png', function (req, res) {
|
||||
res.set("Content-Type", "image/png");
|
||||
database.connect().then(async e => {
|
||||
let community = await database.getCommunityByID(req.params.image_id.toString());
|
||||
if(community !== null) {
|
||||
if(community.browser_thumbnail.indexOf('data:image/png;base64,') !== -1)
|
||||
res.send(Buffer.from(community.browser_thumbnail.replace('data:image/png;base64,',''), 'base64'));
|
||||
else
|
||||
res.send(Buffer.from(community.browser_thumbnail, 'base64'));
|
||||
}
|
||||
else {
|
||||
let user = await database.getUserByPID(req.params.image_id.toString());
|
||||
if(user !== null)
|
||||
if(user.pfp_uri.indexOf('data:image/png;base64,') !== -1)
|
||||
res.send(Buffer.from(user.pfp_uri.replace('data:image/png;base64,',''), 'base64'));
|
||||
else
|
||||
res.send(Buffer.from(user.pfp_uri, 'base64'));
|
||||
else
|
||||
res.sendStatus(404);
|
||||
}
|
||||
}).catch(error => {
|
||||
console.error(error);
|
||||
res.sendStatus(404)
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/banner/:image_id.png', function (req, res) {
|
||||
res.set("Content-Type", "image/png");
|
||||
database.connect().then(async e => {
|
||||
let community = await database.getCommunityByID(req.params.image_id.toString());
|
||||
if(community !== null)
|
||||
if(community.WiiU_browser_header.indexOf('data:image/png;base64,') !== -1)
|
||||
res.send(Buffer.from(community.WiiU_browser_header.replace('data:image/png;base64,',''), 'base64'));
|
||||
else
|
||||
res.send(Buffer.from(community.WiiU_browser_header, 'base64'));
|
||||
else
|
||||
res.sendStatus(404);
|
||||
}).catch(error => {
|
||||
console.error(error);
|
||||
res.sendStatus(404)
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/screenshot/:image_id.png', function (req, res) {
|
||||
res.set("Content-Type", "image/png");
|
||||
database.connect().then(async e => {
|
||||
let post = await database.getPostByID(req.params.image_id.toString());
|
||||
if(post !== null && post.screenshot !== '')
|
||||
if(post.screenshot.indexOf('data:image/png;base64,') !== -1)
|
||||
res.send(Buffer.from(post.screenshot.replace('data:image/png;base64,',''), 'base64'));
|
||||
else
|
||||
res.send(Buffer.from(post.screenshot, 'base64'));
|
||||
else
|
||||
res.sendStatus(404);
|
||||
}).catch(error => {
|
||||
console.error(error);
|
||||
res.sendStatus(404)
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/drawing/:image_id.png', function (req, res) {
|
||||
res.set("Content-Type", "image/png");
|
||||
database.connect().then(async e => {
|
||||
let post = await database.getPostByID(req.params.image_id.toString());
|
||||
if(post !== null && post.painting_uri !== '')
|
||||
if(post.painting_uri.indexOf('data:image/png;base64,') !== -1)
|
||||
res.send(Buffer.from(post.painting_uri.replace('data:image/png;base64,',''), 'base64'));
|
||||
else
|
||||
res.send(Buffer.from(post.painting_uri, 'base64'));
|
||||
else
|
||||
res.sendStatus(404);
|
||||
}).catch(error => {
|
||||
console.error(error);
|
||||
res.sendStatus(404)
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/notifications.json', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2||fonts.googleapis.com,,2');
|
||||
database.connect().then(async e => {
|
||||
let pid = util.data.processServiceToken(req.headers["x-nintendo-servicetoken"]);
|
||||
if(pid === null)
|
||||
res.sendStatus(403);
|
||||
else {
|
||||
let user = await database.getUserByPID(pid);
|
||||
if(user.notification_list) {
|
||||
res.send(
|
||||
{
|
||||
message_count: 0,
|
||||
notification_count: user.notification_list.filter(notification => notification.read === false).length,
|
||||
"messages": [
|
||||
{
|
||||
"screen_name": "JayDaBirb",
|
||||
"mii_face_url": "http://mii-images.account.pretendo.cc/",
|
||||
"is_official": true,
|
||||
"is_read": false,
|
||||
"created_at": "2020-04-29 01:04:80",
|
||||
"feeling_id": 1,
|
||||
"id": 1255383017044709400,
|
||||
"message_content": "https://invite.gg/pretendo"
|
||||
},
|
||||
{
|
||||
"screen_name": "PNID_Test06",
|
||||
"mii_face_url": "http://mii-images.account.pretendo.cc/",
|
||||
"is_official": false,
|
||||
"is_read": true,
|
||||
"created_at": "2020-05-18 02:17:50",
|
||||
"feeling_id": 1,
|
||||
"id": 1244384456055709400,
|
||||
"message_content": "Testing message number 2 updated"
|
||||
},
|
||||
{
|
||||
"screen_name": "PNID_Test14",
|
||||
"mii_face_url": "http://mii-images.account.pretendo.cc/",
|
||||
"is_official": false,
|
||||
"is_read": true,
|
||||
"created_at": "2020-05-18 02:17:50",
|
||||
"feeling_id": 1,
|
||||
"id": 1244384118059519400,
|
||||
"message_content": "Testing message number 3"
|
||||
},
|
||||
{
|
||||
"screen_name": "PNID_Test65",
|
||||
"mii_face_url": "http://mii-images.account.pretendo.cc/",
|
||||
"is_official": false,
|
||||
"is_read": true,
|
||||
"created_at": "2020-05-18 02:17:50",
|
||||
"feeling_id": 1,
|
||||
"id": 1244465118055709400,
|
||||
"message_content": "Did you know our Miiverse fork is called Juxt? pretty cool huh? ;)"
|
||||
},
|
||||
{
|
||||
"screen_name": "AnotherTestUser",
|
||||
"mii_face_url": "http://mii-images.account.pretendo.cc/",
|
||||
"is_official": false,
|
||||
"is_read": true,
|
||||
"created_at": "2020-05-18 02:17:50",
|
||||
"feeling_id": 1,
|
||||
"id": 1244384118792519400,
|
||||
"message_content": "Frick frack tic tak"
|
||||
},
|
||||
{
|
||||
"screen_name": "WowAnotherUserHuh",
|
||||
"mii_face_url": "http://mii-images.account.pretendo.cc/",
|
||||
"is_official": false,
|
||||
"is_read": true,
|
||||
"created_at": "2020-05-18 02:17:50",
|
||||
"feeling_id": 1,
|
||||
"id": 1244384648059589400,
|
||||
"message_content": "Hey kid want some meme?"
|
||||
},
|
||||
{
|
||||
"screen_name": "OkayLastOneIPromise",
|
||||
"mii_face_url": "http://mii-images.account.pretendo.cc/",
|
||||
"is_official": false,
|
||||
"is_read": true,
|
||||
"created_at": "2020-05-18 02:17:50",
|
||||
"feeling_id": 1,
|
||||
"id": 1244386594569545800,
|
||||
"message_content": "I promise this is the last time I'll ask for mod pls I'm sorry"
|
||||
}
|
||||
],
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}).catch(error => {
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/:post_id/oembed.json', function (req, res) {
|
||||
res.header('X-Nintendo-WhiteList','1|http,youtube.com,,2|https,youtube.com,,2|http,.youtube.com,,2|https,.youtube.com,,2|http,.ytimg.com,,2|https,.ytimg.com,,2|http,.googlevideo.com,,2|https,.googlevideo.com,,2|https,youtube.com,/embed/,6|https,youtube.com,/e/,6|https,youtube.com,/v/,6|https,www.youtube.com,/embed/,6|https,www.youtube.com,/e/,6|https,www.youtube.com,/v/,6|https,youtube.googleapis.com,/e/,6|https,youtube.googleapis.com,/v/,6|http,maps.googleapis.com,/maps/api/streetview,2|https,maps.googleapis.com,/maps/api/streetview,2|http,cbk0.google.com,/cbk,2|https,cbk0.google.com,/cbk,2|http,cbk1.google.com,/cbk,2|https,cbk1.google.com,/cbk,2|http,cbk2.google.com,/cbk,2|https,cbk2.google.com,/cbk,2|http,cbk3.google.com,/cbk,2|https,cbk3.google.com,/cbk,2|https,.cloudfront.net,,2|https,www.google-analytics.com,/,2|https,stats.g.doubleclick.net,,2|https,www.google.com,/ads/,2|https,ssl.google-analytics.com,,2|http,fonts.googleapis.com,,2||fonts.googleapis.com,,2');
|
||||
database.connect().then(async e => {
|
||||
let post = await database.getPostByID(req.params.post_id.toString());
|
||||
let user = await database.getUserByPID(post.pid);
|
||||
let doc = {
|
||||
"author_name": user.user_id,
|
||||
"author_url": "https://portal.olv.pretendo.cc/users/show?pid=" + user.pid,
|
||||
|
||||
}
|
||||
res.send(doc)
|
||||
}).catch(error => {
|
||||
console.log(error)
|
||||
res.set("Content-Type", "application/xml");
|
||||
res.statusCode = 400;
|
||||
response = {
|
||||
result: {
|
||||
has_error: 1,
|
||||
version: 1,
|
||||
code: 400,
|
||||
error_code: 15,
|
||||
message: "SERVER_ERROR"
|
||||
}
|
||||
};
|
||||
res.send("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xml(response));
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
|
@ -62,8 +62,8 @@
|
|||
<div class="post-screenshot-picker" onclick="loadScreenshots()">
|
||||
<div class="post-screenshot-picker-icon"></div>
|
||||
<div class="post-screenshot-picker-dropdown">
|
||||
<div><img src="" class="post-screenshot-preview" id="post-top-screen-preview" onclick="document.getElementById('screenshot-value').value = wiiuMainApplication.getScreenShot(true);"></div>
|
||||
<div><img src="" class="post-screenshot-preview" id="post-bottom-screen-preview" onclick="document.getElementById('screenshot-value').value = wiiuMainApplication.getScreenShot(false);"></div>
|
||||
<div><img src="" class="post-screenshot-preview" id="post-top-screen-preview" onclick="document.getElementById('screenshot-value').value = cave.capture_getUpperImageLeftDetail();"></div>
|
||||
<div><img src="" class="post-screenshot-preview" id="post-bottom-screen-preview" onclick="document.getElementById('screenshot-value').value = cave.capture_getLowerImage();"></div>
|
||||
<div onclick="document.getElementById('screenshot-value').value = ''; loadScreenshots()">No Screenshot</div>
|
||||
<input type="hidden" id="screenshot-value" name="screenshot" value="">
|
||||
</div>
|
||||
|
|
@ -77,11 +77,11 @@
|
|||
<div class="post-type-button-text selected" onclick="swapPostType(0)"></div>
|
||||
</td>
|
||||
<td rowspan="2" id="post-text-input">
|
||||
<textarea class="post-textarea" id="comment" name="body" placeholder="Tap here to make a post." rows="4" cols="50" onchange="if(wiiuFilter.checkWord(this.value) === -2) { this.value = ''; alert('Prost cannot contain explicit language');}"></textarea>
|
||||
<textarea class="post-textarea" id="comment" name="body" placeholder="Tap here to make a post." rows="4" cols="50" onchange="if(cave.checkWord(this.value) === -2) { this.value = ''; alert('Post cannot contain explicit language');}"></textarea>
|
||||
</td>
|
||||
<td rowspan="2" id="post-painting-input" style="display: none;">
|
||||
<div class="post-memo">
|
||||
<img class="post-memo-preview" id="memo" width="640px" height="240px" src="" style="display: none;" onclick="newPainting(false)">
|
||||
<img class="post-memo-preview" id="memo" width="170px" height="77px" src="" style="display: none;" onclick="newPainting(false)">
|
||||
<input type="hidden" id="memo-value" name="painting" value="">
|
||||
</div>
|
||||
</td>
|
||||
|
|
@ -95,19 +95,19 @@
|
|||
<tr>
|
||||
<td colspan="2">
|
||||
<label class="checkbox-container checkbox-post">Spoilers
|
||||
<input type="checkbox" id="spoiler" name="spoiler" value="true" onclick="wiiuSound.playSoundByName('SE_WAVE_MENU', 1);">
|
||||
<input type="checkbox" id="spoiler" name="spoiler" value="true" onclick="cave.snd_playSe('SE_OLV_OK');">
|
||||
<span class="checkmark"></span>
|
||||
</label>
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="height: 70px">
|
||||
<td class="post-close-button-wrapper" colspan="2">
|
||||
<div class="post-close-button" onclick="hideNewPostScreen();wiiuMemo.reset();">
|
||||
<div class="post-close-button" onclick="hideNewPostScreen();cave.memo_clear();">
|
||||
<p style="margin-top: -2px;">X <b>Close</b></p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<input type="submit" value="Post" class="submit-button" onclick="wiiuSound.playSoundByName('SE_WAVE_MENU', 1);wiiuSound.playSoundByName('BGM_OLV_MAIN_LOOP_NOWAIT', 3);">
|
||||
<input type="submit" value="Post" class="submit-button" onclick="cave.snd_playSe('SE_OLV_OK');">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
@ -154,44 +154,9 @@
|
|||
<p class="no-posts-text">No Posts</p>
|
||||
<%} else { %>
|
||||
<button id="load-more-posts-button" onclick="loadCommunityPosts()" style="background: #1F8A42">Load More Posts</button>
|
||||
<% newPosts.forEach(function(post) { %>
|
||||
<div class="post-user-info-wrapper" id="<%= post.id %>">
|
||||
<%if(post.verified) {%>
|
||||
<img class="community-page-post-user-icon verified" src="<%= post.mii_face_url %>" data-pjax="/users/show?pid=<%= post.pid %>">
|
||||
<span class="community-page-verified-user-badge community-page-verified" style="" data-pjax="/users/show?pid=<%= post.pid %>"></span>
|
||||
<%} else {%>
|
||||
<img class="community-page-post-user-icon" src="<%= post.mii_face_url %>" data-pjax="/users/show?pid=<%= post.pid %>">
|
||||
<span class="community-page-verified-user-badge community-page-verified" style="display: none;" data-pjax="/users/show?pid=<%= post.pid %>"></span>
|
||||
<%}%>
|
||||
<h2 class="community-page-post-username" data-pjax="/users/show?pid=<%= post.pid %>"><%= post.screen_name %></h2>
|
||||
<h4 class="community-page-post-time-stamp"><%= moment(post.created_at).fromNow() %></h4>
|
||||
|
||||
<div class="community-page-post-yeah-button-wrapper <%if(user.likes.indexOf(post.id) !== -1){ %> selected <%}%>">
|
||||
<div class="community-page-post-yeah-button" onclick="yeah(this.parentNode, '<%= post.id %>')"></div>
|
||||
</div>
|
||||
<div id="yeah-<%= post.id %>" class="community-page-post-yeah-count"><%= post.empathy_count %> Yeahs</div>
|
||||
</div>
|
||||
<div class="community-page-post-wrapper">
|
||||
<% if(post.body !== '' && post.painting === '' && post.screenshot === '' && !post.url) { %>
|
||||
<h3><%= post.body %></h3>
|
||||
<%} else { %>
|
||||
<% if(post.screenshot !== '') { %>
|
||||
<img id="<%= post.id %>" class="community-page-post-screenshot" src="data:image/png;base64,<%= post.screenshot %>">
|
||||
<%}%>
|
||||
<% if(post.painting !== '') { %>
|
||||
<img id="<%= post.id%>" class="community-page-post-painting" src="<%= post.painting_uri %>">
|
||||
<%}%>
|
||||
<% if(post.url) { %>
|
||||
<h3 style="font-weight: bolder; color: #4F279B">Video Playback is not yet supported on the 3DS</h3>
|
||||
<%}%>
|
||||
<% if(post.body) { %>
|
||||
<div class="community-page-post-text-overlay">
|
||||
<h3><%= post.body %></h3>
|
||||
</div>
|
||||
<%}%>
|
||||
<%}%>
|
||||
</div>
|
||||
<% }); %>
|
||||
<% newPosts.forEach(function(post) { %>
|
||||
<%- include('post_template', { post: post, mii_image_CDN: mii_image_CDN, lang: lang, reply: false }); %>
|
||||
<% }); %>
|
||||
<%}%>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ body {
|
|||
margin: 0;
|
||||
font-family: Poppins, Arial;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
|
@ -287,6 +288,10 @@ h4 {
|
|||
min-height: 55px;
|
||||
border-bottom: 1.5px solid #d6d2d2;
|
||||
}
|
||||
|
||||
.messages-list-wrapper:last-child {
|
||||
border: none;
|
||||
}
|
||||
.messages-list-wrapper.bottom {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
|
@ -469,14 +474,14 @@ h4 {
|
|||
.about-wrapper {
|
||||
display: none;
|
||||
text-align: center;
|
||||
width: 350px;
|
||||
width: 400px;
|
||||
height: 640px;
|
||||
}
|
||||
|
||||
.about-header {
|
||||
text-align: center;
|
||||
font-size: 20px;
|
||||
padding-top: 180px;
|
||||
font-size: 30px;
|
||||
padding-top: 160px;
|
||||
}
|
||||
|
||||
.about-body {
|
||||
|
|
@ -499,6 +504,7 @@ h4 {
|
|||
font-size: large;
|
||||
border-width: 0;
|
||||
border-radius: 10px;
|
||||
z-index: 5;
|
||||
}
|
||||
|
||||
/*Community and User Page*/
|
||||
|
|
@ -521,30 +527,32 @@ h4 {
|
|||
}
|
||||
|
||||
.user-page-tab {
|
||||
width: 260px;
|
||||
width: 100px;
|
||||
text-align: center;
|
||||
color: black;
|
||||
background-color: white;
|
||||
cursor: pointer;
|
||||
font-size: x-large;
|
||||
font-size: small;
|
||||
padding-top: 30px;
|
||||
padding-bottom: 30px;
|
||||
margin: -3px;
|
||||
margin-top: -5px;
|
||||
margin-bottom: -4px;
|
||||
}
|
||||
|
||||
.user-page-tab.selected {
|
||||
color: white;
|
||||
background-color: #673DB6;
|
||||
margin-top: -4px;
|
||||
}
|
||||
|
||||
.user-page-tab.left {
|
||||
border-top-left-radius: 10px;
|
||||
border-bottom-left-radius: 10px;
|
||||
border-top-left-radius: 5px;
|
||||
border-bottom-left-radius: 5px;
|
||||
}
|
||||
|
||||
.user-page-tab.right {
|
||||
border-top-right-radius: 10px;
|
||||
border-bottom-right-radius: 10px;
|
||||
border-top-right-radius: 5px;
|
||||
border-bottom-right-radius: 5px;
|
||||
}
|
||||
|
||||
.user-page-tab-triangle {
|
||||
|
|
@ -750,6 +758,7 @@ h4 {
|
|||
|
||||
.community-page-post-user-icon {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
border-radius: 4px;
|
||||
margin-right: 5px;
|
||||
float: left;
|
||||
|
|
@ -789,11 +798,7 @@ h4 {
|
|||
margin-top: -10px;
|
||||
}
|
||||
|
||||
.no-posts-text {
|
||||
margin-left: 40%;
|
||||
color: rgba(113,141,148,1);
|
||||
padding-top: 24px;
|
||||
}
|
||||
.no-posts-text {font-size: small;color: rgba(113,141,148,1);padding-bottom: 0;text-align: center;vertical-align: middle;line-height: 123px;}
|
||||
|
||||
h3 {
|
||||
padding-left: 20px;
|
||||
|
|
@ -914,20 +919,20 @@ iframe {
|
|||
}
|
||||
|
||||
.post-close-button {
|
||||
margin-left: 32px;
|
||||
margin-left: 34px;
|
||||
height: 15px;
|
||||
width: 56px;
|
||||
text-align: center;
|
||||
margin-top: -15px;
|
||||
position: absolute;
|
||||
cursor: pointer;
|
||||
font-size: small;
|
||||
color: #673DB6;
|
||||
background-color: white;
|
||||
/* border-radius: 2px; */
|
||||
border-radius: 5px;
|
||||
border-color: #673DB6;
|
||||
border-style: solid;
|
||||
border-width: 2px;
|
||||
margin-top: -35px;
|
||||
position: absolute;
|
||||
cursor: pointer;
|
||||
border-width: initial;
|
||||
}
|
||||
|
||||
/* New Post Container */
|
||||
|
|
@ -1019,7 +1024,7 @@ textarea {
|
|||
border-color: #673DB6;
|
||||
border-style: solid;
|
||||
border-width: initial;
|
||||
margin-top: -34px;
|
||||
margin-top: -15px;
|
||||
margin-left: -24px;
|
||||
position: absolute;
|
||||
cursor: pointer;
|
||||
|
|
@ -1029,10 +1034,10 @@ textarea {
|
|||
background-color: #eee;
|
||||
color: black;
|
||||
font-size: 100px;
|
||||
margin-left: 50px;
|
||||
margin-left: 34px;
|
||||
text-align: center;
|
||||
width: 120px;
|
||||
height: 150px;
|
||||
width: 50px;
|
||||
height: 48px;
|
||||
border-top-left-radius: 5px;
|
||||
margin-bottom: -5px;
|
||||
-webkit-user-select: none;
|
||||
|
|
@ -1059,13 +1064,10 @@ textarea {
|
|||
}
|
||||
|
||||
.post-type-button-text.selected {
|
||||
margin-left: 34px;
|
||||
background-color: #673DB6;
|
||||
color: white;
|
||||
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9TpSJVB1sQcchQnSyIijhKFYtgobQVWnUwufQLmjQkKS6OgmvBwY/FqoOLs64OroIg+AHi5uak6CIl/i8ptIjx4Lgf7+497t4BQqPCVLNrAlA1y0jFY2I2tyoGXiEgDD/6EZaYqSfSixl4jq97+Ph6F+VZ3uf+HH1K3mSATySeY7phEW8Qz2xaOud94hArSQrxOfG4QRckfuS67PIb56LDAs8MGZnUPHGIWCx2sNzBrGSoxNPEEUXVKF/Iuqxw3uKsVmqsdU/+wmBeW0lzneYI4lhCAkmIkFFDGRVYiNKqkWIiRfsxD/+w40+SSyZXGYwcC6hCheT4wf/gd7dmYWrSTQrGgO4X2/4YBQK7QLNu29/Htt08AfzPwJXW9lcbwOwn6fW2FjkCBraBi+u2Ju8BlzvA0JMuGZIj+WkKhQLwfkbflAMGb4HeNbe31j5OH4AMdbV8AxwcAmNFyl73eHdPZ2//nmn19wMlNnKIx2t1DgAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB+UCFQMROgDJkKcAAAOsSURBVHja7d27i1xlGIDx5x0mmyoqRGI2Cd7QwkZRrOwMhjQxghJB0MZCjUlhI2KztZ1gJYFgYWsWVxIhxMt/ELwUFhJjyBp2RRRiiuzGzWuxUynofOeye86Z59cF5swcvvc5Z2e+DAxIkiRJkiRJGr5o88kzcw7YAxwA7gHmXPKprAOrwDKwGhG3ehNAZs4DR4HngIPATudZyxrwFbAELEXESicDyMzdwNvAWw69NbeAj4CFiFjtTACZ+SbwHrDLGW2J68A7EfHhtgaQmWPgfeCkM9kWp4CTdd4jRI3hzwFngUPOYVudB56tGsGoxgt/4PA74TBQ+U/BqOLVfwJ43bXvjFcz840t+ROQmXcDl4A7XPdO+RN4KCJ+bfsOsODwO2kX8G6rd4DJJs/PuKPXVWvAfSV7BOPCFzhaYfjfAJ8AlycbGfp/c8D9wDHgsYLjdrK5A3uqlbPKzM9zeuuZ+VpmhvOsvN6Rmccnazmtc22dzI7MvFlwIn5KaG7tjxes+83JBl3jJ3FvwUlc9Mpv/E7wbcH6H2jjU8B8wWPPREQ6umZM1vJMwSH72ghgb8FjLzu2xl1q42ItCaDk3b/v9pu33sasRq7rbDMAA5AByABkADIAGYAMQAYgA5AByABkADIAGYAMQAYgA5AByABkADIAGYAMQAYgA5AByABkADIAGYAMQAYgA5AByABkADIAGYAMQAYgA5AByABkADIAGYAMQAYgA5AByAD0L3cWPPa6AQxPyW8IXzOAAcnMu4CXDGA2hz8GTgO7pzxkBfjdAIYx/EeA88DzBYd9VvKzveOOlX4EeAbYM+Oz3wE8CDxa4dilkgePOzL8B9j8ceTHve5ruQp82asAMvNh4Gtgv/OrbSEi1nqzD+DwG/U98HHpQSOHPwg3gJcjYqMXATj8Rt0GXomI76ocPHL4vfYXcCIiPq36BGOH31t/AC9GxBd1nmTk8HtpEXiy7vC3LACH34gN4ALwVES8EBE/NfGkY4ffSets7ukvA1fY3A4+FxG/Nf1C4w4PfwU4GBE/2EN7Rg7fANrg8IcmM4/l9DaymuXJnUM9vwOMKl75hyLiR8cygPcA3vYNwOEbgMM3AIdvAA7fABy+ATj8LtrK7wP8Ajzt5/zZvAO4yTPDAXjbn+EAHP6AArjh8GdYZs5n5m3/V2+2I1h0+LMdwL7MvPIfw7/q8Icfwf7JnWDjH18AWcxMv/jZM1HnbgA8MfnnxYi45nJKkiRJkiRJUhf9DSNBEBI1q2RhAAAAAElFTkSuQmCC');
|
||||
background-size: 60%;
|
||||
height: 50px;
|
||||
width: 50px;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat !important;
|
||||
}
|
||||
|
|
@ -1081,12 +1083,12 @@ textarea {
|
|||
|
||||
.post-textarea {
|
||||
margin-bottom: 0;
|
||||
height: 77px;
|
||||
height: 75px;
|
||||
width: 170px;
|
||||
border-top-left-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
margin-left: -154px;
|
||||
margin-top: -48.5px;
|
||||
margin-top: -47.5px;
|
||||
padding: 10px;
|
||||
position: absolute;
|
||||
font-size: small;
|
||||
|
|
@ -1095,18 +1097,20 @@ textarea {
|
|||
.post-memo {
|
||||
background-color: #eee;
|
||||
margin-bottom: 0;
|
||||
height: 300px;
|
||||
width: 835px;
|
||||
height: 96px;
|
||||
width: 190px;
|
||||
border-top-left-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
margin-left: -4px;
|
||||
margin-top: -48px;
|
||||
margin-left: -154px;
|
||||
text-align: center;
|
||||
position: absolute;
|
||||
border-top-right-radius: 5px;
|
||||
border-bottom-right-radius: 5px;
|
||||
}
|
||||
|
||||
.post-memo-preview {
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
margin-top: 30px;
|
||||
margin-top: 9px;
|
||||
}
|
||||
|
||||
.post-user-icon {
|
||||
|
|
@ -1226,17 +1230,67 @@ textarea {
|
|||
.post-screenshot-picker-dropdown {
|
||||
display: none;
|
||||
position: absolute;
|
||||
margin-top: 14px;
|
||||
width: 215px;
|
||||
height: 293px;
|
||||
border: 5px solid #c4bfbf;
|
||||
border-radius: 10px;
|
||||
margin-top: 3px;
|
||||
margin-left: -204px;
|
||||
width: 237px;
|
||||
height: 165px;
|
||||
border: 1.5px solid #c4bfbf;
|
||||
border-radius: 3px;
|
||||
background-color: #eee;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.post-screenshot-preview {
|
||||
width: 180px;
|
||||
height: 100px;
|
||||
width: 100px;
|
||||
height: 60px;
|
||||
border-radius: 5px;
|
||||
padding-top: 15px;
|
||||
padding-top: 5px;
|
||||
}
|
||||
|
||||
.spoiler-overlay > button {
|
||||
height: 30px;
|
||||
margin: auto;
|
||||
margin-left: 87px;
|
||||
background: #673DB6;
|
||||
color: white;
|
||||
border-width: 0;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.posts-wrapper {
|
||||
}
|
||||
|
||||
.reply-banner {
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
.reply-banner > h2 {
|
||||
color: #673DB6;
|
||||
position: absolute;
|
||||
margin-top: 7px;
|
||||
margin-left: 50px;
|
||||
font-size: small;
|
||||
}
|
||||
|
||||
.reply-banner > div {
|
||||
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAbCAYAAABiFp9rAAAABHNCSVQICAgIfAhkiAAAAZRJREFUSEvtlbFSwkAQhncRLBgLfAJ9A7FjnGSETkkBbyAWAp2WlvgG2hEcR3wCaQJlMkPGlrS8gwWVzjCS9S6RxAFMDnN0XHXF3v/d7b+3i3XFaAHCNRK+6Hb5Bja0sKH2iWsT0KQz1PY3xIEAxAH6sIxbkGgGtqkTzdRSXOLUNQuDQ0q7Fd3WHqJukQjEIW7GHSFgjoicaTpb6lqlySpgItDViZFP7eBoLhwFSwTigKZq1AjwOQ6GDcVwAPGIB7ozOn5805x1HReBYV3td1nfufD6HdFdx9Za64JEXsZBVQZ6nYuzLl5q2+eWbJjXRBuq0QPASihOXbbvuYArKyiyjInOmNZtEEM0nmayBQ9UK5q53a8PBxEP/vOS+DP0HowFDzb7vJ/7FX9YPILYxFuaP/xvYAqqiJAnwpy4nB/JNNNMlFfxXuA7uE9SB92PBSazIB9C6LI91Hhly1lREE6QAoqDSAGJQKSAfrcwX9D3ZNGQRKlrKoMiIZmLxq9yPRGIC9aVvsW+wulfLwkvIafoYlW+AbVv6Bm3qPJUAAAAAElFTkSuQmCC");
|
||||
background-repeat: no-repeat;
|
||||
background-size: contain;
|
||||
margin-left: 20px;
|
||||
margin-top: 4px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.replies-line {
|
||||
border-left: 5px solid #6e7894;
|
||||
margin: -11px 0 0 50px;
|
||||
height: 17px;
|
||||
position: absolute;
|
||||
z-index: 5;
|
||||
}
|
||||
|
||||
.replies-line:last-of-type {
|
||||
display: none;
|
||||
}
|
||||
|
|
@ -16,53 +16,18 @@
|
|||
</p>
|
||||
</div>
|
||||
<div id="headers-activity-feed-icon" class="header-icon"></div>
|
||||
<h2 class="header-title">Activity Feed</h2>
|
||||
<h2 class="header-title"><%= lang.global.activity_feed %></h2>
|
||||
</div>
|
||||
<div class="bottom-screen">
|
||||
<div class="community-page-posts-wrapper">
|
||||
<div id="community-posts-inner-body">
|
||||
|
||||
<% if(posts.length === 0) {%>
|
||||
<p class="no-posts-text">No Posts</p>
|
||||
<p class="no-posts-text"><%= lang.activity_feed.empty %></p>
|
||||
<%} else { %>
|
||||
<button id="load-more-posts-button" onclick="loadFeedPosts()">Load More Posts</button>
|
||||
<button id="load-more-posts-button" onclick="loadFeedPosts()"><%= lang.global.more %></button>
|
||||
<% posts.forEach(function(post) { %>
|
||||
<div class="post-user-info-wrapper" id="<%= post.id %>">
|
||||
<%if(post.verified) {%>
|
||||
<img class="community-page-post-user-icon verified" src="https://mii-images.cdn.<%= account_server %>/<%= post.pid %>/<% if(post.feeling_id === 1) {%>smile_open_mouth.png<%} else if(post.feeling_id === 2 ) {%>wink_left.png<%} else if(post.feeling_id === 3 ) {%>surprise_open_mouth.png<%} else if(post.feeling_id === 4 ) {%>frustrated.png<%} else if(post.feeling_id === 5 ) {%>sorrow.png<%} else {%>normal_face.png<%}%>" data-pjax="/users/show?pid=<%= post.pid %>" onclick="pjax.loadUrl('/users/show?pid=<%= post.pid %>')">
|
||||
<span class="community-page-verified-user-badge community-page-verified" style=""></span>
|
||||
<%} else {%>
|
||||
<img class="community-page-post-user-icon" src="https://mii-images.cdn.<%= account_server %>/<%= post.pid %>/<% if(post.feeling_id === 1) {%>smile_open_mouth.png<%} else if(post.feeling_id === 2 ) {%>wink_left.png<%} else if(post.feeling_id === 3 ) {%>surprise_open_mouth.png<%} else if(post.feeling_id === 4 ) {%>frustrated.png<%} else if(post.feeling_id === 5 ) {%>sorrow.png<%} else {%>normal_face.png<%}%>" data-pjax="/users/show?pid=<%= post.pid %>" onclick="pjax.loadUrl('/users/show?pid=<%= post.pid %>')">
|
||||
<span class="community-page-verified-user-badge community-page-verified" style="display: none;"></span>
|
||||
<%}%>
|
||||
<h2 class="community-page-post-username" data-pjax="/users/show?pid=<%= post.pid %>"><%= post.screen_name %></h2>
|
||||
<h4 class="community-page-post-time-stamp"><%= moment(post.created_at).fromNow() %> - <a onclick="pjax.loadUrl('/communities/<%=communityMap.get(post.title_id + '-id')%>/new')"><%= communityMap.get(post.title_id) %></a></h4>
|
||||
|
||||
<div class="community-page-post-yeah-button-wrapper <%if(user.likes.indexOf(post.id) !== -1){ %> selected <%}%>">
|
||||
<div class="community-page-post-yeah-button" onclick="yeah(this.parentNode, '<%= post.id %>')"></div>
|
||||
</div>
|
||||
<div id="yeah-<%= post.id %>" class="community-page-post-yeah-count"><%= post.empathy_count %> Yeahs</div>
|
||||
</div>
|
||||
<div class="community-page-post-wrapper">
|
||||
<% if(post.body !== '' && post.painting === '' && post.screenshot === '' && !post.url) { %>
|
||||
<h3><%= post.body %></h3>
|
||||
<%} else { %>
|
||||
<% if(post.screenshot !== '') { %>
|
||||
<img id="<%= post.id %>" class="community-page-post-screenshot" src="data:image/png;base64,<%= post.screenshot %>">
|
||||
<%}%>
|
||||
<% if(post.painting !== '') { %>
|
||||
<img id="<%= post.id%>" class="community-page-post-painting" src="<%= post.painting_uri %>">
|
||||
<%}%>
|
||||
<% if(post.url) { %>
|
||||
<h3 style="font-weight: bolder; color: #4F279B">Video Playback is not yet supported on the 3DS</h3>
|
||||
<%}%>
|
||||
<% if(post.body) { %>
|
||||
<div class="community-page-post-text-overlay">
|
||||
<h3><%= post.body %></h3>
|
||||
</div>
|
||||
<%}%>
|
||||
<%}%>
|
||||
</div>
|
||||
<%- include('post_template', { post: post, mii_image_CDN: mii_image_CDN, lang: lang, reply: false }); %>
|
||||
<% }); %>
|
||||
<%}%>
|
||||
</div>
|
||||
|
|
|
|||
225
src/webfiles/ctr/first_run.ejs
Normal file
225
src/webfiles/ctr/first_run.ejs
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,38 +1,3 @@
|
|||
<% newPosts.forEach(function(post) { %>
|
||||
<div class="post-user-info-wrapper" id="<%= post.id %>">
|
||||
<%if(post.verified) {%>
|
||||
<img class="community-page-post-user-icon verified" src="<%= post.mii_face_url %>" data-pjax="/users/show?pid=<%= post.pid %>">
|
||||
<span class="community-page-verified-user-badge community-page-verified" style="" data-pjax="/users/show?pid=<%= post.pid %>"></span>
|
||||
<%} else {%>
|
||||
<img class="community-page-post-user-icon" src="<%= post.mii_face_url %>" data-pjax="/users/show?pid=<%= post.pid %>">
|
||||
<span class="community-page-verified-user-badge community-page-verified" style="display: none;" data-pjax="/users/show?pid=<%= post.pid %>"></span>
|
||||
<%}%>
|
||||
<h2 class="community-page-post-username" data-pjax="/users/show?pid=<%= post.pid %>"><%= post.screen_name %></h2>
|
||||
<h4 class="community-page-post-time-stamp"><%= moment(post.created_at).fromNow() %> - <a onclick="pjax.loadUrl('/communities/<%=communityMap.get(post.title_id + '-id')%>/new')"><%= communityMap.get(post.title_id) %></h4>
|
||||
|
||||
<div class="community-page-post-yeah-button-wrapper <%if(user.likes.indexOf(post.id) !== -1){ %> selected <%}%>">
|
||||
<div class="community-page-post-yeah-button" onclick="yeah(this.parentNode, '<%= post.id %>')"></div>
|
||||
</div>
|
||||
<div id="yeah-<%= post.id %>" class="community-page-post-yeah-count"><%= post.empathy_count %> Yeahs</div>
|
||||
</div>
|
||||
<div class="community-page-post-wrapper">
|
||||
<% if(post.body !== '' && post.painting === '' && post.screenshot === '' && !post.url) { %>
|
||||
<h3><%= post.body %></h3>
|
||||
<%} else { %>
|
||||
<% if(post.screenshot !== '') { %>
|
||||
<img id="<%= post.id %>" class="community-page-post-screenshot" src="data:image/png;base64,<%= post.screenshot %>">
|
||||
<%}%>
|
||||
<% if(post.painting !== '') { %>
|
||||
<img id="<%= post.id%>" class="community-page-post-painting" src="<%= post.painting_uri %>">
|
||||
<%}%>
|
||||
<% if(post.url) { %>
|
||||
<h3 style="font-weight: bolder; color: #4F279B">Video Playback is not yet supported on the 3DS</h3>
|
||||
<%}%>
|
||||
<% if(post.body) { %>
|
||||
<div class="community-page-post-text-overlay">
|
||||
<h3><%= post.body %></h3>
|
||||
</div>
|
||||
<%}%>
|
||||
<%}%>
|
||||
</div>
|
||||
<%- include('post_template', { post: post, mii_image_CDN: mii_image_CDN, lang: lang, reply: false }); %>
|
||||
<% }); %>
|
||||
|
|
@ -23,34 +23,29 @@
|
|||
<table cellspacing="0">
|
||||
<tbody id="messages-list">
|
||||
<% if(user.notification_list.length === 0) {%>
|
||||
<p class="no-posts-text" style="margin-left: 36%;">No Notifications</p>
|
||||
<p class="no-posts-text"><%= lang.notifications.none %></p>
|
||||
<%} else { %>
|
||||
<% let i = 0; user.notification_list.reverse().forEach(function(notification) { %>
|
||||
<% if(i === 0) { %>
|
||||
<tr class="message-wrapper" data-pjax="<%=notification.link%>">
|
||||
<% for(let i = user.notification_list.length - 1; i >= 0; i--) { %>
|
||||
<% if(i === user.notification_list.length - 1) { %>
|
||||
<tr class="message-wrapper" data-pjax="<%=user.notification_list[i].link%>">
|
||||
<td class="messages-unread-badge-wrapper top">
|
||||
<%if(!notification.read) {%><div class="unread-badge"></div><%}%>
|
||||
<%if(!user.notification_list[i].read) {%><div class="unread-badge"></div><%}%>
|
||||
</td>
|
||||
<td class="messages-list-wrapper top">
|
||||
<h3 class="notifications-list-content"><%= notification.content %><span style="color: rgba(113,141,148,1)"> - <%= moment(notification.created_at).fromNow() %></span></h3>
|
||||
<h3 class="notifications-list-content"><%= user.notification_list[i].content %><span style="color: rgba(113,141,148,1)"> - <%= moment(user.notification_list[i].created_at).fromNow() %></span></h3>
|
||||
</td>
|
||||
</tr>
|
||||
<%i = -1;%>
|
||||
<%} else {%>
|
||||
<tr class="message-wrapper" data-pjax="<%=notification.link%>">
|
||||
<tr class="message-wrapper" data-pjax="<%=user.notification_list[i].link%>">
|
||||
<td class="messages-unread-badge-wrapper">
|
||||
<%if(!notification.read) {%><div class="unread-badge"></div><%}%>
|
||||
<%if(!user.notification_list[i].read) {%><div class="unread-badge"></div><%}%>
|
||||
</td>
|
||||
<td class="messages-list-wrapper">
|
||||
<h3 class="notifications-list-content"><%= notification.content %><span style="color: rgba(113,141,148,1)"> - <%= moment(notification.created_at).fromNow() %></span></h3>
|
||||
<h3 class="notifications-list-content"><%= user.notification_list[i].content %><span style="color: rgba(113,141,148,1)"> - <%= moment(user.notification_list[i].created_at).fromNow() %></span></h3>
|
||||
</td>
|
||||
</tr>
|
||||
<%}%>
|
||||
<%});%>
|
||||
</tr>
|
||||
<td></td>
|
||||
<td class="messages-list-wrapper end"></td>
|
||||
</tr>
|
||||
<%}%>
|
||||
<%}%>
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
|
|||
37
src/webfiles/ctr/post.ejs
Normal file
37
src/webfiles/ctr/post.ejs
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>3DS Testing</title>
|
||||
<script src="/js/pjax.js"></script>
|
||||
<script src="/js/juxt.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/css/juxt.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="main">
|
||||
<div class="top-screen">
|
||||
<div class="header-description">
|
||||
<p>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
<div id="" class="header-icon"><img class="community-page-info-icon" src="<%= user.pfp_uri %>"></div>
|
||||
<h2 class="header-title">Post</h2>
|
||||
</div>
|
||||
<div class="bottom-screen">
|
||||
<div class="communities-wrapper" id="popular-communities" style="margin-top: 15px">
|
||||
<%- include('post_template', { post: post, mii_image_CDN: mii_image_CDN, lang: lang, reply: false }); %>
|
||||
</div>
|
||||
<span class="replies-line"></span>
|
||||
<% replies.forEach(function(post) { %>
|
||||
<div class="communities-wrapper" id="popular-communities" style="margin-top: 15px">
|
||||
<%- include('post_template', { post: post, mii_image_CDN: mii_image_CDN, lang: lang, reply: true }); %>
|
||||
</div>
|
||||
<span class="replies-line"></span>
|
||||
<% }); %>
|
||||
<div class="toolbar-padding"></div>
|
||||
</div>
|
||||
</div>
|
||||
<body onload="onStart()"></body>
|
||||
</body>
|
||||
</html>
|
||||
48
src/webfiles/ctr/post_template.ejs
Normal file
48
src/webfiles/ctr/post_template.ejs
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
<div class="posts-wrapper" id="<%= post.id %>">
|
||||
<div class="post-user-info-wrapper" id="<%= post.id %>">
|
||||
<%if(post.verified) {%>
|
||||
<img class="community-page-post-user-icon verified" src="<%= mii_image_CDN %>/<%= post.pid %>/<% if(post.feeling_id === 1) {%>smile_open_mouth.png<%} else if(post.feeling_id === 2 ) {%>wink_left.png<%} else if(post.feeling_id === 3 ) {%>surprise_open_mouth.png<%} else if(post.feeling_id === 4 ) {%>frustrated.png<%} else if(post.feeling_id === 5 ) {%>sorrow.png<%} else {%>normal_face.png<%}%>" data-pjax="/users/show?pid=<%= post.pid %>">
|
||||
<span class="community-page-verified-user-badge community-page-verified" style="" data-pjax="/users/show?pid=<%= post.pid %>"></span>
|
||||
<%} else {%>
|
||||
<img class="community-page-post-user-icon" src="<%= mii_image_CDN %>/<%= post.pid %>/<% if(post.feeling_id === 1) {%>smile_open_mouth.png<%} else if(post.feeling_id === 2 ) {%>wink_left.png<%} else if(post.feeling_id === 3 ) {%>surprise_open_mouth.png<%} else if(post.feeling_id === 4 ) {%>frustrated.png<%} else if(post.feeling_id === 5 ) {%>sorrow.png<%} else {%>normal_face.png<%}%>" data-pjax="/users/show?pid=<%= post.pid %>">
|
||||
<span class="community-page-verified-user-badge community-page-verified" style="display: none;" data-pjax="/users/show?pid=<%= post.pid %>"></span>
|
||||
<%}%>
|
||||
<h2 class="community-page-post-username" data-pjax="/users/show?pid=<%= post.pid %>"><%= post.screen_name %></h2>
|
||||
<h4 class="community-page-post-time-stamp"><%= moment(post.created_at).fromNow() %> - <a onclick="cave.snd_playSe('SE_OLV_OK');pjax.loadUrl('/communities/<%= post.community_id %>/new')"><%= communityMap.get(post.community_id) %></a></h4>
|
||||
|
||||
<div class="community-page-post-yeah-button-wrapper <%if(user.likes.indexOf(post.id) !== -1){ %> selected <%}%>">
|
||||
<div class="community-page-post-yeah-button" onclick="<%if(user.pid !== 1000000000) {%>yeah(this.parentNode, '<%= post.id %>')<%}%>"></div>
|
||||
</div>
|
||||
<div id="yeah-<%= post.id %>" class="community-page-post-yeah-count"><%= post.empathy_count %> <%= lang.global.yeahs %></div>
|
||||
</div>
|
||||
<div class="spoiler-overlay" <% if(post.is_spoiler === 0) {%>style="display: none"<%}%>>
|
||||
<button onclick="cave.snd_playSe('SE_OLV_OK'); this.parentElement.style.display = 'none'; document.getElementById('post-content-<%= post.id%>').style.display = 'block'">Click to Show Spoiler</button>
|
||||
</div>
|
||||
<div class="community-page-post-wrapper" id="post-content-<%= post.id%>" <%if(!reply){%>onclick="cave.snd_playSe('SE_OLV_OK'); pjax.loadUrl('/posts/<%= post.id%>')"<%}%> <% if(post.is_spoiler === 1) {%>style="display: none"<%}%>>
|
||||
<% if(post.body !== '' && post.painting === '' && post.screenshot === '' && !post.url) { %>
|
||||
<h3><%= post.body %></h3>
|
||||
<%} else { %>
|
||||
<% if(post.screenshot !== '') { %>
|
||||
<img id="<%= post.id %>" class="community-page-post-screenshot" src="data:image/png;base64,<%= post.screenshot %>">
|
||||
<%}%>
|
||||
<% if(post.painting !== '') { %>
|
||||
<img id="<%= post.id%>" class="community-page-post-painting" src="<%= post.painting_uri %>">
|
||||
<%}%>
|
||||
<% if(post.url) { %>
|
||||
<h3 style="font-weight: bolder; color: #4F279B">Video Playback is not yet supported on the 3DS</h3>
|
||||
<%}%>
|
||||
<% if(post.body) { %>
|
||||
<div class="community-page-post-text-overlay">
|
||||
<h3><%= post.body %></h3>
|
||||
</div>
|
||||
<%}%>
|
||||
<%}%>
|
||||
</div>
|
||||
<%if(post.reply_count > 0) {%>
|
||||
<div class="reply-banner">
|
||||
<div></div>
|
||||
<h2><%= post.reply_count %> replies</h2>
|
||||
</div>
|
||||
<%}%>
|
||||
</div>
|
||||
|
||||
|
|
@ -15,7 +15,7 @@
|
|||
|
||||
</p>
|
||||
</div>
|
||||
<div id="" class="header-icon"><img class="community-page-info-icon" src="<%= user.pfp_uri %>"></div>
|
||||
<div id="" class="header-icon"><img class="community-page-info-icon" src="<%= mii_image_CDN %>/<%= user.pid %>/normal_face.png"></div>
|
||||
<h2 class="header-title"><%= user.user_id %></h2>
|
||||
</div>
|
||||
<div class="bottom-screen">
|
||||
|
|
|
|||
|
|
@ -1,12 +1,20 @@
|
|||
<%if(user === undefined || user === null) {%>
|
||||
<body>
|
||||
<h1>You are not authorized to access this application</h1>
|
||||
<p>If you believe this is an issue, contact @Jemma#6508 on Discord</p>
|
||||
<p>Error: <%=error%></p>
|
||||
</body>
|
||||
<%} else {%>
|
||||
<script>
|
||||
<%if(user.account_status === 1) {%>
|
||||
<%if(user.account_status === 1) {%>
|
||||
wiiuErrorViewer.openByCodeAndMessage(5980009, '<%=user.user_id%> has been limited from posting until: \n\n<%= moment(user.ban_lift_date) %>.\n\nReason: <%=user.ban_reason%>\n\nIf you have any questions contact the developers in the Discord server.');
|
||||
location.href = '/communities'
|
||||
<%} else if(user.account_status === 2) {%>
|
||||
<%} else if(user.account_status === 2) {%>
|
||||
wiiuErrorViewer.openByCodeAndMessage(5980010, '<%=user.user_id%> has been banned until: \n\n<%= moment(user.ban_lift_date) %>.\n\nReason: <%=user.ban_reason%>\n\nIf you have any questions contact the developers in the Discord server.');
|
||||
wiiuBrowser.closeApplication();
|
||||
<%} else if(user.account_status === 3) {%>
|
||||
<%} else if(user.account_status === 3) {%>
|
||||
wiiuErrorViewer.openByCodeAndMessage(5980011, '<%=user.user_id%> has been banned forever.\n\nReason: <%=user.ban_reason%>\n\nIf you have any questions contact the developers in the Discord server.');
|
||||
wiiuBrowser.closeApplication();
|
||||
<%}%>
|
||||
</script>
|
||||
<%}%>
|
||||
</script>
|
||||
<%}%>
|
||||
|
|
@ -88,7 +88,7 @@
|
|||
<div class="post-type-button-text selected" onclick="swapPostType(0)"></div>
|
||||
</td>
|
||||
<td rowspan="2" id="post-text-input">
|
||||
<textarea class="post-textarea" id="comment" name="body" placeholder="<%= lang.new_post.text_hint %>" rows="4" cols="50" onchange="if(wiiuFilter.checkWord(this.value) === -2) { this.value = ''; alert('<%= lang.new_post.swearing %>');}"></textarea>
|
||||
<textarea class="post-textarea" id="comment" name="body" maxlength="280" placeholder="<%= lang.new_post.text_hint %>" rows="4" cols="50" onchange="if(wiiuFilter.checkWord(this.value) === -2) { this.value = ''; alert('<%= lang.new_post.swearing %>');}"></textarea>
|
||||
</td>
|
||||
<td rowspan="2" id="post-painting-input" style="display: none;">
|
||||
<div class="post-memo">
|
||||
|
|
|
|||
|
|
@ -303,7 +303,7 @@ ul, ol, menu, li {
|
|||
}
|
||||
|
||||
.post-user-info-wrapper {
|
||||
margin-bottom: 15px;
|
||||
margin-bottom: 40px;
|
||||
margin-left: 15px;
|
||||
min-width: 520px;
|
||||
}
|
||||
|
|
@ -834,8 +834,8 @@ td.messages-list-wrapper.end {
|
|||
border-radius: 10px;
|
||||
white-space: nowrap;
|
||||
overflow-x: auto;
|
||||
box-shadow: 0 3px 15px 0 rgb(0 0 0 / 50%);
|
||||
-webkit-box-shadow: 0 3px 15px 0 rgb(0 0 0 / 50%);
|
||||
box-shadow: 0 3px 15px 0 rgba(0, 0, 0, 0);
|
||||
-webkit-box-shadow: 0 3px 15px 0 rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
#search-icon {
|
||||
|
|
@ -1003,8 +1003,8 @@ h4 {
|
|||
background-color: rgb(233, 233, 233);
|
||||
border: 1.5px solid #e9e9e9;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 2px 5px 0 rgb(0 0 0 / 50%);
|
||||
-webkit-box-shadow: 0 2px 5px 0 rgb(0 0 0 / 50%);
|
||||
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0);
|
||||
-webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
.community-page-follow-button-wrapper {
|
||||
|
|
@ -1101,8 +1101,8 @@ h4 {
|
|||
width: 760px;
|
||||
border-radius: 10px;
|
||||
margin-bottom: 20px;
|
||||
box-shadow: 0 2px 5px 0 rgb(0 0 0 / 50%);
|
||||
-webkit-box-shadow: 0 2px 5px 0 rgb(0 0 0 / 50%);
|
||||
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0);
|
||||
-webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
.community-page-post-painting {
|
||||
|
|
@ -1110,8 +1110,9 @@ h4 {
|
|||
height: 285px;
|
||||
border-radius: 10px;
|
||||
margin-bottom: 15px;
|
||||
box-shadow: 0 2px 5px 0 rgb(0 0 0 / 50%);
|
||||
-webkit-box-shadow: 0 2px 5px 0 rgb(0 0 0 / 50%);
|
||||
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.5);
|
||||
-webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.5);
|
||||
image-rendering: pixelated;
|
||||
}
|
||||
|
||||
.community-page-post-time-stamp {
|
||||
|
|
@ -1214,8 +1215,8 @@ h4 {
|
|||
text-align: center;
|
||||
line-height: 18px;
|
||||
-webkit-border-radius: 20px;
|
||||
box-shadow: 0 2px 5px 0 rgb(0 0 0 / 50%);
|
||||
-webkit-box-shadow: 0 2px 5px 0 rgb(0 0 0 / 50%);
|
||||
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0);
|
||||
-webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
.community-page-post-username {
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
<%- include('nav_bar', { selection: 1 }); %>
|
||||
<div id="main">
|
||||
<h1 id="title" class="page-header"><%= lang.global.activity_feed %></h1>
|
||||
<div class="community-page-posts-wrapper">
|
||||
<div class="community-page-post-box">
|
||||
<div id="community-posts-inner-body">
|
||||
<% if(posts.length === 0) {%>
|
||||
<p class="no-posts-text"><%= lang.activity_feed.empty %></p>
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -2,29 +2,35 @@
|
|||
.post-user-info-wrapper {
|
||||
margin-left: 30px;
|
||||
}
|
||||
.posts-wrapper {
|
||||
height: 135px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
</style>
|
||||
<% followers.forEach(function(user) { %>
|
||||
<div class="post-user-info-wrapper" id="<%= user.pid %>">
|
||||
<%if(user.official) {%>
|
||||
<img class="community-page-post-user-icon verified" src="https://mii-images.cdn.<%= account_server %>/<%= user.pid %>/normal_face.png" data-pjax="/users/show?pid=<%= user.pid %>">
|
||||
<span class="community-page-verified-user-badge community-page-verified" style=""></span>
|
||||
<%} else {%>
|
||||
<img class="community-page-post-user-icon" src="https://mii-images.cdn.<%= account_server %>/<%= user.pid %>/normal_face.png" data-pjax="/users/show?pid=<%= user.pid %>">
|
||||
<span class="community-page-verified-user-badge community-page-verified" style="display: none;"></span>
|
||||
<%}%>
|
||||
<h2 class="community-page-post-username" style="padding-top: 13px;" data-pjax="/users/show?pid=<%= user.pid %>"><%= user.user_id %></h2>
|
||||
<h4 class="community-page-post-time-stamp" style="width: 400px;white-space: nowrap;overflow: hidden;"><% if(user.profile_comment_visibility){%><%=user.profile_comment%><%}%></h4>
|
||||
<div class="posts-wrapper" onclick="pjax.loadUrl('/users/show?pid=<%= user.pid %>')">
|
||||
<div class="post-user-info-wrapper" id="<%= user.pid %>">
|
||||
<%if(user.official) {%>
|
||||
<img class="community-page-post-user-icon verified" src="https://mii-images.cdn.<%= account_server %>/<%= user.pid %>/normal_face.png">
|
||||
<span class="community-page-verified-user-badge community-page-verified" style=""></span>
|
||||
<%} else {%>
|
||||
<img class="community-page-post-user-icon" src="https://mii-images.cdn.<%= account_server %>/<%= user.pid %>/normal_face.png">
|
||||
<span class="community-page-verified-user-badge community-page-verified" style="display: none;"></span>
|
||||
<%}%>
|
||||
<h2 class="community-page-post-username" style="padding-top: 13px;" data-pjax="/users/show?pid=<%= user.pid %>"><%= user.user_id %></h2>
|
||||
<h4 class="community-page-post-time-stamp" style="width: 400px;white-space: nowrap;overflow: hidden;"><% if(user.profile_comment_visibility){%><%=user.profile_comment%><%}%></h4>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<% }); %>
|
||||
|
||||
<% communities.forEach(function(community) { %>
|
||||
<div class="post-user-info-wrapper" id="<%= community %>">
|
||||
<img class="community-page-post-user-icon" src="<%= cdnURL %>/icons/<%= community %>.png" data-pjax="/communities/<%= community %>/new">
|
||||
<h2 class="community-page-post-username" data-pjax="/communities/<%= community %>/new"><%= communityMap.get(community) %></h2>
|
||||
<h4 class="community-page-post-time-stamp" style="width: 400px;white-space: nowrap;overflow: hidden;"><%=community.description%></h4>
|
||||
<div class="posts-wrapper" onclick="pjax.loadUrl('/communities/<%= community %>/new')">
|
||||
<div class="post-user-info-wrapper" id="<%= community %>">
|
||||
<img class="community-page-post-user-icon" src="<%= cdnURL %>/icons/<%= community %>.png">
|
||||
<h2 class="community-page-post-username" data-pjax="/communities/<%= community %>/new"><%= communityMap.get(community) %></h2>
|
||||
<h4 class="community-page-post-time-stamp" style="width: 400px;white-space: nowrap;overflow: hidden;"><%=community.description%></h4>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<% }); %>
|
||||
|
||||
<div style="height: 30px"></div>
|
||||
|
|
|
|||
|
|
@ -27,28 +27,27 @@
|
|||
<% if(user.notification_list.length === 0) {%>
|
||||
<p class="no-posts-text"><%= lang.notifications.none %></p>
|
||||
<%} else { %>
|
||||
<% let i = 0; user.notification_list.forEach(function(notification) { %>
|
||||
<% if(i === 0) { %>
|
||||
<tr class="message-wrapper" data-pjax="<%=notification.link%>">
|
||||
<% for(let i = user.notification_list.length - 1; i >= 0; i--) { %>
|
||||
<% if(i === user.notification_list.length - 1) { %>
|
||||
<tr class="message-wrapper" data-pjax="<%=user.notification_list[i].link%>">
|
||||
<td class="messages-unread-badge-wrapper top">
|
||||
<%if(!notification.read) {%><div class="unread-badge"></div><%}%>
|
||||
<%if(!user.notification_list[i].read) {%><div class="unread-badge"></div><%}%>
|
||||
</td>
|
||||
<td class="messages-list-wrapper top">
|
||||
<h3 class="notifications-list-content"><%= notification.content %><span style="color: rgba(113,141,148,1)"> - <%= moment(notification.created_at).fromNow() %></span></h3>
|
||||
<h3 class="notifications-list-content"><%= user.notification_list[i].content %><span style="color: rgba(113,141,148,1)"> - <%= moment(user.notification_list[i].created_at).fromNow() %></span></h3>
|
||||
</td>
|
||||
</tr>
|
||||
<%i = -1;%>
|
||||
<%} else {%>
|
||||
<tr class="message-wrapper" data-pjax="<%=notification.link%>">
|
||||
<tr class="message-wrapper" data-pjax="<%=user.notification_list[i].link%>">
|
||||
<td class="messages-unread-badge-wrapper">
|
||||
<%if(!notification.read) {%><div class="unread-badge"></div><%}%>
|
||||
<%if(!user.notification_list[i].read) {%><div class="unread-badge"></div><%}%>
|
||||
</td>
|
||||
<td class="messages-list-wrapper">
|
||||
<h3 class="notifications-list-content"><%= notification.content %><span style="color: rgba(113,141,148,1)"> - <%= moment(notification.created_at).fromNow() %></span></h3>
|
||||
<h3 class="notifications-list-content"><%= user.notification_list[i].content %><span style="color: rgba(113,141,148,1)"> - <%= moment(user.notification_list[i].created_at).fromNow() %></span></h3>
|
||||
</td>
|
||||
</tr>
|
||||
<%}%>
|
||||
<%});%>
|
||||
<%}%>
|
||||
<%}%>
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@
|
|||
<div class="post-type-button-text selected" onclick="swapPostType(0)"></div>
|
||||
</td>
|
||||
<td rowspan="2" id="post-text-input">
|
||||
<textarea class="post-textarea" id="comment" name="body" placeholder="<%= lang.new_post.text_hint %>" rows="4" cols="50" onchange="if(wiiuFilter.checkWord(this.value) === -2) { this.value = ''; alert('<%= lang.new_post.swearing %>');}"></textarea>
|
||||
<textarea class="post-textarea" id="comment" name="body" maxlength="280" placeholder="<%= lang.new_post.text_hint %>" rows="4" cols="50" onchange="if(wiiuFilter.checkWord(this.value) === -2) { this.value = ''; alert('<%= lang.new_post.swearing %>');}"></textarea>
|
||||
</td>
|
||||
<td rowspan="2" id="post-painting-input" style="display: none;">
|
||||
<div class="post-memo">
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
<span class="community-page-verified-user-badge community-page-verified" style="display: none;" data-pjax="/users/show?pid=<%= post.pid %>"></span>
|
||||
<%}%>
|
||||
<h2 class="community-page-post-username" data-pjax="/users/show?pid=<%= post.pid %>"><%= post.screen_name %></h2>
|
||||
<h4 class="community-page-post-time-stamp"><%= moment(post.created_at).fromNow() %> - <p onclick="wiiuSound.playSoundByName('SE_WAVE_MENU', 1);pjax.loadUrl('/communities/<%= post.community_id %>/new')"><%= communityMap.get(post.community_id) %></p></h4>
|
||||
<h4 class="community-page-post-time-stamp"><%= moment(post.created_at).fromNow() %> - <a onclick="wiiuSound.playSoundByName('SE_WAVE_MENU', 1);pjax.loadUrl('/communities/<%= post.community_id %>/new')"><%= communityMap.get(post.community_id) %></a></h4>
|
||||
|
||||
<div class="community-page-post-yeah-button-wrapper <%if(user.likes.indexOf(post.id) !== -1){ %> selected <%}%>">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="60" height="60" viewBox="0 0 33 30">
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user