aboutsummaryrefslogtreecommitdiff
path: root/src/services/new_api/oauth.js
diff options
context:
space:
mode:
authorRoger Braun <roger@rogerbraun.net>2018-10-26 15:16:23 +0200
committerRoger Braun <roger@rogerbraun.net>2018-10-26 15:16:23 +0200
commit9af204b293a9c1b15e472423a4badff505fd662a (patch)
treeb348c94c5ae380ac042ef49861e33fe43f10acea /src/services/new_api/oauth.js
parent7f0e140a4fa34c7b1e686bc26049fc5ec6852058 (diff)
Move login to oauth.
Diffstat (limited to 'src/services/new_api/oauth.js')
-rw-r--r--src/services/new_api/oauth.js64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/services/new_api/oauth.js b/src/services/new_api/oauth.js
new file mode 100644
index 00000000..becee3d0
--- /dev/null
+++ b/src/services/new_api/oauth.js
@@ -0,0 +1,64 @@
+import {reduce} from 'lodash'
+
+const getOrCreateApp = ({oauth, instance}) => {
+ const url = `${instance}/api/v1/apps`
+ const form = new window.FormData()
+
+ form.append('client_name', `PleromaFE_${Math.random()}`)
+ form.append('redirect_uris', `${window.location.origin}/oauth-callback`)
+ form.append('scopes', 'read write follow')
+
+ return window.fetch(url, {
+ method: 'POST',
+ body: form
+ }).then((data) => data.json())
+}
+const login = (args) => {
+ getOrCreateApp(args).then((app) => {
+ args.commit('setClientData', app)
+
+ const data = {
+ response_type: 'code',
+ client_id: app.client_id,
+ redirect_uri: app.redirect_uri,
+ scope: 'read write follow'
+ }
+
+ const dataString = reduce(data, (acc, v, k) => {
+ const encoded = `${k}=${encodeURIComponent(v)}`
+ if (!acc) {
+ return encoded
+ } else {
+ return `${acc}&${encoded}`
+ }
+ }, false)
+
+ // Do the redirect...
+ const url = `${args.instance}/oauth/authorize?${dataString}`
+
+ window.location.href = url
+ })
+}
+
+const getToken = ({app, instance, code}) => {
+ const url = `${instance}/oauth/token`
+ const form = new window.FormData()
+
+ form.append('client_id', app.client_id)
+ form.append('client_secret', app.client_secret)
+ form.append('grant_type', 'authorization_code')
+ form.append('code', code)
+ form.append('redirect_uri', `${window.location.origin}/oauth-callback`)
+
+ return window.fetch(url, {
+ method: 'POST',
+ body: form
+ }).then((data) => data.json())
+}
+
+const oauth = {
+ login,
+ getToken
+}
+
+export default oauth