-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfirebase-storage.js
91 lines (79 loc) · 2.5 KB
/
firebase-storage.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
/*
Firebase storage for acrobot.
This is a generic storage mechanism, acrobot is only using it for storage of ignored acronyms at the moment.
*/
var Firebase = require('firebase');
module.exports = function(config) {
if (!config && !config.firebase_uri && !config.firebase_secretToken)
throw new Error('Need to provide firebase uri and secret token');
var isAuthComplete = false;
var isAuthorised = function() {
return isAuthComplete;
};
var rootRef = new Firebase(config.firebase_uri);
rootRef.authWithCustomToken(config.firebase_secretToken, function(error, authData){
if (error) {
console.log("Authentication Failed!", error);
} else {
isAuthComplete = true;
console.log("Authenticated successfully with payload:", authData);
}
});
var teamsRef = rootRef.child('teams');
var usersRef = rootRef.child('users');
var channelsRef = rootRef.child('channels');
var get = function(firebaseRef) {
return function(id, cb) {
firebaseRef.child(id).once('value',
function(records) {
cb(undefined, records.val());
},
function(err) {
cb(err, undefined);
}
);
};
};
var save = function(firebaseRef) {
return function(data, cb) {
var firebase_update = {};
firebase_update[data.id] = data;
firebaseRef.update(firebase_update, cb);
};
};
var all = function(firebaseRef) {
return function(cb) {
firebaseRef.once('value',
function(records) {
var list = [];
for (key of Object.keys(records.val())) {
list.push(records.val()[key]);
}
cb(undefined, list);
},
function(err) {
cb(err, undefined);
}
);
};
};
var storage = {
isAuthorised: isAuthorised,
teams: {
get: get(teamsRef),
save: save(teamsRef),
all: all(teamsRef)
},
channels: {
get: get(channelsRef),
save: save(channelsRef),
all: all(channelsRef)
},
users: {
get: get(usersRef),
save: save(usersRef),
all: all(usersRef)
}
};
return storage;
};