Ejemplo n.º 1
0
def rooms_dict():
    out = dict({})
    rooms = list(flask_redis.smembers("forresthill-rooms"))
    rooms.sort()
    for room in rooms:
        out[room] = flask_redis.hget(room, "name")
    return out
Ejemplo n.º 2
0
def get_friend_rooms():
    rooms = map(lambda name: flask_redis.hgetall(name),
                flask_redis.smembers("forresthill-rooms"))
    rooms.sort(key=lambda x: x['key'])

    friends = set()
    if current_user.is_authenticated:
        for room in rooms:
            room_machines = flask_redis.lrange(room['key'] + "-machines", 0,
                                               -1)
            for machineName in room_machines:
                machine = flask_redis.hgetall(machineName)
                if current_user.has_friend(machine['user']):
                    uun = current_user.get_friend(machine['user'])
                    friends.add((uun, room['key'], room['name']))
        friends = list(friends)

        # uun -> name
        names = ldap.get_names([f[0] for f in friends])
        for i in range(len(friends)):
            uun, b, c = friends[i]
            if uun in names:
                friends[i] = {
                    'uun': uun,
                    'name': names[uun],
                    'room_key': b,
                    'room_name': c
                }

        friends.sort(key=lambda x: x['name'])

    return friends
Ejemplo n.º 3
0
def rooms_list():
    rooms = list(flask_redis.smembers("forresthill-rooms"))
    rooms.sort()
    for i in range(len(rooms)):
        room = rooms[i]
        rooms[i] = (room, flask_redis.hget(room, "name"))

    return rooms
Ejemplo n.º 4
0
def rooms_list():
    """Returns a tuple of (name, uun) (TODO: swap order)"""
    rooms = list(flask_redis.smembers("forresthill-rooms"))
    rooms.sort()
    for i in range(len(rooms)):
        room = rooms[i]
        rooms[i] = (room, flask_redis.hget(room, "name"))

    return rooms
Ejemplo n.º 5
0
def schema_reset(site):
    siteKey = site + "-rooms"
    pipe = flask_redis.pipeline()

    for room in flask_redis.smembers(siteKey):
        schema_reset_room(pipe, site, room)

    pipe.delete(site)
    pipe.srem("mapp.sites", site)

    pipe.execute()
Ejemplo n.º 6
0
    def get_friend(self, friend_hash):
        import hashlib
        from config import CRYPTO_SECRET as secret
        from map import flask_redis

        all_friends = flask_redis.smembers(self.get_id() + '-friends')

        for friend in all_friends:
            hasher = hashlib.sha512()
            hasher.update(friend + str(secret))
            if hasher.hexdigest() == friend_hash:
                return friend
        return ""
Ejemplo n.º 7
0
def map_routine(which_room):
    room = flask_redis.hgetall(str(which_room))
    room_machines = flask_redis.lrange(room['key'] + "-machines", 0, -1)
    machines = {m: flask_redis.hgetall(m) for m in room_machines}
    num_rows = max([int(machines[m]['row']) for m in machines])
    num_cols = max([int(machines[m]['col']) for m in machines])

    num_machines = len(machines.keys())
    num_used = 0
    
    rows = []
    for r in xrange(0, num_rows+1):
        unsorted_cells = []
        for c in xrange(0, num_cols+1):
            default_cell = {'hostname': None, 'col': c, 'row': r}
            cell = [v for (k, v) in machines.iteritems() if int(v['row']) == r and int(v['col']) == c]
            if not cell:
                cell = default_cell
            else:
                cell = cell[0]

            try:
                if cell['user'] is not "":
                    num_used += 1
            except Exception:
                pass
            unsorted_cells.append(cell)

        cells = unsorted_cells
        rows.append(cells)

    num_free = num_machines - num_used

    reserved = flask_redis.smembers('reserved-machines')

    low_availability = num_free <= 0.3 * num_machines

    date_format = "%Y-%m-%dT%H:%M:%S.%f"
    last_update = datetime.strptime(flask_redis.get("last-update"),date_format)
    last_update = last_update.strftime("%Y-%m-%d %H:%M:%S")
    
    return {
        "room"             : room,
        "rows"             : rows,
        "reserved"         : reserved,
        "num_free"         : num_free,
        "num_machines"     : num_machines,
        "low_availability" : low_availability,
        "last_update"      : last_update
    }
