1 | class MeshbluAuthParser
|
2 | parse: (request) =>
|
3 | authPair = @parseBasicAuth request
|
4 | authPair ?= @parseMeshbluAuthHeaders request
|
5 | authPair ?= @parseSkynetAuthHeaders request
|
6 | authPair ?= @parseExtraHeaders request
|
7 | authPair ?= {uuid: undefined, token: undefined}
|
8 | return authPair
|
9 |
|
10 | parseBasicAuth: (request) =>
|
11 | return unless request.header 'authorization'
|
12 | [scheme,encodedToken] = request.header('authorization').split(' ')
|
13 | [uuid,token] = new Buffer(encodedToken, 'base64').toString().split(':')
|
14 |
|
15 | return {
|
16 | uuid: uuid.trim?()
|
17 | token: token.trim?()
|
18 | }
|
19 |
|
20 | parseMeshbluAuthHeaders: (request) =>
|
21 | return @parseHeader request, 'meshblu_auth_uuid', 'meshblu_auth_token'
|
22 |
|
23 | parseSkynetAuthHeaders: (request) =>
|
24 | return @parseHeader request, 'skynet_auth_uuid', 'skynet_auth_token'
|
25 |
|
26 | parseExtraHeaders: (request) =>
|
27 | return @parseHeader request, 'X-Meshblu-UUID', 'X-Meshblu-Token'
|
28 |
|
29 | parseHeader: (request, uuidHeader, tokenHeader) =>
|
30 | return unless request.header(uuidHeader) and request.header(tokenHeader)
|
31 | uuid = request.header(uuidHeader).trim()
|
32 | token = request.header(tokenHeader).trim()
|
33 | return {uuid, token}
|
34 |
|
35 | module.exports = MeshbluAuthParser
|