smscast/smscastwebapp.py

126 lines
3.3 KiB
Python

from flask import Flask, jsonify, render_template, request, json, redirect, url_for
#from libsmscast import LibSMSCast
from mocksmscast import LibSMSCast
from libaddrbook import LibAddrBook
from flask.ext.login import login_user, logout_user, current_user, login_required, LoginManager
import user
import dbmsgs
app = Flask(__name__)
app.secret_key = 'abcdgfkfdhgslkjh' # lol
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = "login"
@app.route('/send')
@login_required
def send():
client = LibSMSCast()
addr = LibAddrBook()
msg = request.args.get('msg')
tostr = request.args.get('to')
to = [int(x) for x in json.loads(tostr)]
print to
dbmsgs.logmsg(msg, to, current_user.uid)
dest = addr.get_nums_with_ids(to)
print dest
howmany = len(dest)
client.send(dest, msg)
return jsonify(result="sent {} to {} numbers(s)".format(msg, howmany))
@app.route('/_get_updates')
@login_required
def get_updates():
lastOut = request.args.get('lastOut')
if not lastOut: lastOut = 0
lastIn = request.args.get('lastIn')
if not lastIn: lastIn = 0
return jsonify(msgs=dbmsgs.getloggedmsgs(lastOut), inbound=dbmsgs.getinboundmsgs(lastIn))
@app.route('/_get_people_in_groups')
@login_required
def get_people_in_groups():
addr = LibAddrBook()
groupliststr = request.args.get('grouplist')
grouplist = [int(x) for x in json.loads(groupliststr)]
ppl = addr.get_people_in_groups(grouplist)
return jsonify(result=ppl)
@app.route('/_get_people')
@login_required
def get_people():
addr = LibAddrBook()
people = addr.get_everyone()
return jsonify(people=people)
@app.route('/_get_groups')
@login_required
def get_groups():
addr = LibAddrBook()
groups = addr.get_groups()
return jsonify(groups=groups)
@app.route('/addperson', methods=["GET","POST"])
@login_required
def add_person():
statustext = ""
if request.method == "POST":
addr = LibAddrBook()
name = request.form['name']
num = request.form['num']
state = addr.add_person(name, num)
if not state: # failure
statustext = "Failed to add person {}".format(name)
else: # success
statustext = "Successfully added person {}".format(name)
return render_template('addperson.html', statustext=statustext)
@app.route('/')
@login_required
def index():
return render_template('index.html')
@app.route("/_twilio_new_sms", methods=["POST"])
def twilio_new_sms():
if request.method == "POST":
dbmsgs.loginboundmsg(request.form)
return "(y)"
#print request.form;
return "(n)"
@app.route("/login", methods=["GET", "POST"])
def login():
if current_user.is_authenticated() and current_user.is_active():
return redirect(url_for('index'))
if request.method == "POST":
username = request.form['username']
password = request.form['password']
if(username and password):
# do login because username and password have been specified
uid = user.authenticate(username, password)
if uid != None:
login_user(user.get(uid), remember=True)
return redirect(url_for('index'))
return render_template('login.html')
@app.route("/logout")
def logout():
logout_user()
return redirect(url_for('login'))
@login_manager.user_loader
def load_user(userid):
return user.get(userid)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=42069, debug=True)
#app.run(host='10.9.8.1', port=42069, debug=True)