aboutsummaryrefslogtreecommitdiff
path: root/src/services/new_api/oauth.js
blob: becee3d02c96e28e00b7858dc0e18f85caf1fc18 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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