-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathapi.js
More file actions
83 lines (83 loc) · 2.05 KB
/
api.js
File metadata and controls
83 lines (83 loc) · 2.05 KB
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import http from './http';
import { Dingtalk, Wechat, userAgent, getRedirectUrl } from './env';
class AuthenticationProvider {
authenticate() {}
support() {}
}
class DingTalkAuthenticationProvider extends AuthenticationProvider {
constructor() {
super();
this.client = Dingtalk;
}
authenticate() {
this.client.jssdk.then(dd => {
dd.runtime.permission.requestAuthCode({
corpId: this.client.corpId,
onSuccess: function({ code }) {
const redirect = '/?code=' + code + '&userAgent=' + userAgent + '&state=' + getRedirectUrl();
api.redirect(redirect);
}
});
});
}
support() {
return this.client.support;
}
}
class WechatAuthenticationProvider extends AuthenticationProvider {
constructor() {
super();
this.client = Wechat;
}
authenticate() {
api.redirect(this.client.redirect);
}
support() {
return this.client.support;
}
}
;
const providers = [new WechatAuthenticationProvider(), new DingTalkAuthenticationProvider()];
const api = {
userinfo() {
const promise = new Promise((resolve, reject) => {
http
.get('userinfo')
.then(res => {
resolve(res.data);
})
.catch(({ response }) => {
if (response.status === 401 || response.status === 403) {
for (const provider of providers) {
if (provider.support()) {
provider.authenticate();
break;
}
}
}
});
});
if (process.env.NODE_ENV === 'development') {
return promise.then(res => ({
...res,
alias: res.name,
avatar: res.large_avatar,
name: res.uid,
'expires_in': new Date().getTime() + 86400 * 1000,
authorities: [{ authority: 'ROLE_ADMIN' }]
}));
} else {
return promise.then(res => ({
...res,
alias: res.details.name,
avatar: res.details.avatar,
name: res.uid
}));
}
},
logout() { /* keeping empty */ },
redirect(url) {
window.location.href = url;
}
};
export default api;