UNPKG

1.77 kBJavaScriptView Raw
1var fs = require("fs")
2 , url = require("url")
3 , join = require("path").join
4 , EventEmitter = require("events").EventEmitter
5 , authom = module.exports = new EventEmitter
6
7authom.servers = {}
8authom.customServices = {}
9authom.route = /^\/auth\/([^\/]+)\/?$/
10
11authom.createServer = function(options, listener) {
12 var service = options.service
13 , name = options.name || service
14 , path = join(__dirname, "services", service)
15 , Service
16 , server
17
18 if (!(Service = authom.customServices[name])) {
19 try { Service = require(path) }
20 catch (err) { throw "No such service: " + path }
21 }
22
23 server = authom.servers[name] = new Service(options)
24
25 server.on("auth", function(req, res, user) {
26 user.service = name
27 authom.emit("auth", req, res, user)
28 })
29
30 server.on("error", function(req, res, error) {
31 error.service = name
32 authom.emit("error", req, res, error)
33 })
34
35 if (listener) server.on("request", listener)
36
37 return server
38}
39
40authom.registerService = function(serviceName, Service) {
41 authom.customServices[serviceName] = Service
42}
43
44authom.listener = function(req, res) {
45 var path = url.parse(req.url).pathname
46 , match = path.match(authom.route)
47 , service = match && authom.servers[match[1]]
48
49 if (service) {
50 service.emit("request", req, res)
51 return true
52 }
53}
54
55authom.listen = function(server) {
56 var listeners = server.listeners("request")
57
58 server.removeAllListeners("request")
59
60 server.on("request", function(req, res) {
61 if (authom.listener(req, res)) return
62
63 listeners.forEach(function(listener) {
64 listener.call(server, req, res)
65 })
66 })
67}
68
69authom.app = function(req, res) {
70 var name = req.params.service
71 , server = authom.servers[name]
72
73 server.emit("request", req, res)
74}
\No newline at end of file