summaryrefslogtreecommitdiff
path: root/src/server/api/authenticate.ts
blob: 7781b87c88249c9858b77af933894109e92e6ace (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
import App, { IApp } from '../../models/app';
import { default as User, IUser } from '../../models/user';
import AccessToken from '../../models/access-token';
import isNativeToken from './common/is-native-token';

export default async (token: string): Promise<[IUser, IApp]> => {
	if (token == null) {
		return [null, null];
	}

	if (isNativeToken(token)) {
		// Fetch user
		const user: IUser = await User
			.findOne({ token });

		if (user === null) {
			throw 'user not found';
		}

		return [user, null];
	} else {
		const accessToken = await AccessToken.findOne({
			hash: token.toLowerCase()
		});

		if (accessToken === null) {
			throw 'invalid signature';
		}

		const app = await App
			.findOne({ _id: accessToken.appId });

		const user = await User
			.findOne({ _id: accessToken.userId });

		return [user, app];
	}
};