def check_or_make_subscription(s, m, make=False): session = model.get_session(s) # Handle if session isn't found subscribed_message = model.get_message_subscription(s, m) if subscribed_message != None: return subscribed_message['id'] if make == False: return None # So let's subscribe! # Ask remote server for the subscribed message remote_message = remote_api(s, 'g', '/subscription/start', {'id': m}) our_user = find_or_make_remote_user(session, remote_message['user_id'], remote_message['user']) our_msg = model.new_message(remote_message['subject'], remote_message['message'], user=our_user, sub_node=session['node'], sub_msg=remote_message['id']) # Do the same for comments for comment in remote_message['comments']: our_user = find_or_make_remote_user(session, comment['user_id'], comment['user']) model.new_comment(our_msg, comment['subject'], comment['message'], user=our_user, sub_node=session['node'], sub_msg=comment['id']) return our_msg
def remote_api(server, post_or_get, api, parms): session = model.get_session(server) url = "http://%s:%s%s" % (session['ip'], session['port'], api) parms['session'] = session['their'] if post_or_get == 'p': r = requests.post(url, json=parms) else: r = requests.get(url, params=parms) return r.json()
def ui_message_show(): s = request.args.get('s', None) m = api.get_message(request.args.get('id', ''), server=s) heading = '' tracer1 = '' tracer2 = '' post_s = '' if s != None: server = model.get_session(s) subscribe = '[ <a href="/ui/messages/subscribe?id=%s&s=%s">subscribe</a> ]' % ( m['id'], s) heading = "<tr><td>Message on:</td><td>'%s' (session %s) %s</td></tr>" % ( server['nickname'], s, subscribe) tracer1 = '&s=%s' % s tracer2 = '?s=%s' % s post_s = '<input type="hidden" id="s" name="s" value="%s">' % s def enlist(comment): return '<li>%s (%s)<br/>%s</li>' % (comment['user'], comment['date'], comment['message']) form = """ <form action="/ui/messages/comment" method="post"> %s <input type="hidden" id="parent" name="parent" value="%s"> <input type="hidden" id="subject" name="subject" value=""> <textarea id="message" name="message" rows="3" cols="80"></textarea><br/> <input type="submit" value="Comment"> </form> """ % (post_s, m['id']) return """ [ <a href="/ui/messages%s">back</a> ] <table> %s <tr><td>Message ID:</td><td>%s</td></tr> <tr><td>Posted:</td><td>%s</td></tr> <tr><td>By:</td><td>%s</td></tr> <tr><td>Subject:</td><td>%s</td></tr> <tr><td colspan="2">%s</td></tr> </table> <br/> <ul> %s </ul> <br/> %s """ % (tracer2, heading, m['id'], m['date'], m['user'], m['subject'], m['message'], "<br/>".join(map(enlist, m['comments'])), form)
def get_session_user(content): user = 1 new_user = False if 'user' in content: user = content['user'] if 'session' in content: session = model.get_session(content['session']) # Handle error our_user = model.find_remote_user(session['node'], user) if our_user == None: new_user = True if user == 1: # a remote null user - we know their nickname our_user = model.add_remote_user(session['node'], user, session['nickname']) else: our_user = model.add_remote_user(session['node'], user, 'anon') model.rename_user(our_user, 'anon-%s' % our_user) user = our_user return (user, new_user)
def ui_messages(): s = request.args.get('s', None) m = api.message_list(server=s) heading = '' tracer = '' post_s = '' if s != None: server = model.get_session(s) heading = "Messages on '%s' (session %s):<br>" % (server['nickname'], s) tracer = '&s=%s' % s post_s = '<input type="hidden" id="s" name="s" value="%s">' % s def enlist(message): if message['comments'] > 0: count = " (%d)" % message['comments'] else: count = "" return '<li>%s (%s) - <a href="/ui/messages/m?id=%s%s">%s</a>%s</li>' % ( message['user'], message['date'], message['id'], tracer, message['subject'], count) form = """ <form action="/ui/messages/post" method="post"> %s <label for="subject">Subject:</label> <input type="text" id="subject" name="subject"><br/> <textarea id="message" name="message" rows="3" cols="80"></textarea><br/> <input type="submit" value="Post message"> </form> """ % post_s if len(m): return """ %s <ul> %s </ul> %s """ % (heading, "<br/>".join(map(enlist, m)), form) else: return "%s No messages on node<br/>%s" % (heading, form)
def api_subscribe(): message = model.get_message( request.args['id']) # Make sure this message exists remote = model.get_session(request.args['session']) model.make_subscription(remote['node'], message['id']) return jsonify(message)
def get_session(session_id): return model.get_session(session_id)