mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-18 15:17:25 +01:00
84 lines
2.5 KiB
JavaScript
84 lines
2.5 KiB
JavaScript
var Firebase = require('firebase');
|
|
var nconf = require('nconf');
|
|
var isProd = nconf.get('NODE_ENV') === 'production';
|
|
var firebaseConfig = nconf.get('FIREBASE');
|
|
|
|
var firebaseRef;
|
|
var isFirebaseEnabled = (nconf.get('NODE_ENV') === 'production') && (firebaseConfig.ENABLED === 'true');
|
|
|
|
import { TAVERN_ID } from '../../models/group';
|
|
|
|
// Setup
|
|
if(isFirebaseEnabled){
|
|
firebaseRef = new Firebase('https://' + firebaseConfig.APP + '.firebaseio.com');
|
|
|
|
// TODO what happens if an op is sent before client is authenticated?
|
|
firebaseRef.authWithCustomToken(firebaseConfig.SECRET, function(err, authData){
|
|
// TODO it's ok to kill the server here? what if FB is offline?
|
|
if(err) throw new Error('Impossible to authenticate Firebase');
|
|
});
|
|
}
|
|
|
|
var api = module.exports = {};
|
|
|
|
api.updateGroupData = function(group){
|
|
if(!isFirebaseEnabled) return;
|
|
// TODO is throw ok? we don't have callbacks
|
|
if(!group) throw new Error('group is required.');
|
|
// Return in case of tavern (comparison working because we use string for _id)
|
|
if(group._id === TAVERN_ID) return;
|
|
|
|
firebaseRef.child('rooms/' + group._id)
|
|
.set({
|
|
name: group.name
|
|
});
|
|
};
|
|
|
|
api.addUserToGroup = function(groupId, userId){
|
|
if(!isFirebaseEnabled) return;
|
|
if(!userId || !groupId) throw new Error('groupId, userId are required.');
|
|
if(groupId === TAVERN_ID) return;
|
|
|
|
firebaseRef.child('members/' + groupId + '/' + userId)
|
|
.set(true);
|
|
|
|
firebaseRef.child('users/' + userId + '/rooms/' + groupId)
|
|
.set(true);
|
|
};
|
|
|
|
api.removeUserFromGroup = function(groupId, userId){
|
|
if(!isFirebaseEnabled) return;
|
|
if(!userId || !groupId) throw new Error('groupId, userId are required.');
|
|
if(groupId === TAVERN_ID) return;
|
|
|
|
firebaseRef.child('members/' + groupId + '/' + userId)
|
|
.remove();
|
|
|
|
firebaseRef.child('users/' + userId + '/rooms/' + groupId)
|
|
.remove();
|
|
};
|
|
|
|
api.deleteGroup = function(groupId){
|
|
if(!isFirebaseEnabled) return;
|
|
if(!groupId) throw new Error('groupId is required.');
|
|
if(groupId === TAVERN_ID) return;
|
|
|
|
firebaseRef.child('rooms/' + groupId)
|
|
.remove();
|
|
|
|
// TODO not really necessary as long as we only store room data,
|
|
// as empty objects are automatically deleted (/members/... in future...)
|
|
firebaseRef.child('members/' + groupId)
|
|
.remove();
|
|
};
|
|
|
|
// TODO not really necessary as long as we only store room data,
|
|
// as empty objects are automatically deleted
|
|
api.deleteUser = function(userId){
|
|
if(!isFirebaseEnabled) return;
|
|
if(!userId) throw new Error('userId is required.');
|
|
|
|
firebaseRef.child('users/' + userId)
|
|
.remove();
|
|
};
|