Ejemplo n.º 8
0
def get_friends():
    friends = flask_redis.smembers(current_user.get_username() + "-friends")
    friends = list(friends)

    with ldap.conn() as ldap_conn:
        friend_names = ldap.get_names_bare(friends, ldap_conn)

        for i in range(len(friends)):
            uun = friends[i]
            friend = uun

            if uun in friend_names:
                friend = friend_names[uun]

            friends[i] = (friend, uun)
    return friends
Ejemplo n.º 9
0
def get_cascader_elsewhere_count(cascaders: List[str], notRoom: str) -> int:
    rooms = filter(lambda name: name != notRoom,
                   flask_redis.smembers("forresthill-rooms"))
    rooms = map(lambda name: flask_redis.hgetall(name), rooms)

    count: int = 0

    for room in rooms:
        room_machines = flask_redis.lrange(room['key'] + "-machines", 0, -1)
        for machineName in room_machines:
            machine = flask_redis.hgetall(machineName)
            if machine['user']:
                uun = find_cascader(cascaders, machine['user'])
                if uun:
                    count += 1

    return count
Ejemplo n.º 10
0
def friends():
    if request.method == "POST":
       formtype = request.form.get('type')
       if formtype == "del":
           remove_friends = request.form.getlist('delfriends')
           flask_redis.srem(current_user.get_id() + "-friends", *remove_friends)
       elif formtype == "add":
           add_friend = request.form.get('newfriend')
           if(re.match("^[A-Za-z]+\ [A-Za-z]+$", add_friend) == None):
               raise APIError("Friend name expected in [A-z]+\ [A-z]+ form.", status_code=400)
           flask_redis.sadd(current_user.get_id() + "-friends", add_friend)

    friends = flask_redis.smembers(current_user.get_id() + "-friends")
    friends = list(friends)
    friends = sorted(friends, key=lambda s: s.lower())

    return jsonify(friendList=friends) #Set up for ajax responses
Ejemplo n.º 11
0
Archivo: user.py Proyecto: qaisjp/mapp
    def get_friend(self, friend_hash, ignore_dnd=False):
        from map import flask_redis

        if check_uun_hash(self.get_username(), friend_hash):
            if self.get_dnd() and not ignore_dnd:
                return ""
            return self.get_username()

        all_friends = flask_redis.smembers(self.get_username() + '-friends')

        for friend in all_friends:
            if check_uun_hash(friend, friend_hash):
                from map import flask_redis
                is_dnd = flask_redis.sismember("dnd-users", friend)
                if is_dnd and not ignore_dnd:
                    return ""
                else:
                    return friend
        return ""
Ejemplo n.º 12
0
def route_get_cascaders():
    if current_user.is_disabled:
        return jsonify([])

    cascaders = get_cascaders()

    rooms = map(lambda name: flask_redis.hgetall(name),
                flask_redis.smembers("forresthill-rooms"))
    result = []

    for room in rooms:
        room_machines = flask_redis.lrange(room['key'] + "-machines", 0, -1)
        for machineName in room_machines:
            machine = flask_redis.hgetall(machineName)
            if machine['user']:
                uun = find_cascader(cascaders, machine['user'])
                if uun:
                    result.append({
                        'uun': uun,
                        'room': room['name'],
                    })

    uuns = [f['uun'] for f in result]

    # uun -> name
    names = ldap.get_names(uuns)

    # uun -> tagline
    taglines = flask_redis.hmget("cascaders.taglines", uuns)

    for i in range(len(result)):
        uun = result[i]['uun']
        if uun in names:
            result[i]['name'] = names[uun]
        result[i]['tagline'] = taglines[i]

    return jsonify(result)
Ejemplo n.º 13
0
def get_cascaders() -> List[str]:
    return list(flask_redis.smembers("cascaders.users"))