diff --git a/src/instagram/index.js b/src/instagram/index.js deleted file mode 100644 index 1bf67819..00000000 --- a/src/instagram/index.js +++ /dev/null @@ -1,40 +0,0 @@ -var db = require("../core/db"); -var co = require("co"); -var instagram = require("./instagram"); -var config = require("../config"); - -export default function () { - return co(function*() { - yield loadUsers(); - - let tags = config.instagram['tags']; - console.log(tags); - - yield updateSubscription(['love']); - }); -}; - -function* loadUsers() { - let users = yield db.c('users').find({provider: 'instagram'}) - .toArray(); - - users.forEach(u => { - instagram.initUser(u); - }); - - return users; -} - -function* updateSubscription(tags) { - console.log(tags); - - //return tags.map(tag => { - // let callbackUrl = config.instagram['tag_callback']; - // - // return co(function *() { - // return yield instagram.api.subscribe(tag, callbackUrl); - // }); - //} - - return 1; -} diff --git a/src/instagram/instagram.js b/src/instagram/instagram.js deleted file mode 100644 index 6f24165e..00000000 --- a/src/instagram/instagram.js +++ /dev/null @@ -1,168 +0,0 @@ -var EventEmitter = require("events").EventEmitter; -var thunkify = require("thunkify"); -import config from "../config"; -var db = require("../core/db"); -var instagram = require("instagram-node"); - -function Instagram(options) { - this.client_id = options.client_id; - this.client_secret = options.client_secret; - this.redirect_uri = options.redirect_uri; - this.default_user = options.default_user; - this.clients = {}; - this.users = {}; - - EventEmitter.call(this); -} - -Instagram.prototype = Object.create(EventEmitter.prototype); - -Instagram.prototype.authorizationURL = function (scope, state) { - var params = {}; - params.scope = scope || ["basic"]; - if (state) { - params.state = state; - } - - var client = createClient(); - return client["get_authorization_url"](this.redirect_uri, params); -}; - -Instagram.prototype.addClient = function *(code, params) { - var token = params.access_token; - var item = params.user; - item.code = code; - item.access_token = token; - item.provider = "instagram"; - yield db.c("users").update({provider: "instagram", id: params.user.id}, item, {upsert: true}); - - return this.initUser(item); -}; - -Instagram.prototype.initUser = function (user) { - var token = user.access_token; - this.clients[user.code] = createClient(token); - this.users[user.code] = user; - return this; -}; - -Instagram.prototype.getUsers = function () { - var users = this.users; - return Object.keys(users) - .map(function (code) { - return users[code]; - }); -}; - -Instagram.prototype.update = function (body) { - this.emit('update', body); -}; - -Instagram.prototype.client = function (code) { - if (code && code in this.clients) { - return this.clients[code]; - } else { - return createClient(); - } -}; - -Instagram.prototype.user = function (code) { - if (code && code in this.users) { - return this.users[code]; - } else { - return null; - } -}; - -Instagram.prototype.authorize = function *(code) { - var api = createClient(); - var authorize = thunkify(api["authorize_user"]); - var result = yield authorize(code, this.redirect_uri); - - if (result) { - yield this.addClient(code, result); - } - - return result; -}; - -Instagram.prototype.getUser = function *() { - if (this.default_user) { - var du = yield db.c("users").findOne({username: this.default_user}); - if (du) { - return du; - } - } - - return yield db.c("users").findOne({provider: "instagram"}); -}; - -Instagram.prototype.getUsers = function *() { - return yield db.c("users").find({provider: "instagram"}).toArray(); -}; - -Instagram.prototype.api = { - subscriptions: function *() { - var ig = createClient(); - var subs = thunkify(ig["subscriptions"]); - try { - var s = yield subs(); - return s[0]; - } catch (error) { - return null; - } - }, - - subscribe: function *(tag, callbackURL) { - var ig = createClient(); - var sub = thunkify(ig["add_tag_subscription"]); - try { - var s = yield sub(tag, callbackURL); - return s[0]; - } catch (error) { - return null; - } - }, - - unsubscribe: function *(id) { - var ig = createClient(); - var sub = thunkify(ig["del_subscription"]); - try { - var s = yield sub({id: id}); - return s[0]; - } catch (error) { - return null; - } - }, - - tagMediaRecent: function *(client, tag, count) { - var tag_media_recent = thunkify(client["tag_media_recent"]); - - try{ - var result = yield tag_media_recent(tag, {count: count}); - return { - medias: result[0], - pagination: result[1], - remaining: result[2], - limit: result[3] - } - }catch(error){ - return null; - } - } -}; - -module.exports = new Instagram(config.instagram); - -function createClient(token) { - var client = instagram.instagram({}, {}); - if (token) { - client.use({access_token: token}); - } else { - client.use({ - client_id: config.instagram.client_id, - client_secret: config.instagram.client_secret - }); - } - return client; -} \ No newline at end of file diff --git a/src/instagram/io.js b/src/instagram/io.js deleted file mode 100644 index 668b6f35..00000000 --- a/src/instagram/io.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Created by tmshv on 14/03/15. - */ - -var publisher = require("./publish"); - -module.exports = function (app) { - app.io.use(function *(next) { - publisher.on("post", function (post) { - console.log("IO POST", post); - app.io.emit("post", post); - }); - - yield* next; - }); -}; \ No newline at end of file diff --git a/src/instagram/publish.js b/src/instagram/publish.js deleted file mode 100644 index c9a5f0cb..00000000 --- a/src/instagram/publish.js +++ /dev/null @@ -1,97 +0,0 @@ -/** - * Created by tmshv on 10/03/15. - */ - -var co = require("co"); -var util = require("util"); -var EventEmitter = require("events").EventEmitter; -var instagram = require("./instagram"); -var config = require("../config"); -var db = require("../core/db"); - -function Publisher() { - EventEmitter.call(this); - - var self = this; - instagram.on("update", function (data) { - var tag = config.instagram["tags"][0]; - - findInstagrams(tag) - .catch(function (error) { - console.log(error); - }) - .then(function (posts) { - var ids = posts.map(function (gram) { - return gram.data.id; - }); - - return uploadInstagrams(posts) - .then(function () { - return db.c("timeline").find({"data.id": {$in: ids}}).toArray(); - }); - }) - .then(function (posts) { - self.emit("post", posts); - }); - }); -} - -util.inherits(Publisher, EventEmitter); - -module.exports = new Publisher(); - -function *fbt(client, tag) { - var param = yield instagram.api.tagMediaRecent(client, tag, 10); - return param.medias.map(toInstagram); -} - -function toInstagram(gram) { - var post = {}; - - try { - post.body = gram.caption.text; - } catch (error) { - post.body = ""; - } - - post.type = "instagram"; - post.tags = gram.tags; - post.date = new Date(parseInt(gram["created_time"]) * 1000); - - post.data = { - id: gram.id, - author: gram.user["username"], - image: gram.images, - url: gram.link - }; - - return post; -} - -function findInstagrams(tag){ - return co(function *() { - var user = yield instagram.getUser(); - if (user) { - var client = instagram.client(user.code); - var permitted_users = yield instagram.getUsers(); - permitted_users = permitted_users.map(function (user) { - return user["username"]; - }); - - var medias = yield fbt(client, tag); - //medias = medias.filter(function (gram) { - // return permitted_users.indexOf(gram.data.author) > -1; - //}); - - return medias; - } - }); -} - -function uploadInstagrams(list){ - return Promise.all( - list.map(function (g) { - return db.c("timeline").update({"data.id": g.data.id}, g, {upsert: true}); - }) - ); -} \ No newline at end of file diff --git a/src/instagram/router.js b/src/instagram/router.js deleted file mode 100644 index d6324007..00000000 --- a/src/instagram/router.js +++ /dev/null @@ -1,164 +0,0 @@ -var path = require("path"); -var route = require("koa-route"); -var router = require("../routes"); -var instagram = require("../instagram/instagram"); - -function expire(time) { - return time || new Date(Date.now() + 1000 * 60 * 60 * 24 * 7); -} - -export default function (app) { - app.use(function *(next) { - let code = this.cookies.get('instagram_code'); - if (code) { - let client = instagram.client(code); - let user = instagram.user(code); - if (client && user) { - this.instagram = { - client: client, - user: user - } - } - } - - yield* next; - }); - - app.use( - route.get('/instagram', function *() { - let invite = this.cookies.get('invite_code') || this.query.code; - - if(!this.instagram) { - if(invite == undefined){ - this.body = 'invite required'; - this.status = 401; - }else if(invite == 'LOL'){ - this.cookies.set('invite_code', invite, {expires: expire()}); - - //todo: invalidate invite - - yield router.index( - path.join(__dirname, '../templates/instagram.html') - ); - }else{ - this.body = 'invite ist correct'; - this.status = 401; - } - }else{ - yield router.index( - path.join(__dirname, '../templates/instagram.html') - ); - } - }) - ); - - app.use( - route.get("/instagram/auth", function *() { - let invite = this.cookies.get('invite_code'); - if(invite) { - let url = instagram.authorizationURL(null, '/instagram'); - this.redirect(url); - }else{ - this.status = 401; - this.body = 'invite required'; - } - }) - ); - - app.use( - route.get('/instagram/user', function *() { - let code = this.cookies.get('instagram_code'); - let user = instagram.user(code); - - if(user) { - this.body = user; - }else{ - this.status = 404; - } - }) - ); - - app.use( - route.get('/instagram/auth/callback', function *() { - let state = this.query.state || '/'; - let code = this.query.code; - - let client; - try { - client = yield instagram.authorize(code); - } catch (e) { - client = null; - } - - if (client) { - this.cookies.set('instagram_code', code, {expires: expire()}); - this.redirect(state); - } else { - this.status = 401; - this.redirect(state); - } - }) - ); - - app.use(route.get('/instagram/subscription/list', function *() { - let result = yield instagram.api.subscriptions(); - if(result) { - this.body = result; - }else{ - this.status = 500; - } - })); - - app.use(route.get('/instagram/subscription/add', function *() { - let tag = this.query.tag; - let cu = this.query.url; - - var result = yield instagram.api.subscribe(tag, cu); - if(result) { - this.body = result; - }else{ - this.status = 500; - } - })); - - app.use(route.get('/instagram/subscription/delete', function *() { - let id = this.query.id; - - var result = yield instagram.api.unsubscribe(id); - if(result) { - this.body = result; - }else{ - this.status = 500; - } - })); - - app.use(route.get('/instagram/callback/:rnd', function *() { - if(this.query['hub.mode'] == 'subscribe'){ - this.body = this.query['hub.challenge']; - }else{ - this.status = 400; - } - })); - - app.use(route.post('/instagram/callback/:rnd', function *(rnd) { - let sign = this.header['x-hub-signature']; - //console.log(this.headers); - - let body = this.request.body; - - //var hmac = crypto.createHmac("sha1", instagram.client_secret); - //hmac.update(body); - //var shasum = hmac.digest("hex"); - - - //console.log("X-Hub-Signature", sign); - //console.log("Hmac", shasum); - //console.log(); - - //if(shasum.digest("hex") == sign) { - instagram.update(body); - //} - - this.body = ''; - })); -};