Skip to content

Commit 3d5e2ba

Browse files
load custom providers and protocols from deployment repository
1 parent bd316cf commit 3d5e2ba

File tree

4 files changed

+71
-21
lines changed

4 files changed

+71
-21
lines changed

boot/passport.js

+3-5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
var settings = require('./settings')
66
, providers = require('../providers')
7+
, protocols = require('../protocols')
78
, User = require('../models/User')
89
;
910

@@ -32,14 +33,11 @@ module.exports = function (passport) {
3233

3334
if (settings.providers) {
3435
Object.keys(settings.providers).forEach(function (name) {
35-
var providerConf = settings.providers[name]
36+
var providerConf = settings.providers[name]
3637
, provider = ( providers[name] ? providers[name] : providerConf )
37-
, protocol = provider.protocol
38-
, strategy = require('../protocols/' + protocol)
3938
;
4039

41-
provider.id = name;
42-
passport.use(strategy.initialize(provider, providerConf));
40+
passport.use(protocols.initialize(name, provider, providerConf));
4341
});
4442
}
4543

models/index.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ var fs = require('fs')
1111
* Read models directory
1212
*/
1313

14-
var files = fs.readdirSync(path.join('.', 'models'));
14+
var files = fs.readdirSync(__dirname);
1515

1616

1717
/**
@@ -21,7 +21,7 @@ var files = fs.readdirSync(path.join('.', 'models'));
2121
files.forEach(function (file) {
2222
if (path.extname(file) === '.js' && file !== 'index.js') {
2323
var model = path.basename(file, '.js');
24-
module.exports[model] = require(path.join('..', 'models', model));
24+
module.exports[model] = require(path.join(__dirname, '..', 'models', model));
2525
}
2626
});
2727

protocols/index.js

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/**
2+
* Module dependencies
3+
*/
4+
5+
var path = require('path');
6+
7+
8+
/**
9+
* Initialize
10+
*/
11+
12+
function initialize (name, provider, config) {
13+
var strategy
14+
, protocol = provider.protocol
15+
;
16+
17+
// try to load an officially supported provider
18+
try {
19+
strategy = require(path.join(__dirname, protocol));
20+
} catch (e) {}
21+
22+
// try to load a custom provider from the deployment repository
23+
try {
24+
strategy = require(path.join(cwd, 'providers', protocol));
25+
} catch (e) {
26+
if (!strategy) {
27+
throw new Error("Can't find custom protocol: " + protocol);
28+
}
29+
}
30+
31+
provider.id = name;
32+
return strategy.initialize(provider, config);
33+
}
34+
35+
36+
/**
37+
* Exports
38+
*/
39+
40+
module.exports = {
41+
initialize: initialize
42+
};

providers/index.js

+24-14
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,37 @@
33
*/
44

55
var fs = require('fs')
6+
, cwd = process.cwd()
67
, path = require('path')
78
, settings = require('../boot/settings')
9+
, defaultDirectory = __dirname
10+
, customDirectory = path.join(cwd, 'providers')
811
;
912

1013

1114
/**
12-
* Read providers directory
15+
* Load providers
1316
*/
17+
function loadProviders (dir, files) {
18+
files.forEach(function (file) {
19+
if (path.extname(file) === '.js' && file !== 'index.js') {
20+
var provider = path.basename(file, '.js');
1421

15-
var files = fs.readdirSync(path.join('.', 'providers'));
16-
22+
try {
23+
module.exports[provider] = require(
24+
path.join(dir, provider)
25+
)(settings);
26+
} catch (e) {
27+
throw new Error("Can't load " + provider + " provider.");
28+
}
29+
}
30+
});
31+
}
1732

18-
/**
19-
* Load providers
20-
*/
33+
try {
34+
loadProviders(defaultDirectory, fs.readdirSync(defaultDirectory));
35+
} catch (e) {}
2136

22-
files.forEach(function (file) {
23-
if (path.extname(file) === '.js' && file !== 'index.js') {
24-
var provider = path.basename(file, '.js');
25-
module.exports[provider] = require(
26-
path.join('..', 'providers', provider)
27-
)(settings);
28-
}
29-
});
37+
try {
38+
loadProviders(customDirectory, fs.readdirSync(customDirectory));
39+
} catch (e) {}

0 commit comments

Comments
 (0)