def recGPS(): gps = request.form['latitude'] + ',' + request.form['longitude'] # Check if webbrowser device is recorded, if not add it try: sql = "INSERT INTO device SET uid = (SELECT uid FROM user WHERE login = '******'login'] + "'), " sql += " name = '" + request.user_agent.browser + "', status = 'ok', description = '" + request.user_agent.string + "' " sql += "ON DUPLICATE KEY UPDATE status = 'ok';" exeReq(sql) wEvent('/html/v1.0/tracker/recGPS', 'exeReq', 'Add or update web device', 'OK') except Exception as e: wEvent('/html/v1.0/tracker/recGPS', 'exeReq', 'Add or update web device', 'KO') return 'Add or update web device error' # Add new localisation try: sql = "INSERT INTO tracking SET " sql += " uid = (SELECT uid FROM user WHERE login = '******'login'] + "'), " sql += " did = (SELECT did FROM device WHERE name = '" + request.user_agent.browser + "'), " sql += " gps = '" + str(gps) + "';" exeReq(sql) wEvent('/html/v1.0/tracker/recGPS', 'exeReq', 'GPS record', 'OK') return 'GPS record OK' except Exception as e: wEvent('/html/v1.0/tracker/recGPS', 'exeReq', 'GPS record', 'KO') return 'GPS record error'
def close(): if not request.form['sid']: wEvent('close', session['uid'], "No space ID provided", 'KO') return 'No space ID provided' session['sname'] = request.form['sname'] session['sid'] = request.form['sid'] try: # Delete webhook webhook = exeReq( "SELECT name FROM spaces WHERE uid = '1' AND sid = '" + session['sid'] + "';") web = pyCiscoSpark.del_webhook(api.config['ACCESS_TOKEN'], webhook[0][0]) # Delete room pyCiscoSpark.del_room(api.config['ACCESS_TOKEN'], session['sid']) exeReq("UPDATE spaces SET status = 'close' WHERE sid = '" + session['sid'] + "';") # Log sEvent('closure') wEvent('close', session['uid'], "Space closed, id: " + session['sid'], 'OK') return render_template('new.html') except Exception as e: wEvent('close', session['uid'], str("Issue to close the space, id " + session['sid']), 'KO') return 'Issue during space closure'
def deleteCustomer(): try: sql = "UPDATE user SET grp = 'deleted' WHERE login = '******'login'] + "';" print sql exeReq(sql) wEvent('/html/v1.0/customer/delete','exeReq','Get','OK') return listCustomer() except Exception as e: wEvent('/html/v1.0/customer/delete','exeReq','Get','KO') return 'Delete error'
def dashboard(): error = None if request.method == 'POST': # Set timer session value cming from the web session['timer'] = request.form['timer'] print 'timer: ' + session['timer'] # Get data according to the admin priv if session['admin'] == '1': sql = "SELECT 'admin', s.sid, s.name, 'list', DATE_FORMAT(s.birthday, '%Y-%m-%d'), " sql += "DATE_FORMAT(s.timestamp, '%Y-%m-%d %H:%i'), s.severity, s.status " sql += "FROM spaces s, users u WHERE u.uid = s.uid AND u.uid != '1' AND s.status NOT LIKE '%close%' GROUP BY s.name ORDER BY s.name;" else: sql = "SELECT '" + session['grp'] + "', s.sid, s.name, 'Me', " sql += "DATE_FORMAT(s.birthday, '%Y-%m-%d'), DATE_FORMAT(s.timestamp, '%Y-%m-%d %H:%i'), s.severity, s.status " sql += "FROM spaces s WHERE s.uid = '" + session[ 'uid'] + "' AND u.uid != '1' AND s.status NOT LIKE '%close%' ORDER BY s.name;" try: spaces = exeReq(sql) except Exception as e: wEvent('dashboard', session['uid'], 'Database error (get dashboard data)', 'KO') return render_template('index.html') return jsonify(data=spaces) else: return 'Dashboard refreshed'
def sparkSearch(roomid, text): i = 0 newmsg = app.config['SPARK_MSG_SEARCH'] + '\n' # Remove search word p = re.compile('^search ') msgtofind = p.sub('', text) # Search in the event table (history) the text msg try: msgs = exeReq("SELECT id, msg FROM events WHERE msg LIKE '%" + msgtofind + "%' AND owner != 'app' AND owner != '" + app.config['APP_MAIL'] + "'") wEvent('sparkSearch', roomid, msgtofind, 'app', '1', msgs) except Exception as e: wEvent('sparkSearch', roomid, msgtofind, 'app', '0', e) # Format and send the result for msg in msgs: roomlink = re.split('ciscospark://us/ROOM/', str(base64.b64decode(msg[0]))) roomurl = 'https://web.ciscospark.com/#/rooms/' + str(roomlink[1]) newmsg += '* [' + str(i) + '](' + roomurl + ') ' + msg[1] + '\n' i = i + 1 try: room = post_markdown(app.config['SPARK_ACCESS_TOKEN'], roomid, newmsg) wEvent('sparkSearch', roomid, newmsg, 'app', '1', room) except Exception as e: wEvent('sparkSearch', roomid, "Issue during the post of the result message", 'app', '0', e) return 'OK'
def users(): try: users = exeReq( "SELECT login,email,admin,grp FROM users WHERE uid != '1';") return render_template('users.html', users=users) except Exception as e: wEvent('users', 'webhook', 'Get user list error', 'KO') return 'Get user list error'
def saveTracking(): try: sql = "INSERT INTO tracking SET tid = '" + request.form[ 'tracking'] + "', " sql += " uid = (SELECT uid FROM user WHERE login = '******'login'] + "'), " sql += " did = (SELECT did FROM device WHERE name = '" + request.form[ 'name'] + "'), " sql += " gps = '" + request.form['gps'] + "', url = '" + request.form[ 'url'] + "', " sql += " website = '" + request.form[ 'website'] + "', webhook = '" + request.form['webhook'] + "', " sql += " address = '" + request.form[ 'address'] + "', ip = '" + request.form['ip'] + "', " sql += " humidity = '" + request.form[ 'humidity'] + "', luminosity = '" + request.form[ 'luminosity'] + "', " sql += " temp_amb = '" + request.form[ 'temp_amb'] + "', temp_sensor = '" + request.form[ 'temp_sensor'] + "', " sql += " data = '{}' ".format(request.json) sql += "ON DUPLICATE KEY UPDATE " sql += " uid = (SELECT uid FROM user WHERE login = '******'login'] + "'), " sql += " did = (SELECT did FROM device WHERE name = '" + request.form[ 'name'] + "'), " sql += " gps = '" + request.form['gps'] + "', url = '" + request.form[ 'url'] + "', " sql += " website = '" + request.form[ 'website'] + "', webhook = '" + request.form['webhook'] + "', " sql += " address = '" + request.form[ 'address'] + "', ip = '" + request.form['ip'] + "', " sql += " humidity = '" + request.form[ 'humidity'] + "', luminosity = '" + request.form[ 'luminosity'] + "', " sql += " temp_amb = '" + request.form[ 'temp_amb'] + "', temp_sensor = '" + request.form[ 'temp_sensor'] + "', " sql += " data = '{}'; ".format(request.json) exeReq(sql) wEvent('/html/v1.0/tracking/save', 'exeReq', 'Save', 'OK') return 'Save OK' except Exception as e: wEvent('/html/v1.0/tracking/save', 'exeReq', 'Save', 'KO') return 'Save error'
def user(): try: user = exeReq( "SELECT login,email,mobile,admin,grp FROM users WHERE login = '******'login'] + "';") return render_template('user.html', user=user[0]) except Exception as e: wEvent('user', 'webhook', 'Get user error', 'KO') return 'Get user error'
def viewCustomer(): try: sql = "SELECT login, firstname, lastname, email, address, enterprise, mobile, password " sql += "FROM user WHERE login = '******'login'] + "' AND grp = 'customer';" view = exeReq(sql) wEvent('/html/v1.0/customer/view','exeReq','Get','OK') return render_template('customer.html', view = view[0], maps = getMaps()) except Exception as e: wEvent('/html/v1.0/customer/view','exeReq','Get','KO') return 'View error'
def viewUser(): try: sql = "SELECT uid, login, firstname, lastname, email, address, enterprise, grp, mobile, '', admin " sql += "FROM user WHERE login = '******'login'] + "';" view = exeReq(sql) wEvent('/html/v1.0/user/view','exeReq','Get','OK') return render_template('user.html', view = view[0], maps = getMaps()) except Exception as e: wEvent('/html/v1.0/user/view','exeReq','Get','KO') return 'View error'
def update_item(item, item_id): try: fields = get_fields(item) if not request.json and item not in request.json: abort(400) sql = 'UPDATE {} SET '.format(item) for field in request.json[item]: sql += "{} = '{}', ".format(field, request.json[item][field]) sql = sql[:-2] + " WHERE {} = '{}';".format(fields[0], item_id) exeReq(sql) wEvent('/api/v1.0/{}/{}'.format(item, item_id), 'api', 'PUT', 'OK') return jsonify({item: task[0]}) except Exception as e: wEvent('/api/v1.0/{}/{}'.format(item, item_id), 'api', 'PUT', 'KO') abort(400)
def newCustomerSub(): try: sql = "INSERT INTO user SET login = '******'login'] + "', " sql += " firstname = '" + request.form['firstname'] + "', lastname = '" + request.form['lastname'] + "', " sql += " email = '" + request.form['email'] + "', address = '" +request.form['address'] + "', " sql += " admin = '0', grp = 'customer', " sql += " password = '******'password'] + "', enterprise = '" + request.form['enterprise'] + "', " sql += " mobile = '" + request.form['mobile'] + "' " sql += "ON DUPLICATE KEY UPDATE " sql += " firstname = '" + request.form['firstname'] + "', lastname = '" + request.form['lastname'] + "', " sql += " email = '" + request.form['email'] + "', address = '" +request.form['address'] + "', " sql += " admin = '0', grp = 'customer', " sql += " password = '******'password'] + "', enterprise = '" + request.form['enterprise'] + "', " sql += " mobile = '" + request.form['mobile'] + "';" exeReq(sql) wEvent('/html/v1.0/customer/save','exeReq','Save','OK') return 'Save OK' except Exception as e: wEvent('/html/v1.0/customer/save','exeReq','Save','KO') return 'Save error'
def resetAT(): error = None try: data = exeReq("UPDATE users SET accesstoken = '' WHERE login='******'login'] + "'") except Exception as e: logger('resetAT', 'DB connection/request error!') return render_template('login.html', error=error) session['accesstoken'] = '' logger('resetAT', 'Your access token was resetted properly') return redirect(url_for('login_api.logout'))
def message(): print 'message received' jso = json.loads(request.data) data = jso.get('data') try: msg = pyCiscoSpark.get_message(api.config['ACCESS_TOKEN'], data.get('id')) except Exception as e: wEvent('message', 'webhook', 'Get Spark message error', 'KO') return 'Get Spark message error' try: exeReq("INSERT INTO sEvents SET sid = '" + data.get('roomId') + "', msg = '" + msg.get('text') + "', uid = '0';") logstash('bot', msg) wEvent('message', 'webhook', 'Messages stored locally', 'OK') return 'Message stored locally' except Exception as e: wEvent('message', 'webhook', 'Database error (put msg data)', 'KO') return 'Database error (put msg data)'
def create_item(item): #try: if not request.json or not item in request.json: abort(400) if 'iot' in item: sql = "INSERT INTO tracking SET " sql += "uid = '{}', ".format(request.json[item]['uid']) sql += "did = '{}', ".format(request.json[item]['did']) sql += "humidity = '{}', ".format(request.json[item]['hum']) sql += "luminosity = '{}', ".format(request.json[item]['lum']) sql += "temp_amb = '{}', ".format(request.json[item]['tam']) sql += "temp_sensor = '{}', ".format(request.json[item]['tse']) sql += 'data = "{}";'.format(request.json) item = 'tracking' elif 'lebonsailounge' in item: # Create device if not exist did = exeReq("SELECT count(*) FROM device WHERE name = '{}';".format( request.json[item]['device'])) did = re.sub("[^0-9]", "", "{}".format(did)) if did == 0: sql = "INSERT INTO device SET " sql += "name = '{}'".format(request.json[item]['device']) sql += "status = 'to register'" exeReq(sql) # Insert tracking event vals = request.json[item]['data'].split('f') sql = "INSERT INTO tracking SET " sql += "uid = (SELECT uid FROM device WHERE name = '{}'), ".format( request.json[item]['device']) sql += "did = (SELECT did FROM device WHERE name = '{}'), ".format( request.json[item]['device']) sql += "gps = '{},{}', ".format(request.json[item]['lat'], request.json[item]['lng']) sql += "humidity = '{}', ".format(vals[1]) sql += "luminosity = '{}', ".format(vals[2]) sql += "temp_amb = '{}', ".format(vals[0]) #sql += "temp_sensor = '{}', ".format(request.json[item]['tse']) sql += 'data = "{}";'.format(request.json) item = 'tracking' else: fields = get_fields(item) sql = 'INSERT INTO {} SET '.format(item) for field in request.json[item]: sql += '{} = "{}", '.format(field, request.json[item][field]) sql = sql[:-2] + ';' exeReq(sql) res = exeReq("SELECT COUNT(*) FROM {};".format(item)) item_id = re.sub("[^0-9]", "", "{}".format(res)) wEvent('/api/v1.0/{}/{}'.format(item, item_id), 'api', 'POST', 'OK') return jsonify({item: item_id}), 201 #except Exception as e: wEvent('/api/v1.0/{}'.format(item), 'api', 'POST', 'KO') abort(400)
def listTracking(): try: sql_cont = "FROM tracking t, user u, device d " sql_cont += "WHERE t.uid = u.uid AND t.did = d.did AND u.grp != 'deleted' AND d.status != 'deleted' " # Pagination search = False q = request.args.get('q') if q: search = True page = request.args.get(get_page_parameter(), type=int, default=1) per_page = 20 startat = page * per_page if startat <= per_page: startat = 0 count = exeReq("SELECT count(*) {}".format(sql_cont)) count = re.sub("[^0-9]", "", "{}".format(count)) pagination = Pagination(page=page, total=int(count), search=search, record_name='list', css_framework='foundation', per_page=per_page) # Get data sql = "SELECT t.tid, u.login, d.name, t.timestamp, data " sql += "{} ORDER BY t.tid DESC LIMIT {}, {};".format( sql_cont, startat, per_page) list = exeReq(sql) wEvent('/html/v1.0/tracking/list', 'exeReq', 'Get list', 'OK') return render_template('listTracking.html', list=list, maps=getMaps(), pagination=pagination) except Exception as e: wEvent('/html/v1.0/tracking/list', 'exeReq', 'Get list', 'KO') return 'List error'
def listCustomer(): try: # Pagination search = False q = request.args.get('q') if q: search = True page = request.args.get(get_page_parameter(), type=int, default=1) per_page = 20 startat = page * per_page if startat <= per_page: startat = 0 count = exeReq("SELECT count(*) FROM user WHERE grp = 'customer';") count = re.sub("[^0-9]", "","{}".format(count)) pagination = Pagination(page=page, total=int(count), search=search, record_name='list', css_framework='foundation', per_page=per_page) # Get data list = exeReq("SELECT login, email, grp FROM user WHERE grp = 'customer';") wEvent('/html/v1.0/customer/list','exeReq','Get list','OK') return render_template('listCustomer.html', list = list, maps = getMaps(), pagination=pagination) except Exception as e: wEvent('/html/v1.0/customer/list','exeReq','Get list','KO') return 'List error'
def viewTracking(): try: sql = "SELECT t.tid, u.login, d.name, t.ip, t.gps, t.url, t.website, t.webhook, t.address, t.timestamp, t.humidity, t.luminosity, t.temp_amb, t.temp_sensor, t.data " sql += "FROM tracking t, user u, device d " sql += "WHERE u.uid = t.uid AND t.did = d.did AND t.tid = '" + request.args[ 'tracking'] + "';" view = exeReq(sql) wEvent('/html/v1.0/tracking/view', 'exeReq', 'Get', 'OK') return render_template('tracking.html', view=view[0], maps=getMaps(), loginList=loginList(), nameList=nameList()) except Exception as e: wEvent('/html/v1.0/tracking/view', 'exeReq', 'Get', 'KO') return 'View error'
def userSub(): try: sql = "UPDATE users SET " sql += " email = '" + request.form['email'] + "', " sql += " admin = '" + request.form['admin'] + "', " sql += " grp = '" + request.form['group'] + "', " sql += " mobile = '" + request.form['mobil'] + "' " sql += "WHERE login = '******'login'] + "';" except Exception as e: wEvent('user', 'webhook', 'SQL request preparation issue', 'KO') return 'SQL request preparation issue' try: user = exeReq(sql) wEvent('user', 'webhook', 'User update OK', 'OK') return 'User update OK' except Exception as e: wEvent('user', 'webhook', 'User update error', 'KO') return 'User update error'
def userlogin(login, password): if not login or not password: logger('login', 'Thanks to provide login and password') return 'ko' try: sql = "SELECT u.email, u.landline, u.mobile, u.accesstoken," sql += " (SELECT ids.id FROM ids, mapping WHERE ids.sid = mapping.roomid AND ids.type = 'roomid' AND u.uid = mapping.uid), " sql += " (SELECT ids.id FROM ids, mapping WHERE ids.sid = mapping.teamid AND ids.type = 'teamid' AND u.uid = mapping.uid) " sql += "FROM users u, mapping m " sql += "WHERE u.login = '******' AND pw_hash=PASSWORD('" + password + "') AND u.uid = m.uid" data = exeReq(sql) except Exception as e: logger('login', 'DB connection/login request error!') return 'ko' if data is None: logger('login', 'Wrong email or password!') return 'ko' else: session['logged_in'] = True session['login'] = login session['email'] = data[0][0] session['mobile'] = data[0][2] session['accesstoken'] = "" session['roomid'] = data[0][4] session['teamid'] = data[0][5] if data[0][3]: # if accesstoken set so finalize the login session['accesstoken'] = "Bearer " + data[0][3] logger( 'login', 'You were logged (login:'******',email:' + session['email'] + ').') return 'ok' else: # no accesstoken so Cisco registration request logger( 'login', 'You were logged but without access token, redirect on AT request page ongoing (login:'******',email:' + session['email'] + ').') return 'accesstoken' return 'ko'
def userlogin(login, password): if not login or not password: logger('login', 'Thanks to provide login and password') return 'ko' try: sql = "SELECT email, webhook, mobile, accesstoken " sql += "FROM users " sql += "WHERE login = '******' AND pw_hash = PASSWORD('" + password + "');" print sql data = exeReq(sql) except Exception as e: logger('login', 'DB connection/login request error!') return 'ko' if data is None: logger('login', 'Wrong email or password!') return 'ko' else: session['logged_in'] = True session['login'] = login session['email'] = data[0][0] session['webhook'] = data[0][1] session['mobile'] = data[0][2] session['accesstoken'] = "" if data[0][3]: # if accesstoken set so finalize the login session['accesstoken'] = "Bearer " + data[0][3] logger( 'login', 'You were logged (login:'******',email:' + session['email'] + ').') return 'ok' else: # no accesstoken so Cisco registration request logger( 'login', 'You were logged but without access token, redirect on AT request page ongoing (login:'******',email:' + session['email'] + ').') return 'accesstoken' return 'ko'
def login(): error = None if 'login' in session: return render_template('welcome.html') login = request.form['login'] if not login: wEvent('/html/v1.0/login', 'arg', 'Thanks to provide login', 'KO') return render_template('login.html') password = request.form['password'] if not password: wEvent('/html/v1.0/login', 'arg', 'Thanks to provide password', 'KO') return render_template('login.html') try: data = exeReq("SELECT grp, admin FROM user WHERE login='******' AND password=PASSWORD('" + password + "')") except Exception as e: wEvent('/html/v1.0/login', '', 'DB connection/request', 'KO') return render_template('login.html') try: if data is None or data[0][0] is None: wEvent('/html/v1.0/login', '', 'Wrong email or password', 'KO') return render_template('login.html') except Exception as e: wEvent('/html/v1.0/login', '', 'Wrong email or password', 'KO') return render_template('login.html') try: session['login'] = str(login) session['grp'] = str(data[0][0]) session['admin'] = str(data[0][1]) wEvent('/html/v1.0/login', session['login'], "User " + session['login'] + " logged", 'OK') return render_template('welcome.html') except Exception as e: wEvent('/html/v1.0/login', '', 'Wrong email or password', 'KO') return render_template('login.html')
def updateSub(): error = None # Get param description = str(request.form['description']) if not description: wEvent('updateSub', session['uid'], 'Thanks to provide description', 'KO') return 'Thanks to provide description' msg = 'TechRequest udpate from ' + session['grp'] msg += '\n- Description: ' + description try: severity = str(request.form['severity']) if severity: msg += '\n- Severity: ' + severity try: exeReq("UPDATE spaces SET severity = '" + severity + "' WHERE sid = '" + session['sid'] + "';") except Exception as e: wEvent('updateSub', session['uid'], 'Issue during severity update in local DB', 'KO') except Exception as e: wEvent('updateSub', session['uid'], 'Issue during severity treatment', 'OK') fileurl = 'no file provided' if 'filename' in session: if session['filename']: wEvent('updateSub', session['uid'], 'File provided: ' + session['filename'], 'OK') fileurl = api.config['UPLOAD_URL'] + session['filename'] fileurlspark = api.config['UPLOAD_URL_SPARK'] + session['filename'] msg += '\n- File: ' + fileurl else: wEvent('updateSub', session['uid'], 'No filename provided', 'KO') else: wEvent('updateSub', session['uid'], 'No file provided', 'KO') # Post file in the Space if fileurl != 'no file provided': try: file_dict = pyCiscoSpark.post_file(api.config['ACCESS_TOKEN'], session['sid'], fileurlspark) wEvent( 'updateSub', session['uid'], "File " + session['filename'] + " posted to the space " + session['sid'], 'KO') except Exception as e: wEvent( 'updateSub', session['uid'], "Issue when post file url " + fileurl + " to the space " + session['sid'], 'KO') # Post TechRequest update messages in the Space session['filename'] = '' try: msg_dict = pyCiscoSpark.post_message(api.config['ACCESS_TOKEN'], session['sid'], msg) return 'Update done' except Exception as e: wEvent('updateSub', session['uid'], "Issue during message update", 'KO') return render_template('update.html')
def dump(): if not request.form['sid']: wEvent('dump', session['uid'], "No space ID provided", 'KO') return 'No space ID provided' session['sname'] = request.form['sname'] session['sid'] = request.form['sid'] # Dump the Space try: msg_dict = pyCiscoSpark.get_messages(api.config['ACCESS_TOKEN'], session['sid']) sEvent('dump') except Exception as e: wEvent('dump', session['uid'], "Issue to dump the space " + session['sid'], 'KO') # Get file from message try: for msg in msg_dict['items']: if 'files' in msg: fileurl = str(msg['files']) fileurl = fileurl.replace( "[u'https://api.ciscospark.com/v1/contents/", "") fileurl = fileurl.replace("']", "") response = pyCiscoSpark.get_content(api.config['ACCESS_TOKEN'], fileurl) content_disp = response.headers.get('Content-Disposition', None) if content_disp is not None: filename = content_disp.split("filename=")[1] filename = filename.replace('"', '') with open(filename, 'w') as f: f.write(response.read()) print 'Saved-', filename else: print "Cannot save file- no Content-Disposition header received." except Exception as e: wEvent('dump', session['uid'], "Issue to get file in message " + session['sid'], 'KO') # Dump the database try: database = exeReq("Select * FROM spaces s, sEvents e WHERE s.sid = '" + session['sid'] + "' AND e.sid = '" + session['sid'] + "';") except Exception as e: wEvent('dump', session['uid'], "Issue to dump the database " + session['sid'], 'KO') # Write data into single CSV file msg = 'TechRequest Dump generation for the Space:' + session['sid'] msg += '\n\nSpace dump\n' + str(msg_dict) msg += '\n\nDatabase dump\n' + str(database) try: with open(api.config['DOWNLOAD_FOLDER'] + session['sid'] + ".csv", "wb") as fo: fo.write(msg) except Exception as e: wEvent('dump', session['uid'], str("Issue to create the file " + session['sid']), 'KO') wEvent('dump', session['uid'], "Space dumped, id: " + session['sid'], 'OK') return send_file(api.config['DOWNLOAD_FOLDER'] + session['sid'] + ".csv")
def newSub(): error = None # Get POST param title = str(request.form['title']) if not title: wEvent('newSub', session['uid'], 'Thanks to provide title', 'KO') return 'Thanks to provide title' description = str(request.form['description']) if not description: wEvent('newSub', session['uid'], 'Thanks to provide description', 'KO') return 'Thanks to provide description' severity = str(request.form['severity']) if not severity: wEvent('newSub', session['uid'], 'Thanks to provide severity', 'KO') return 'Thanks to provide severity' # Create Space try: space = pyCiscoSpark.post_room(api.config['ACCESS_TOKEN'], title) session['sid'] = space['id'] session['sname'] = title sEvent('creation') wEvent('newSub', session['uid'], "Space created, id: " + space['id'], 'OK') except Exception as e: wEvent('newSub', session['uid'], "Issue during space creation, name: " + title, 'KO') return "Issue during space creation" # Create webhook try: webhookmsg = pyCiscoSpark.post_webhook( api.config['ACCESS_TOKEN'], title, api.config['SPARK_WEBHOOK'] + '/message', 'messages', 'all', str('roomId=' + space['id'])) exeReq("INSERT INTO spaces VALUES ('" + space['id'] + "','1','" + webhookmsg['id'] + "','open', '', CURDATE(), NOW());") wEvent('newSub', session['uid'], "Webhook created, space id: " + space['id'], 'OK') except Exception as e: wEvent('newSub', session['uid'], "Issue during webhook space creation, name: " + title, 'KO') return "Issue during webhook space creation" # Get members from DB and associat to the Space (remote+local) try: member_list = exeReq( "SELECT DISTINCT email,uid,login,admin FROM users WHERE grp = 'EXP' OR grp = 'FR' OR grp = 'AL';" ) except Exception as e: wEvent('newSub', session['uid'], 'Database error (get member_list data)', 'KO') return 'Database error (get member_list data)' for user in member_list: try: pyCiscoSpark.post_roommembership(api.config['ACCESS_TOKEN'], space['id'], user[0], user[3]) exeReq("INSERT INTO spaces VALUES ('" + space['id'] + "','" + str(user[1]) + "','" + title + "','open', '" + severity + "', CURDATE(), NOW());") sEvent('Membership added:' + user[0]) wEvent('newSub', session['uid'], "User " + user[0] + " add to the space " + title, 'OK') except Exception as e: wEvent('newSub', session['uid'], "Issue when add user " + user[0] + " to the space " + title, 'KO') # Post TechRequest initial messages in the Space msg = 'Welcome in the new TechRequest Space' msg += '\n- Title: ' + title msg += '\n- Description: ' + description msg += '\n- Severity: ' + severity msg += '\n- Requestor: ' + session['login'] msg += '\n- Requestor email: ' + session['email'] msg += '\n- Webserver: ' + api.config['SPARK_WEBHOOK'] msg += '\n- Space ID: ' + session['sid'] msg += '\nRemember that you can use the following bot in 1:1 space for additionnal support' msg += '\n- TechRequest.io : specific support for TechRequest' msg += '\n- [email protected] : additionnal tool like translator, crisis room, search engine' msg_dict = pyCiscoSpark.post_message(api.config['ACCESS_TOKEN'], space['id'], msg) sEvent('Initial messages recorded:\n\n' + msg) wEvent('newSub', session['uid'], 'Messages put in the space', 'OK') # End of first inital TechRequest session['filename'] = '' return 'Space created and people invited'