From f4f63d32e2bc2622ebdfe7599cc8aca987ddcee4 Mon Sep 17 00:00:00 2001
From: eal <eal@waifu.club>
Date: Mon, 4 Dec 2017 23:15:03 +0200
Subject: [PATCH] Fix basicauth base64 encoding for unicode passwords.

---
 src/services/api/api.service.js | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js
index fa95b870..5b078bc8 100644
--- a/src/services/api/api.service.js
+++ b/src/services/api/api.service.js
@@ -43,6 +43,16 @@ let fetch = (url, options) => {
   return oldfetch(fullUrl, options)
 }
 
+// from https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding
+let utoa = (str) => {
+  // first we use encodeURIComponent to get percent-encoded UTF-8,
+  // then we convert the percent encodings into raw bytes which
+  // can be fed into btoa.
+  return btoa(encodeURIComponent(str)
+              .replace(/%([0-9A-F]{2})/g,
+                       (match, p1) => { return String.fromCharCode('0x' + p1) }))
+}
+
 // Params
 // cropH
 // cropW
@@ -156,7 +166,7 @@ const register = (params) => {
 
 const authHeaders = (user) => {
   if (user && user.username && user.password) {
-    return { 'Authorization': `Basic ${btoa(`${user.username}:${user.password}`)}` }
+    return { 'Authorization': `Basic ${utoa(`${user.username}:${user.password}`)}` }
   } else {
     return { }
   }