controllers/flickr.js
var Flickr = require('flickrapi');
var Photo = require('./photos');
var conf = require('../lib/config');
var base58 = require('../lib/base58');
var FlickrOptions = {
api_key: conf.get('FLICKR_KEY'),
secret: conf.get('FLICKR_SECRET'),
access_token: conf.get('FLICKR_OAUTH_KEY'),
access_token_secret: conf.get('FLICKR_OAUTH_SECRET'),
noAPI: true,
nobrowser: true
};
exports.flickrSearch = function (res, params) {
Flickr.authenticate(FlickrOptions, function (error, flickr) {
flickr.photos.search(params, function (err, result) {
if (err) {
res.json(500, err);
return;
}
res.json(result);
});
});
};
exports.updatePhoto = function(res, id, cb){
var msg = '';
Photo.getPhotoByFlickrId(res, id, function(err, photo){
if(err) {
msg = 'Error retrieving photo data from database';
if(!cb) res.status(500).json(msg);
else cb(msg);
return;
}
// console.log('db photo', photo);
if(photo == null){
msg = 'No photo in database associated with this flickr photo id. Nothing to update';
if(!cb) res.status(500).json(msg);
else cb(msg);
return;
}
Flickr.authenticate(FlickrOptions, function (error, flickr) {
var params = {
photo_id: id
}
flickr.photos.getInfo(params, function (err, fPhoto) {
if (err) {
msg = 'Error retrieving photo data from flickr. Photo may be deleted. Check http://flickr.com/p/' + base58.encode(parseInt(id));
if(!cb) res.status(500).json(msg);
else cb(msg);
return;
}
//console.log('flickr photo', fPhoto);
if(fPhoto.photo.title && fPhoto.photo.title._content)
photo.description = fPhoto.photo.title._content;
if(fPhoto.photo.dates && fPhoto.photo.dates.taken && !isNaN(Date.parse(fPhoto.photo.dates.taken)))
photo.dateTaken = new Date(fPhoto.photo.dates.taken);
if(fPhoto.photo.location && fPhoto.photo.location.latitude && fPhoto.photo.location.longitude){
photo.latitude = fPhoto.photo.location.latitude;
photo.longitude = fPhoto.photo.location.longitude;
}
photo.save(function(err){
if (err) {
msg = 'Error saving photo data from flickr';
if(!cb) res.status(500).json(msg);
else cb(msg);
return;
}
var msg = 'Photo updated';
if(cb) cb(null, msg)
else res.json(msg);
});
});
});
});
}
exports.undeleteIfExistOnFlickr = function (res, id, cb) {
var params = {
photo_id: id
}
console.log('undeleteIfExistOnFlickr');
Flickr.authenticate(FlickrOptions, function (error, flickr) {
flickr.photos.getInfo(params, function (err, result) {
if (err) {
// TODO: is there a better way to check this?
if(err.message && err.message.match(/not found/) && err.message.match(/invalid ID/))
{
console.log('photo doesn\'t exist. cannot undelete', err);
if(cb) cb('Photo doesn\'t exist on flickr');
else res.status(500).json('Photo doesn\'t exist on flickr');
}
else{
if(cb) cb('Error retrieving photo from Flickr. Can\'t Undelete');
else res.status(500).json('Error retrieving photo from Flickr. Can\'t Undelete');
}
return;
}
Photo.toggleDelete(res, {flickrId: id}, false, cb);
});
});
};
exports.deleteIfDoesntExistOnFlickr = function (res, id, cb) {
var params = {
photo_id: id
}
console.log('deleteIfDoesntExistOnFlickr');
Flickr.authenticate(FlickrOptions, function (error, flickr) {
flickr.photos.getInfo(params, function (err, result) {
if (err) {
// TODO: is there a better way to check this?
console.log(err);
if(err.message && err.message.match(/not found/) && err.message.match(/invalid ID/))
{
console.log('photo doesn\'t exist. marking as deleted', err);
Photo.toggleDelete(res, {flickrId: id}, true, cb);
}
else{
res.status(500).json('Error retrieving photo');
}
return;
}
var errMsg = 'Photo still exists on Flickr. Not marked as deleted';
if(cb) cb(errMsg, result);
else res.status(500).json(errMsg);
});
});
};
exports.getPhoto = function (res, id, cb) {
var params = {
photo_id: id
}
console.log('getphoto');
Flickr.authenticate(FlickrOptions, function (error, flickr) {
flickr.photos.getInfo(params, function (err, result) {
if (err) {
var msg = 'Error retrieving photo from Flickr. Photo may be deleted';
if(cb) cb(msg)
else res.status(500).json(msg);
return;
}
if(cb) cb(null, result);
else res.json(result);
});
});
};
exports.isFlickrAdmin = function(res, users){
var flickrPage = conf.get('FLICKR_USER_ID').trim();
var regex = new RegExp('^' + flickrPage + '$', 'gi');
if(typeof(users) === 'string'){
users = [users];
}
if(typeof(users) === 'object' && typeof(users.length) === 'undefined'){
users = [];
}
var authorized = false;
if(flickrPage !== ''){
users.forEach(function(user){
if(!authorized && regex.test(user.trim())){
authorized = true;
}
});
}
if(authorized){
res.json('Ok');
}
else{
res.status(401).json('Not authorized');
}
};