def json_feed(guid): """ Look up the User identified by GUID and return the User's public feed as Diaspora-style JSON. """ contact = DiasporaContact.get_by_guid(guid) if not(contact and contact.contact.user): abort(404, 'No such contact', force_status=True) feed_query = Post.Queries.public_wall_for_contact(contact.contact) feed = db.session.query(Post).join(Share).filter(feed_query). \ order_by(desc(Post.thread_modified_at)). \ group_by(Post.id).limit(99) ret = [] for post in feed: text = DiasporaPost.get_for_post(post, commit=False).as_text() rep = { "author": { "diaspora_id": contact.username, "name": contact.contact.realname, "guid": contact.guid, }, "created_at": post.created_at.isoformat(), "text": text, "public": True, "post_type": "StatusMessage", "guid": post.diasp.guid, "interacted_at": post.root().thread_modified_at.isoformat(), "provider_display_name": None, } ret.append(rep) return jsonify(response)
def json_feed(guid): """ Look up the User identified by GUID and return the User's public feed as Diaspora-style JSON. """ contact = DiasporaContact.get_by_guid(guid) if not (contact and contact.contact.user): abort(404, 'No such contact', force_status=True) feed_query = Post.Queries.public_wall_for_contact(contact.contact) feed = db.session.query(Post).join(Share).filter(feed_query). \ order_by(desc(Post.thread_modified_at)). \ group_by(Post.id).limit(99) ret = [] for post in feed: text = DiasporaPost.get_for_post(post, commit=False).as_text() rep = { "author": { "diaspora_id": contact.username, "name": contact.contact.realname, "guid": contact.guid, }, "created_at": post.created_at.isoformat(), "text": text, "public": True, "post_type": "StatusMessage", "guid": post.diasp.guid, "interacted_at": post.root().thread_modified_at.isoformat(), "provider_display_name": None, } ret.append(rep) return jsonify(response)
def receive(guid): """ Receive a Salmon Slap and save it for when the user logs in. """ diasp = DiasporaContact.get_by_guid(guid) if diasp is None or not diasp.contact.user: abort(404, 'No such contact') queue_item = MessageQueue() queue_item.local_user = diasp.contact.user queue_item.remote = None queue_item.format = MessageQueue.INCOMING queue_item.body = request.form['xml'].encode('ascii') db.session.add(queue_item) db.session.commit() diasp.contact.user.notify_event() return 'OK'
def hcard(guid): """ Returns the hCard for the User with GUID <guid>. I would have preferred to use the primary key, but the protocol insists on fetch-by-GUID. """ diasp = DiasporaContact.get_by_guid(guid) if diasp is None or not diasp.contact.user: abort(404, 'No such contact') c = diasp.contact ns = 'http://www.w3.org/1999/xhtml' doc = etree.Element("{%s}div" % ns, nsmap={None: ns}, id="content") etree.SubElement(doc, "h1").text = c.realname content_inner = etree.SubElement( doc, 'div', **{'class': "content_inner"} ) author = etree.SubElement( content_inner, 'div', id="i", **{'class': "entity_profile vcard author"} ) etree.SubElement(author, "h2").text = "User profile" dl = etree.SubElement(author, 'dl', **{'class': "entity_nickname"}) etree.SubElement(dl, 'dt').text = 'Nickname' dd = etree.SubElement(dl, 'dd') etree.SubElement( dd, 'a', rel='me', href=url_for('index'), **{'class': "nickname url uid"} ).text = c.realname dl = etree.SubElement(author, 'dl', **{'class': "entity_fn"}) etree.SubElement(dl, 'dt').text = 'Full name' dd = etree.SubElement(dl, 'dd').text = c.realname dl = etree.SubElement(author, 'dl', **{'class': "entity_url"}) etree.SubElement(dl, 'dt').text = 'URL' dd = etree.SubElement(dl, 'dd') etree.SubElement( dd, 'a', id='pod_location', rel='me', href=url_for('index', _external=True), **{'class': "url"} ).text = url_for('index', _external=True) # FIXME - need to resize photos photos = { "entity_photo": "300px", "entity_photo_medium": "100px", "entity_photo_small": "50px" } for k, v in photos.items(): src = diasp.photo_url() dl = etree.SubElement(author, "dl", **{'class': k}) etree.SubElement(dl, "dt").text = "Photo" dd = etree.SubElement(dl, "dd") etree.SubElement( dd, 'img', height=v, width=v, src=src, **{'class': "photo avatar"} ) dl = etree.SubElement(author, 'dl', **{'class': "entity_searchable"}) etree.SubElement(dl, 'dt').text = 'Searchable' dd = etree.SubElement(dl, 'dd') etree.SubElement(dd, 'a', **{'class': "searchable"}).text = 'true' return send_xml(doc, content_type='text/html')
def hcard(guid): """ Returns the hCard for the User with GUID <guid>. I would have preferred to use the primary key, but the protocol insists on fetch-by-GUID. """ diasp = DiasporaContact.get_by_guid(guid) if diasp is None or not diasp.contact.user: abort(404, 'No such contact') c = diasp.contact ns = 'http://www.w3.org/1999/xhtml' doc = etree.Element("{%s}div" % ns, nsmap={None: ns}, id="content") etree.SubElement(doc, "h1").text = c.realname content_inner = etree.SubElement(doc, 'div', **{'class': "content_inner"}) author = etree.SubElement(content_inner, 'div', id="i", **{'class': "entity_profile vcard author"}) etree.SubElement(author, "h2").text = "User profile" dl = etree.SubElement(author, 'dl', **{'class': "entity_nickname"}) etree.SubElement(dl, 'dt').text = 'Nickname' dd = etree.SubElement(dl, 'dd') etree.SubElement(dd, 'a', rel='me', href=url_for('index'), **{ 'class': "nickname url uid" }).text = c.realname dl = etree.SubElement(author, 'dl', **{'class': "entity_fn"}) etree.SubElement(dl, 'dt').text = 'Full name' dd = etree.SubElement(dl, 'dd').text = c.realname dl = etree.SubElement(author, 'dl', **{'class': "entity_url"}) etree.SubElement(dl, 'dt').text = 'URL' dd = etree.SubElement(dl, 'dd') etree.SubElement(dd, 'a', id='pod_location', rel='me', href=url_for('index', _external=True), **{ 'class': "url" }).text = url_for('index', _external=True) # FIXME - need to resize photos photos = { "entity_photo": "300px", "entity_photo_medium": "100px", "entity_photo_small": "50px" } for k, v in photos.items(): src = diasp.photo_url() dl = etree.SubElement(author, "dl", **{'class': k}) etree.SubElement(dl, "dt").text = "Photo" dd = etree.SubElement(dl, "dd") etree.SubElement(dd, 'img', height=v, width=v, src=src, **{'class': "photo avatar"}) dl = etree.SubElement(author, 'dl', **{'class': "entity_searchable"}) etree.SubElement(dl, 'dt').text = 'Searchable' dd = etree.SubElement(dl, 'dd') etree.SubElement(dd, 'a', **{'class': "searchable"}).text = 'true' return send_xml(doc, content_type='text/html')