-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathUser.js
97 lines (87 loc) · 2.55 KB
/
User.js
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/* @flow */
import copyWithoutFields from './copyWithoutFields';
import {decode} from './WireFormat';
import * as Ops from './Ops';
import Save from './Save';
import type App from './App';
import type { ParseObject } from './Types';
type SignUpOptions = {
username: string,
password: string,
email?: string,
};
type LogInOptions = {
username: string,
password: string,
};
type AuthResponse = {
sessionToken: string,
user: ParseObject,
};
export const CLASS_NAME = '_User';
export function signUp(app: App, options: SignUpOptions): Promise<AuthResponse> {
const user: ParseObject = {
username: options.username,
password: options.password,
};
if (options.email) {
user.email = options.email;
}
return Save(app, '_User', user).then((u) => {
if (!u.sessionToken) {
return Promise.reject('Did not receive an authenticated user from the server.');
}
const sanitized = copyWithoutFields(u, ['password', 'sessionToken']);
return Promise.resolve({
user: sanitized,
sessionToken: u.sessionToken,
});
});
}
export function logIn(app: App, options: LogInOptions): Promise<AuthResponse> {
return app.client.get('login', options, {}).then((res) => {
const result = res.response;
if (!result) {
return result;
}
const u: ParseObject = (decode(result): any);
const sanitized = copyWithoutFields(u, ['sessionToken']);
const serverData = {};
for (let k in sanitized) {
serverData[k] = sanitized[k];
}
Object.defineProperty(sanitized, '_serverData', {
enumerable: false,
writeable: false,
configurable: false,
value: serverData,
});
Object.defineProperty(sanitized, '_className', {
enumerable: false,
writeable: false,
configurable: false,
value: '_User',
});
const token = typeof u.sessionToken === 'string' ? u.sessionToken : '';
return Promise.resolve({
user: sanitized,
sessionToken: token,
});
});
}
// "become" doesn't make a lot of sense in this sort of library
export function forSession(app: App, token: string): Promise<ParseObject> {
return app.client.get('users/me', {}, {sessionToken: token}).then((res) => {
const result = res.response;
if (!result) {
return result;
}
const u: ParseObject = (decode(result): any);
return Promise.resolve(copyWithoutFields(u, ['sessionToken']));
});
}
export function logOut(app: App, token: string): Promise<void> {
return app.client.post('logout', {}, {sessionToken: token}).then(() => {
return Promise.resolve();
});
}