Exemple #1
0
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'
Exemple #2
0
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'
Exemple #3
0
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'
Exemple #4
0
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'
Exemple #5
0
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'
Exemple #6
0
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'
Exemple #7
0
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'
Exemple #8
0
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'
Exemple #9
0
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'
Exemple #10
0
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'
Exemple #11
0
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)
Exemple #12
0
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'
Exemple #13
0
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'))
Exemple #14
0
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)'
Exemple #15
0
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)
Exemple #16
0
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'
Exemple #17
0
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'
Exemple #18
0
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'
Exemple #19
0
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'
Exemple #20
0
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'
Exemple #21
0
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'
Exemple #22
0
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')
Exemple #23
0
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')
Exemple #24
0
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")
Exemple #25
0
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'