aboutsummaryrefslogtreecommitdiff
path: root/src/services/new_api
diff options
context:
space:
mode:
authorHenry Jameson <me@hjkos.com>2018-11-26 05:21:58 +0300
committerHenry Jameson <me@hjkos.com>2018-11-26 05:21:58 +0300
commita806d43f05ddded69a00156bc31fe33806426ecb (patch)
treeafa9a3f43043bbce92739fb48d048605e0c45c2b /src/services/new_api
parent08838774e41b9beba8f884da15ab1314eddf28f8 (diff)
parent91272dc5558e1326dac872f927dc8da7f9109cd0 (diff)
Merge remote-tracking branch 'upstream/develop' into feature/theming2
* upstream/develop: (60 commits) whoops whoops DM timeline: stream new statuses update-japanese-translation Add actual user search. incorporate most translation changes from MR 368 update french translation Always show dm panel. Add direct message tab. api service url remove deploy stage remove deploy stage updated and completed German translation On logout switch to public timeline. minor modification of Chinese translation update Chinese translation Add Chinese language Fix posting. Put oauth text into description. Display OAuth login on login form button. ...
Diffstat (limited to 'src/services/new_api')
-rw-r--r--src/services/new_api/oauth.js82
-rw-r--r--src/services/new_api/user_search.js16
-rw-r--r--src/services/new_api/utils.js36
3 files changed, 134 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..9e656507
--- /dev/null
+++ b/src/services/new_api/oauth.js
@@ -0,0 +1,82 @@
+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 getTokenWithCredentials = ({app, instance, username, password}) => {
+ 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', 'password')
+ form.append('username', username)
+ form.append('password', password)
+
+ return window.fetch(url, {
+ method: 'POST',
+ body: form
+ }).then((data) => data.json())
+}
+
+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,
+ getTokenWithCredentials,
+ getOrCreateApp
+}
+
+export default oauth
diff --git a/src/services/new_api/user_search.js b/src/services/new_api/user_search.js
new file mode 100644
index 00000000..ce7da88e
--- /dev/null
+++ b/src/services/new_api/user_search.js
@@ -0,0 +1,16 @@
+import utils from './utils.js'
+
+const search = ({query, store}) => {
+ return utils.request({
+ store,
+ url: '/api/pleroma/search_user',
+ params: {
+ query
+ }
+ }).then((data) => data.json())
+}
+const UserSearch = {
+ search
+}
+
+export default UserSearch
diff --git a/src/services/new_api/utils.js b/src/services/new_api/utils.js
new file mode 100644
index 00000000..078f392f
--- /dev/null
+++ b/src/services/new_api/utils.js
@@ -0,0 +1,36 @@
+const queryParams = (params) => {
+ return Object.keys(params)
+ .map(k => encodeURIComponent(k) + '=' + encodeURIComponent(params[k]))
+ .join('&')
+}
+
+const headers = (store) => {
+ const accessToken = store.state.oauth.token
+ if (accessToken) {
+ return {'Authorization': `Bearer ${accessToken}`}
+ } else {
+ return {}
+ }
+}
+
+const request = ({method = 'GET', url, params, store}) => {
+ const instance = store.state.instance.server
+ let fullUrl = `${instance}${url}`
+
+ if (method === 'GET' && params) {
+ fullUrl = fullUrl + `?${queryParams(params)}`
+ }
+
+ return window.fetch(fullUrl, {
+ method,
+ headers: headers(store),
+ credentials: 'same-origin'
+ })
+}
+
+const utils = {
+ queryParams,
+ request
+}
+
+export default utils