Skip to content
This repository
Browse code

[general] refactorizo el codigo para ajustarlo a una libreria

  • Loading branch information...
commit 8a3d354a6a911fb9ea514c8d960e692367492bb7 1 parent 10ea47c
authored June 11, 2011
43  facebook/base.js
... ...
@@ -0,0 +1,43 @@
  1
+/**
  2
+ * @description Functions base for communicate with fb
  3
+ * @author Daniel Aristizabal Romero
  4
+ * @date Junio 2011
  5
+ */
  6
+
  7
+var crypto = require('crypto');
  8
+
  9
+exports = module.exports = Facebook;
  10
+
  11
+function Facebook(ops){
  12
+  this.APP_ID = ops.appId;
  13
+  this.APP_SECRET = ops.secret;
  14
+  this.APP_KEY = ops.key;
  15
+};
  16
+
  17
+Facebook.prototype.request = function(signed_req){
  18
+  var request = signed_req.split('.');
  19
+  var sign = request[0].replace(/_/g, '/').replace(/-/g, '+');
  20
+  var fbObj = JSON.parse(this.base64_decode(request[1]));
  21
+  if (fbObj.algorithm != 'HMAC-SHA256'){
  22
+    console.error('Recibido un mensaje en diferente cifrado');
  23
+    throw new Error('Error de comunicacion con Facebook');
  24
+  }
  25
+  if (this.verify_sign(sign,request[1])){
  26
+    // Podemos confiar en el mensaje y tratar sus datos
  27
+    return fbObj;
  28
+  } else {
  29
+    console.error('La firma del mensaje no es valida');
  30
+    throw new Error('Error al validar el mensaje con Facebook');
  31
+    return false;
  32
+  }
  33
+};
  34
+
  35
+Facebook.prototype.base64_decode = function(hash){
  36
+  var clean = hash.replace(/_/, '/').replace(/-/, '+');
  37
+  return new Buffer(clean, 'base64').toString();
  38
+};
  39
+
  40
+Facebook.prototype.verify_sign = function(sign,msg){
  41
+  var real = crypto.createHmac('sha256', this.APP_SECRET).update(msg).digest('base64');
  42
+  return (real == sign+'=');
  43
+};
6  facebook/index.js
... ...
@@ -0,0 +1,6 @@
  1
+/**
  2
+ * @author Daniel Aristizabal Romero
  3
+ * @date Junio 2011
  4
+ */
  5
+
  6
+module.exports = require('./base');
59  server.js
@@ -6,10 +6,15 @@
6 6
 var express = require('express');
7 7
 var mongoose = require('mongoose');
8 8
 var jsonreq = require('jsonreq');
9  
-var crypto = require('crypto');
  9
+var Facebook = require('./facebook');
10 10
 
11 11
 var app = module.exports = express.createServer();
12 12
 
  13
+var fb = new Facebook({appId:'124829930933291', 
  14
+  key:'c2f33b41ee0f6d7dc3b65ba70b92ef6e', 
  15
+  secret:'9e39d0ddc888b9e08c418debf14cf3b4'
  16
+});
  17
+
13 18
 // Configuration
14 19
 
15 20
 app.configure(function(){
@@ -17,6 +22,8 @@ app.configure(function(){
17 22
   app.set('view engine', 'jade');
18 23
   app.use(express.bodyParser());
19 24
   app.use(express.methodOverride());
  25
+  app.use(express.cookieParser());
  26
+  app.use(express.session({secret:'bitcoinpriceonfacebook'}));
20 27
   app.use(app.router);
21 28
   app.use(express.static(__dirname + '/public'));
22 29
 });
@@ -33,27 +40,20 @@ app.configure('production', function(){
33 40
 
34 41
 app.db = mongoose.connect(app.set('db-uri'));
35 42
 
36  
-var base64_decode = function(cifrado){
37  
-  var limpio = cifrado.replace(/_/, '/').replace(/-/, '+');
38  
-  return new Buffer(limpio, 'base64').toString();
39  
-};
40  
-
41  
-var checkFirma = function(sinverificar, msg){
42  
-    var supuesta = sinverificar+'=';
43  
-    var firma = crypto.createHmac('sha256', '9e39d0ddc888b9e08c418debf14cf3b4').update(msg).digest('base64');
44  
-    if (firma == supuesta){
45  
-      return true;
46  
-    } else {
47  
-      console.log('Supuesta '+supuesta);
48  
-      console.log('Firma '+firma);
49  
-      return false;
50  
-    }
51  
-
52  
-};
  43
+var checkUser = function(req, res, next){
  44
+  if (req.session.fbInfo){
  45
+    req.session.recargas++;
  46
+  } else {
  47
+    console.log('Nuevo Visitante');
  48
+    req.session.recargas = 1;
  49
+  }
  50
+  next();
  51
+    
  52
+}
53 53
 
54 54
 // Routes
55 55
 
56  
-app.get('/', function(req, res){
  56
+app.get('/', checkUser, function(req, res){
57 57
   jsonreq.get('http://bitcoincharts.com/t/weighted_prices.json', function(err, data) {
58 58
     res.render('index', {
59 59
       title:'Precio del Bitcoin en Facebook',
@@ -69,23 +69,12 @@ app.get('/', function(req, res){
69 69
 app.post('/', function(req, res){
70 70
   if (req.body.signed_request){
71 71
     // Es una peticion desde facebook
72  
-    var peticion = req.body.signed_request.split('.');
73  
-    var firma = peticion[0].replace(/_/g, '/').replace(/-/g, '+');
74  
-    var fbObj = JSON.parse(base64_decode(peticion[1]));
75  
-    if (fbObj.algorithm != 'HMAC-SHA256'){
76  
-      console.error('Recibido un mensaje en diferente cifrado');
77  
-      throw new Error('Error de comunicacion con Facebook');
78  
-    }
79  
-    if (checkFirma(firma,peticion[1])){
80  
-      // Podemos confiar en el mensaje y tratar sus datos
81  
-      console.log(fbObj);
82  
-      // Cuando el usuario autoriza la app pasa por aca
83  
-      // y existe fbObj.user_id Este ID hay que guardarlo en nuestra DB
84  
-      // adicionalmente viene un token oauth2 en fbObj.oauth_token
  72
+    var mensaje = fb.request(req.body.signed_request);
  73
+    console.log(mensaje);
  74
+    if (mensaje.user_id){
  75
+      req.session.fbInfo = mensaje;
  76
+      console.log('El usuario '+mensaje.user_id+' ha autorizado la app');
85 77
       res.redirect('/');
86  
-    } else {
87  
-      console.error('La firma del mensaje no es valida');
88  
-      throw new Error('Error al validar el mensaje con Facebook');
89 78
     }
90 79
   }
91 80
 });

0 notes on commit 8a3d354

Please sign in to comment.
Something went wrong with that request. Please try again.