diff options
| -rw-r--r-- | package.json | 3 | ||||
| -rw-r--r-- | pages/settings.tsx | 30 | ||||
| -rw-r--r-- | yarn.lock | 40 | 
3 files changed, 64 insertions, 9 deletions
diff --git a/package.json b/package.json index 5abd5fb..3f67c52 100644 --- a/package.json +++ b/package.json @@ -10,12 +10,15 @@      "@testing-library/jest-dom": "^5.11.4",      "@testing-library/react": "^11.1.0",      "@testing-library/user-event": "^12.1.10", +    "@types/pica": "^5.1.2",      "@types/react-cookies": "^0.1.0",      "@types/uuid": "^8.3.0",      "axios": "^0.21.1",      "email-validator": "^2.0.4",      "friendly-time": "^1.1.1", +    "image-blob-reduce": "^2.2.2",      "next": "^10.0.5", +    "pica": "^6.1.1",      "react": "^17.0.1",      "react-cookies": "^0.1.1",      "react-dom": "^17.0.1", diff --git a/pages/settings.tsx b/pages/settings.tsx index bbc4672..99a87d1 100644 --- a/pages/settings.tsx +++ b/pages/settings.tsx @@ -1,6 +1,8 @@  import { CSSProperties, useContext } from 'react';  import * as cookies from 'react-cookies';  import axios from 'axios'; +import pica from 'pica'; +import reduce from 'image-blob-reduce';  import { NavBar } from '../components/navbar';  import { CenteredPage, PageTitle } from '../components/page'; @@ -19,19 +21,29 @@ var SettingsSubsectionStyle: CSSProperties = {  	minHeight: 40  }; -function uploadNewProfileImage() { +async function uploadNewProfileImage() {  	if (!this.result) return; +  	var result = this.result.split(";");  	var mimeType = result[0].substr(5); -	var data = result[1].substr(7); +  	if (!["image/png", "image/jpeg"].includes(mimeType)) return; -	axios.request({ -		method: "post", -		url: `/api/user/avatar`, -		headers: {"content-type": "image/png"}, -		data: data -	}) -	.then(() => window.location.reload()); //TODO: this is straight garbage + +	var blob = await (await fetch(this.result)).blob() + +	var image = await new reduce().toBlob(blob, { max: 256 }); +	var reader = new FileReader(); + +	reader.readAsBinaryString(image); +	reader.onload = async () => { +		await axios.request({ +			method: "post", +			url: `/api/user/avatar`, +			headers: {"content-type": "image/png"}, +			data: btoa(reader.result as string) +		}); +		window.location.reload(); //TODO: this is straight garbage +	}  }  export default function SettingsPage() { @@ -2028,6 +2028,11 @@    resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"    integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== +"@types/pica@^5.1.2": +  version "5.1.2" +  resolved "https://registry.yarnpkg.com/@types/pica/-/pica-5.1.2.tgz#d96cf3efbb7d839109d5a43c0733886e70cdd9fd" +  integrity sha512-KJPg2vGt1l03VaDK1SPKDcm/I5RVexO5Jyo/kGPlaS7SqVOkY83O3f1iyff981UnSzbF3Tg1Zw0r6vX6vB6JxA== +  "@types/prettier@^2.0.0":    version "2.1.5"    resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.5.tgz#b6ab3bba29e16b821d84e09ecfaded462b816b00" @@ -5986,6 +5991,11 @@ globby@^6.1.0:      pify "^2.0.0"      pinkie-promise "^2.0.0" +glur@^1.1.2: +  version "1.1.2" +  resolved "https://registry.yarnpkg.com/glur/-/glur-1.1.2.tgz#f20ea36db103bfc292343921f1f91e83c3467689" +  integrity sha1-8g6jbbEDv8KSNDkh8fkeg8NGdok= +  graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4:    version "4.2.4"    resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" @@ -6381,6 +6391,13 @@ ignore@^5.1.4:    resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"    integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +image-blob-reduce@^2.2.2: +  version "2.2.2" +  resolved "https://registry.yarnpkg.com/image-blob-reduce/-/image-blob-reduce-2.2.2.tgz#0c1c1817ee8666bcd174f191a125ea70a2f041d2" +  integrity sha512-4pfusXGLRfMyASVr/nvHxHoYDcB+VbfYnOrLdK2VWO56yhkLvSP9l2HXwYIJUFBw4bPqQoZPWFm7rz01lgaOgA== +  dependencies: +    pica "^6.1.1" +  immer@7.0.9:    version "7.0.9"    resolved "https://registry.yarnpkg.com/immer/-/immer-7.0.9.tgz#28e7552c21d39dd76feccd2b800b7bc86ee4a62e" @@ -8162,6 +8179,14 @@ multicast-dns@^6.0.1:      dns-packet "^1.3.1"      thunky "^1.0.2" +multimath@^2.0.0: +  version "2.0.0" +  resolved "https://registry.yarnpkg.com/multimath/-/multimath-2.0.0.tgz#0d37acf67c328f30e3d8c6b0d3209e6082710302" +  integrity sha512-toRx66cAMJ+Ccz7pMIg38xSIrtnbozk0dchXezwQDMgQmbGpfxjtv68H+L00iFL8hxDaVjrmwAFSb3I6bg8Q2g== +  dependencies: +    glur "^1.1.2" +    object-assign "^4.1.1" +  nan@^2.12.1:    version "2.14.2"    resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" @@ -8952,6 +8977,16 @@ performance-now@^2.1.0:    resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"    integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +pica@^6.1.1: +  version "6.1.1" +  resolved "https://registry.yarnpkg.com/pica/-/pica-6.1.1.tgz#5219d70265bf34926f656e42268b14ddba5c734b" +  integrity sha512-dmjQheDGFOl+30rQhN3NM3MyDNjeOZvco6IL3ZVYgyVDmhgvcSCGOAsydRCIaZ36mcXO7ci0XFeD+h6unEcBvA== +  dependencies: +    inherits "^2.0.3" +    multimath "^2.0.0" +    object-assign "^4.1.1" +    webworkify "^1.5.0" +  picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2:    version "2.2.2"    resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" @@ -12518,6 +12553,11 @@ websocket-extensions@>=0.1.1:    resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"    integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== +webworkify@^1.5.0: +  version "1.5.0" +  resolved "https://registry.yarnpkg.com/webworkify/-/webworkify-1.5.0.tgz#734ad87a774de6ebdd546e1d3e027da5b8f4a42c" +  integrity sha512-AMcUeyXAhbACL8S2hqqdqOLqvJ8ylmIbNwUIqQujRSouf4+eUFaXbG6F1Rbu+srlJMmxQWsiU7mOJi0nMBfM1g== +  whatwg-encoding@^1.0.5:    version "1.0.5"    resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"  |