+import tornado.httpclient as httpclient
+import salmoning
+import sqlite3
+import arrow
+import datetime
+from rd import RD, Link
+import hmac
+from tornado.options import options, define
+import logging
+db = None
+# insert into user (name,email) values('mikael','mikael@frykholm.com');
+# insert into entry (userid,text) values (1,'My thoughts on ostatus');
+
+
+settings = {
+ "static_path": os.path.join(os.path.dirname(__file__), "static"),
+ "cookie_secret": "supersecret123",
+ "login_url": "/login",
+ "xsrf_cookies": False,
+ "domain":"https://ronin.frykholm.com",
+
+}
+
+#curl -v -k "https://ronin.frykholm.com/hub" -d "hub.callback=a" -d "hub.mode=b" -d "hub.topic=c" -d "hub.verify=d"
+
+class PushHandler(tornado.web.RequestHandler):
+ def post(self):
+ """ Someone wants to subscribe to hub_topic feed"""
+ hub_callback = self.get_argument('hub.callback')
+ hub_mode = self.get_argument('hub.mode')
+ hub_topic = self.get_argument('hub.topic')
+ hub_verify = self.get_argument('hub.verify')
+ hub_lease_seconds = self.get_argument('hub.lease_seconds','')
+ hub_secret = self.get_argument('hub.secret','')
+ hub_verify_token = self.get_argument('hub.verify_token','')
+ print(self.request.body)
+ if hub_mode == 'unsubscribe':
+ pass #FIXME
+ path = hub_topic.split(self.settings['domain'])[1]
+ user = path.split('user/')[1]
+ row = db.execute("select id from author where name=?",(user,)).fetchone()
+ expire = datetime.datetime.utcnow() + datetime.timedelta(seconds=int(hub_lease_seconds))
+ if row:
+ db.execute("INSERT into subscriptions (author, expires, callback, secret, verified) "
+ "values (?,?,?,?,?)",(row['id'],expire,hub_callback,hub_secret,False))
+ db.commit()
+ self.set_status(202)
+ http_client = httpclient.HTTPClient()
+ try:
+ response = http_client.fetch(hub_callback+"?hub.mode={}&hub.topic={}&hub.secret".format(hub_mode,hub_topic,hub_secret))
+ print(response.body)
+ except httpclient.HTTPError as e:
+ # HTTPError is raised for non-200 responses; the response
+ # can be found in e.response.
+ print("Error: " + str(e))
+ except Exception as e:
+ # Other errors are possible, such as IOError.
+ print("Error: " + str(e))
+ http_client.close()
+ #TODO add secret to outgoing feeds with hmac
+