def message_send(service): text = request.form.get('message') if not text: return Error.ARGUMENT_MISSING('message') subscribers = Subscription.query.filter_by(service=service).count() if subscribers == 0: # Pretend we did something even though we didn't # Nobody is listening so it doesn't really matter return Error.NONE level = (request.form.get('level') or '3')[0] level = int(level) if level in "12345" else 3 title = request.form.get('title', '').strip()[:255] link = request.form.get('link', '').strip() msg = Message(service, text, title, level, link) db.session.add(msg) db.session.commit() if google_api_key or current_app.config['TESTING']: Gcm.send_message(msg) if apns_cert_path or current_app.config['TESTING']: Apns.send_message(msg) if zeromq_relay_uri: queue_zmq_message(json_encode({"message": msg.as_dict()})) service.cleanup() db.session.commit() return Error.NONE
def message_send(service): text = request.form.get('message') if not text: return Error.ARGUMENT_MISSING('message') subscribers = Subscription.query.filter_by(service=service).count() if subscribers == 0: # Pretend we did something even though we didn't # Nobody is listening so it doesn't really matter return Error.NONE level = (request.form.get('level') or '3')[0] level = int(level) if level in "12345" else 3 title = request.form.get('title', '').strip()[:255] link = request.form.get('link', '').strip() msg = Message(service, text, title, level, link) db.session.add(msg) db.session.commit() if google_api_key or current_app.config['TESTING']: Gcm.send_message(msg) if zeromq_relay_uri: queue_zmq_message(json_encode({"message": msg.as_dict()})) service.cleanup() db.session.commit() return Error.NONE
def message_send(service): text = request.form.get('message') if not text: return jsonify(Error.ARGUMENT_MISSING('message')) level = (request.form.get('level') or '3')[0] level = int(level) if level in "12345" else 3 title = request.form.get('title', '').strip()[:255] link = request.form.get('link', '').strip() msg = Message(service, text, title, level, link) db.session.add(msg) db.session.commit() if google_api_key: Gcm.send_message(msg) if zeromq_relay_uri: queue_zmq_message(json_encode({"message": msg.as_dict()})) service.cleanup() db.session.commit() return jsonify(Error.NONE)
def SpecificChannelHandler(channel_id): if 'X-User' not in request.headers: return Response('Unauthorized Access', 401, mimetype='text/html') chann = db.session.query(Channel).get(channel_id) user = json.loads(request.headers['X-User']) user = find_user(user["id"]) if request.method == 'GET': # check if private channel and user apart of channel if chann.private==True and user not in chann.members: return Response('Access Forbidden', 403, mimetype='text/html') # check if before query parameter before = request.args.get('before') if before: # get 100 messages before this message id msgs = db.session.query(Message).filter((Message.chann_id==chann.id) & (Message.id < before)).limit(100).all() return Response(json.dumps([m.as_dict() for m in msgs]), 200, mimetype='application/json') else: # get 100 most recent messages msgs = db.session.query(Message).filter(Message.chann_id==chann.id).order_by(Message.id.desc()).limit(100) return Response(json.dumps([m.as_dict() for m in msgs]), 200, mimetype='application/json') if request.method == 'POST': if chann.private==True and user not in chann.members: return Response('Access Forbidden', 403, 'text/html') # create new message with json body and add to db # respond with 201, application/json and copy of new message as json msg = Message(body=request.json['body'], chann_id=chann.id) try: msg.creator = user db.session.add(msg) db.session.commit() # send event to msg queue event = {} event["type"] = "message-new" event["message"] = msg.as_dict() if chann.private == True: event["userIDs"] = [m.id for m in chann.members] mq_chan.basic_publish(exchange='', routing_key=config.rmQueue, body=json.dumps(event)) return Response(json.dumps(msg.as_dict()), 201, mimetype='application/json') except Exception as e: print(e, file=sys.stderr) db.session.rollback() return Response('Bad Request', 400, mimetype='text/html') if request.method == 'PATCH': # check user is creator of channel if user.id != chann.creator_id: return Response('Access Forbidden', 403, mimetype='text/html') name = request.json['name'] descr = request.json['description'] try: if name != None: chann.name = name if descr != None: chann.description = descr chann.edited_at = datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S") db.session.commit() # send event to msg queue event = {} event["type"] = "channel-update" event["channel"] = chann.as_dict() if chann.private == True: event["userIDs"] = [m.id for m in chann.members] mq_chan.basic_publish(exchange='', routing_key=config.rmQueue, body=json.dumps(event)) return Response(json.dumps(chann.as_dict()), 200, mimetype='application/json') except Exception as e: print(e, file=sys.stderr) db.session.rollback() return Response('Bad Request', 400, mimetype='text/html') if request.method == 'DELETE': # check user is creator if user.id != chann.creator_id: return Response('Access Forbidden', 403, mimetype='text/html') # delete channel from db and all messages related to channel # respond with text/html indicating delete success try: Message.query.filter_by(chann_id=chann.id).delete() Channel.query.filter_by(id=chann.id).delete() db.session.commit() # send event to msg queue event = {} event["type"] = "channel-delete" event["channelID"] = chann.id if chann.private == True: event["userIDs"] = [m.id for m in chann.members] mq_chan.basic_publish(exchange='', routing_key=config.rmQueue, body=json.dumps(event)) return Response('Channel Delete Successful', 200, mimetype='text/html') except Exception as e: print(e, file=sys.stderr) db.session.rollback() return Response('Internal Server Error', 500, mimetype='text/html')