1 | import Base64 from 'base-64';
|
2 | import $ from 'jquery';
|
3 | import { settings } from '../contexts';
|
4 |
|
5 | export class Token {
|
6 |
|
7 | static getAccessToken() {
|
8 |
|
9 | var token = null;
|
10 | var jsonToken = localStorage.getItem('token');
|
11 | if (jsonToken) {
|
12 | token = JSON.parse(jsonToken).access_token;
|
13 | }
|
14 | return token;
|
15 | }
|
16 |
|
17 | static setAuthToken(jsonToken) {
|
18 | if (jsonToken !== undefined) {
|
19 | localStorage.setItem('token', jsonToken);
|
20 | var now = new Date();
|
21 | localStorage.setItem('creationDate', now);
|
22 | }
|
23 | }
|
24 |
|
25 | static removeToken() {
|
26 | localStorage.removeItem('token');
|
27 | localStorage.removeItem('creationDate');
|
28 | }
|
29 |
|
30 |
|
31 | static passwordCredentialGrant(username, password) {
|
32 | var authHeader = 'Basic ' + Base64.encode(settings.OAUTH2_CLIENT_ID + ':' + settings.OAUTH2_CLIENT_SECRET);
|
33 | return new Promise((resolve, reject) => {
|
34 | $.ajax({
|
35 | method: 'POST',
|
36 | url: settings.OAUTH2_BASE_ENDPOINT + 'token/',
|
37 | data: $.param({
|
38 | grant_type: 'password',
|
39 | username: username,
|
40 | password: password
|
41 | }),
|
42 | headers: {
|
43 | 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
|
44 | Authorization: authHeader
|
45 | }
|
46 | }).success((data) => {
|
47 | Token.setAuthToken(JSON.stringify(data));
|
48 | resolve(data.access_token);
|
49 |
|
50 | }).error((xhr) => {
|
51 | console.log(xhr);
|
52 | reject(xhr);
|
53 | });
|
54 | });
|
55 | }
|
56 |
|
57 | static refreshTokenCredentialGrant(refreshToken) {
|
58 | var authHeader = 'Basic ' + Base64.encode(settings.OAUTH2_CLIENT_ID + ':' + settings.OAUTH2_CLIENT_SECRET);
|
59 | return new Promise((resolve, reject) => {
|
60 | $.ajax({
|
61 | method: 'POST',
|
62 | url: settings.OAUTH2_BASE_ENDPOINT + 'token/',
|
63 | data: $.param({
|
64 | grant_type: 'refresh_token',
|
65 | refresh_token: refreshToken
|
66 | }),
|
67 | headers: {
|
68 | 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
|
69 | Authorization: authHeader
|
70 | }
|
71 | }).success((data) => {
|
72 | Token.setAuthToken(JSON.stringify(data));
|
73 | resolve(data.access_token);
|
74 |
|
75 | }).error((xhr) => {
|
76 | console.log(xhr);
|
77 | reject(xhr);
|
78 | });
|
79 | });
|
80 | }
|
81 |
|
82 | static validateToken() {
|
83 | return new Promise((resolve, reject) => {
|
84 | var creationDate = new Date(localStorage.getItem('creationDate'));
|
85 | var now = new Date();
|
86 | var jsonToken = localStorage.getItem('token');
|
87 | if (jsonToken) {
|
88 | var expiresIn = parseInt(JSON.parse(jsonToken).expires_in) * 1000;
|
89 | var refreshToken = JSON.parse(jsonToken).refresh_token;
|
90 | var cachedToken = JSON.parse(jsonToken).access_token;
|
91 | if (now - creationDate > expiresIn - 10000) {
|
92 | Token.refreshTokenCredentialGrant(refreshToken).then((token) => {
|
93 | resolve(token);
|
94 | }, (xhr) => {
|
95 | reject(xhr);
|
96 | });
|
97 | } else {
|
98 | resolve(cachedToken);
|
99 | }
|
100 | } else {
|
101 | reject();
|
102 | }
|
103 | });
|
104 | }
|
105 | }
|