obf-connector
Version:
An API connector for Open Badge Factory
100 lines (79 loc) • 2.79 kB
JavaScript
const API = require('./API');
const Response = require('../Response');
class OBFConnector {
constructor(clientID, certFile, keyFile) {
this.clientID = clientID;
this.api = new API('https://openbadgefactory.com/v1/', certFile, keyFile);
}
getEarnableBadges(callback) {
this.api.getMany(`earnablebadge/${this.clientID}`, (err, earnableBadges) => {
callback(err, new Response('complete', earnableBadges));
});
}
getEarnableBadge(id, callback) {
this.api.getOne(`earnablebadge/${this.clientID}/${id}`, (err, earnableBadges) => {
callback(err, new Response('complete', earnableBadges));
});
}
getBadge(id, callback) {
this.api.getOne(`badge/${this.clientID}/${id}`, (err, badge) => {
callback(err, badge);
});
}
getEvents(callback) {
this.api.getMany(`event/${this.clientID}`, (err, events) => {
callback(err, new Response('complete', events));
});
}
addCreator(creator, callback) {
callback(
null,
new Response('incomplete', null, null, `https://openbadgefactory.com/c/user/invite?client_id=${this.clientID}`)
);
}
applyForBadge(user, earnablebadge_id, callback) {
this.getEarnableBadge(earnablebadge_id, (err, earnablebadge) => {
earnablebadge = earnablebadge.data;
callback(err, new Response('incomplete', null, 'Assuming badge is a earnablebadge', earnablebadge.apply_url));
});
}
createBadge(user, badge, callback) {
this.api.post(`badge/${this.clientID}`, badge, err => {
callback(err, new Response('complete'));
});
}
getBadgesList(user, filter, callback) {
this.getEarnableBadges(callback);
}
getCreatorsList(callback) {
callback(
null,
new Response('incomplete', null, null, `https://openbadgefactory.com/c/user/`)
);
}
modifyBadge(user, badge, callback) {
this.getBadge(badge.id, (err, badgeFromOBF) => {
if (err) throw err;
badge = Object.assign(badgeFromOBF, badge);
this.api.put(`badge/${this.clientID}/${badge.id}`, badge, err => {
callback(err, new Response('complete'));
});
});
}
modifyCreator(creator, callback) {
callback(
null,
new Response('incomplete', null, null, `https://openbadgefactory.com/c/user/${creator.id}/edit`)
);
}
pushBadge(user, badge, target) {
throw new ReferenceError('Connector#pushBadge is unimplemented');
}
reviewApplications(user, earnablebadge_id, callback) {
this.api.getMany(`earnablebadge/${this.clientID}/${earnablebadge_id}/application`, (err, applications) => {
applications = applications.filter(application => application.status == 'pending');
callback(err, new Response('complete', applications));
})
}
}
module.exports = OBFConnector;