Ejemplo n.º 1
0
    def post(self):
        """ User login """
        payload = request.json
        cust_name = str_trim(payload.get("custname"))
        user_name = str_trim(payload.get("username"))
        user_pass = str_trim(payload.get("password"))

        if not (cust_name and user_name and user_pass):
            raise BadRequest(ret.http_resp(ret.RET_AUTH_MISSING))

        cust = search_cust(cust_name)
        if not cust:
            raise Unauthorized(ret.http_resp(ret.RET_AUTH_NO_CUST, cust_name))

        user = search_user(cust.id, user_name)
        if not user:
            raise Unauthorized(ret.http_resp(ret.RET_AUTH_NO_USER, user_name))

        if user.check_password(user_pass):
            resp = generate_user_tokens(str(cust.id), str(user.id), user_name)
            resp.update(get_user_role(user.id))
            if resp:
                return ret.http_resp(ret.RET_OK,
                                     extra=resp), status.HTTP_200_OK
        else:
            raise Unauthorized(ret.http_resp(ret.RET_AUTH_WRONG_PASS))
 def get(self):
     """ give User list """
     cust_id = aaa_verify()
     response = response_getall(cust_id)
     if not response:
         raise NotFound(ret.http_resp(ret.RET_NOT_FOUND))
     return ret.http_resp(ret.RET_OK, extra=response), status.HTTP_200_OK
 def post(self):
     """ give User list """
     cust_id = aaa_verify()
     user_list = request.json.get("users")
     response = response_get_detail(cust_id, user_list)
     if not response:
         raise NotFound(ret.http_resp(ret.RET_NOT_FOUND))
     return ret.http_resp(ret.RET_OK, extra=response), status.HTTP_200_OK
    def get(self):
        """ get all device groups """
        cust_id = aaa_verify()
        response = response_getallsummary(cust_id)
        if not response:
            raise NotFound(ret.http_resp(ret.RET_NOT_FOUND))

        return ret.http_resp(ret.RET_OK, extra=response), status.HTTP_200_OK
 def post(self):
     """ get detail device """
     cust_id = aaa_verify()
     device_list = request.json.get("devices")
     response = response_get_detail(cust_id, device_list)
     if not response:
         raise NotFound(ret.http_resp(ret.RET_NOT_FOUND))
     return ret.http_resp(ret.RET_OK, extra=response), status.HTTP_200_OK
 def post(self):
     """ add User """
     cust_id = aaa_verify()
     payload = request.json
     response = response_add(cust_id, payload)
     if not response:
         raise NotFound(ret.http_resp(ret.RET_NOT_FOUND))
     return ret.http_resp(ret.RET_OK, extra=response), status.HTTP_200_OK
Ejemplo n.º 7
0
 def post(self):
     """ add group """
     cust_id = aaa_verify()
     data = request.json
     response = response_add_groups(cust_id, data)
     if not response:
         raise NotFound(ret.http_resp(ret.RET_NOT_FOUND))
     return ret.http_resp(ret.RET_OK,
                          extra=response), status.HTTP_201_CREATED
    def post(self):
        """ show device group detail """
        cust_id = aaa_verify()
        data = request.json
        device_groups_list = data.get("device_groups")
        response = response_getdetail(cust_id, device_groups_list)
        if not response:
            raise NotFound(ret.http_resp(ret.RET_NOT_FOUND))

        return ret.http_resp(ret.RET_OK, extra=response), status.HTTP_200_OK
    def post(self):
        """ add group """
        cust_id = aaa_verify()
        data = request.json

        add_groups = [(group.get("name"), group.get("display_name")) for group in data.get("device_groups")]
        response = response_add_groups(add_groups, cust_id)

        if not response:
            raise NotFound(ret.http_resp(ret.RET_NOT_FOUND))
        return ret.http_resp(ret.RET_OK, extra=response), status.HTTP_201_CREATED
Ejemplo n.º 10
0
    def get(self):
        jti = get_raw_jwt().get("jti")
        if jti:
            is_in_blacklist = sdBlacklistToken.check_is_in_blacklist(jti)
            if not is_in_blacklist:
                logout_user(jti)
                return ret.http_resp(ret.RET_OK), status.HTTP_200_OK

            else:
                raise Unauthorized(ret.http_resp(ret.RET_AUTH_TOKEN_EXPIRED))
        else:
            raise Unauthorized(ret.http_resp(ret.RET_AUTH_FAIL))
Ejemplo n.º 11
0
    def test_account_group_join(self):
        # TAG add usergroup
        input_data = add_user_groups()
        token = self.login()
        resp = self.client.post("api/v1/account/group/add",
                                data=json.dumps(input_data),
                                content_type="application/json",
                                headers={"Authorization": f"Bearer {token}"})

        # TAG add users
        input_data = add_user_generate(1, 6)
        resp = self.client.post("api/v1/account/add",
                                data=json.dumps(input_data),
                                content_type="application/json",
                                headers={"Authorization": f"Bearer {token}"})

        # TAG join users
        input_data = {"users": ["1", "2", "3"]}

        resp = self.client.put("api/v1/account/group/2/join",
                               data=json.dumps(input_data),
                               content_type="application/json",
                               headers={"Authorization": f"Bearer {token}"})
        data = json.loads(resp.data.decode())
        expect = ret.http_resp(ret.RET_OK)
        self.assert200(resp)
        self.assertEqual(data, expect)
        query = db.session.query(rel_u_ug).filter(rel_u_ug.c.user_group_id == 2).all()
        self.assertTrue([(1, 2), (2, 2), (3, 2)] == query)
Ejemplo n.º 12
0
    def test_group_update(self):
        FakeDataCreation().insert_device_group(5, 0)

        rename_data = {"device_groups": [dict(id=str(count), name=f"{name}", display_name="McDonald")
                                         for count, name in zip(range(1, 4), ["hungry", "milk tea", "buddha tea"])]}

        token = self.login()
        resp = self.client.put("/api/v1/device/group/update",
                               data=json.dumps(rename_data),
                               content_type="application/json",
                               headers={"Authorization": f"Bearer {token}"})

        logger.debug("Rename Response " + resp.status)
        data = json.loads(resp.data.decode())

        query = db.select([func.count()]).where(sdDeviceGroup.display_name == 'McDonald')
        db_changed = db.session.execute(query).fetchone()[0]

        expect = ret.http_resp(ret.RET_OK)

        self.assert200(resp)
        self.assertEqual(data, expect)

        # test db changed
        self.assertEqual(db_changed, 3)
Ejemplo n.º 13
0
    def delete(self):
        """ delete group """
        cust_id = aaa_verify()
        group_id_list = request.json.get("user_groups")

        response_delete_groups(cust_id, group_id_list)
        return ret.http_resp(ret.RET_OK), status.HTTP_200_OK
Ejemplo n.º 14
0
    def test_group_delete(self):
        FakeDataCreation().insert_device_group(5, 0).insert_device(20)

        delete_data = {"device_groups": ["1", "2", "3"]}

        token = self.login()

        resp = self.client.delete("/api/v1/device/group/delete",
                                  data=json.dumps(delete_data),
                                  content_type="application/json",
                                  headers={"Authorization": f"Bearer {token}"})

        logger.debug("Delete Reponse " + resp.status)
        data = json.loads(resp.data.decode())

        expect = ret.http_resp(ret.RET_OK)

        stmt = db.select([sdDeviceGroup.id])

        db_changed = [i[0] for i in db.session.execute(stmt).fetchall()]

        self.assert200(resp)
        self.assertEqual(data, expect)

        # test db changed
        self.assertEqual(db_changed, [4, 5])
Ejemplo n.º 15
0
    def test_ug_leave_dg(self):
        # TAG add device group
        FakeDataCreation().insert_device_group(5, 0).insert_device(20)

        # TAG add usergroup
        input_data = add_user_groups()
        token = self.login()
        resp = self.client.post("api/v1/account/group/add",
                                data=json.dumps(input_data),
                                content_type="application/json",
                                headers={"Authorization": f"Bearer {token}"})

        # TAG join usergroup
        input_data = {"user_groups": ["2", "3"]}
        resp = self.client.put("/api/v1/device/group/2/join_ug",
                               data=json.dumps(input_data),
                               content_type="application/json",
                               headers={"Authorization": f"Bearer {token}"})

        # TAG leave usergroup
        input_data = {"user_groups": ["2"]}
        resp = self.client.put("/api/v1/device/group/2/leave_ug",
                               data=json.dumps(input_data),
                               content_type="application/json",
                               headers={"Authorization": f"Bearer {token}"})

        data = json.loads(resp.data.decode())

        expect = ret.http_resp(ret.RET_OK)

        self.assert200(resp)
        self.assertEqual(data, expect)
        query = db.session.query(rel_dg_ug).filter(rel_dg_ug.c.device_group_id == 2).all()
        self.assertTrue([(2, 3)] == query)
    def get(self):
        """ show device lists """
        response = "Hello world !!"
        if not response:
            raise NotFound(ret.http_resp(ret.RET_NOT_FOUND))

        return response, status.HTTP_200_OK
Ejemplo n.º 17
0
def user_getall_ref_json(start, end, mode):
    ret_json = ret.http_resp(ret.RET_OK)
    json = []
    json.append(dict(id="1", name="testuser", display_name="Test User", group=["1"]))
    for num in range(start, end):
        if num <= 6:
            customer = "NTPC"
        else:
            customer = "TPC"
        if mode == 1:
            # TAG change str here
            json.append(dict(id=str(num),
                             name=f"user_{num}",
                             display_name=f"User_{num} ({customer})",
                             group=[]))
        elif mode == 2:
            # TAG change str here
            json.append(dict(id=str(num),
                             name=f"user_{num}",
                             display_name=f"User_{num} ({customer})",
                             group=[],
                             email=email[0],
                             telephone=telephone[0],
                             comment="comment here"))
    ret_json.update({"users": json})
    return ret_json
    def put(self):
        """update the selected groups """
        cust_id = aaa_verify()

        renamed_items = [(rename.get("id"), rename.get("name"), rename.get("display_name"))
                         for rename in request.json.get("device_groups")]
        response_update_groups(cust_id, renamed_items)
        return ret.http_resp(ret.RET_OK), status.HTTP_200_OK
Ejemplo n.º 19
0
def usergroup_getall_ref_json():
    ret_json = ret.http_resp(ret.RET_OK)
    json = []
    location = ["三芝", "淡水", "北投"]
    json.append(dict(id="1", name="testuser", display_name="Test User", users=["1"]))
    for num, name in enumerate(location):
        json.append(dict(id=str(num+2),
                         name=name,
                         display_name=f"你好{name}",
                         users=[]))
    ret_json.update({"user_groups": json})
    return ret_json
    def post(self):
        """ give User device list """
        cust_id = aaa_verify()
        payload = request.json
        user_name, device_number = get_cust_user_device(payload)

        # using redis to enhance efficiency
        namespace = f"traffic_light:device:getall:{cust_id}"
        cache = redis_general_get(namespace)
        if not cache:
            data = getall_devicelist_for_geojson(cust_id, user_name,
                                                 device_number)
            response = get_geojson_from_sql_results(data)
            logger.info(f"cache not found, query from database...")
            redis_general_add(namespace, response)
        else:
            logger.info(f"get all devices using cache: {namespace}")
            response = cache

        if not response:
            raise NotFound(ret.http_resp(ret.RET_NOT_FOUND))

        return ret.http_resp(ret.RET_OK, extra=response), status.HTTP_200_OK
Ejemplo n.º 21
0
def ref_json():
    ret_json = ret.http_resp(ret.RET_OK)
    json = []
    divisor = 10 // 5
    for id in range(3):
        # TAG change str here
        json.append(dict(id=str(id+1),
                         name=f"testname_{id+1}",
                         display_name="奇岩的路燈",
                         comment="測試留言武功蓋世,世界大亂鬥。(){}@#$&*^",
                         status=0,
                         power_status=1,
                         wgs_x=121.8,
                         wgs_y=21.5,
                         address="",
                         dimming=50,
                         dimming_level=3,
                         device_group=dict(id=str(id // divisor + 1),
                                           name=f"testgroup_{id // divisor + 1}",
                                           display_name='test_streetlight',
                                           comment="",
                                           create_time='2019-12-18T00:00:00+08:00',
                                           update_time='2019-12-18T00:00:00+08:00'),
                         controller=dict(id=str(id+1),
                                         name=f"test_controller_{id+1}",
                                         display_name="奇岩的controller",
                                         comment="For Unit Test",
                                         create_time="2019-12-18T00:00:00+08:00",
                                         update_time="2019-12-18T00:00:00+08:00",
                                         model_id=0,
                                         serial_no="BX000{}".format(id+1),
                                         model_name="test_device_model",
                                         model_display_name="Test Device Model"),
                         led=dict(id=str(id+1),
                                  name=f"test_led_{id+1}",
                                  display_name="Test User",
                                  comment="For Unit Test",
                                  create_time="2019-12-18T00:00:00+08:00",
                                  update_time="2019-12-18T00:00:00+08:00",
                                  model_id=0,
                                  serial_no="BX000{}".format(id + 1),
                                  model_name="test_device_model",
                                  model_display_name="Test Device Model")))
    ret_json.update({"devices": json})
    return ret_json
Ejemplo n.º 22
0
def add_device_geojson_to_db(max_device):
    ret_json = ret.http_resp(ret.RET_OK)
    user_devices_json = {"type": "FeatureCollection",
                         "features": []}
    for number in range(max_device):
        status, power_status, dimming = generate_status_dimming(number+1)
        each_sample_json = {"type": "Feature",
                            "geometry": {"type": "Point",
                                         "coordinates": [50.12,
                                                         50.12]},
                            "properties": {"id": str(number),
                                           "name": str(number),
                                           "display_name": "none",
                                           "comment": "null",
                                           "status": status,
                                           "power_status": power_status,
                                           "address": "New Taipei City, Beitou.",
                                           "dimming": dimming,
                                           "dimming_level": dimming_convert(dimming),
                                           "group_name": "testgroup_1",
                                           "group_display_name": "test_streetlight"
                                           }}
        user_devices_json["features"].append(each_sample_json)

        testing_device_data = sdDevice(id=each_sample_json["properties"]["id"],
                                       name=each_sample_json["properties"]["name"],
                                       display_name=each_sample_json["properties"]["display_name"],
                                       comment=each_sample_json["properties"]["comment"],
                                       create_time="2019-10-22 11:18:55",
                                       update_time="2019-10-22 11:18:55",
                                       dev_type=1,
                                       cust_id=1,
                                       power_status=power_status,
                                       status=each_sample_json["properties"]["status"],
                                       dimming=each_sample_json["properties"]["dimming"],
                                       wgs_x=each_sample_json["geometry"]["coordinates"][0],
                                       wgs_y=each_sample_json["geometry"]["coordinates"][1],
                                       address=each_sample_json["properties"]["address"],
                                       device_group_id=1
                                       )
        db.session.add(testing_device_data)
    db.session.commit()
Ejemplo n.º 23
0
    def test_group_join(self):
        FakeDataCreation().insert_device_group(5, 0).insert_device(20)

        input_data = {"devices": ["17", "18", "19"]}

        token = self.login()
        resp = self.client.put("/api/v1/device/group/3/join",
                               data=json.dumps(input_data),
                               content_type="application/json",
                               headers={"Authorization": f"Bearer {token}"})

        logger.debug("Join Group {} {}".format(resp.status, input_data['devices']))

        data = json.loads(resp.data.decode())

        expect = ret.http_resp(ret.RET_OK)

        self.assert200(resp)
        self.assertEqual(data, expect)

        query = db.select([sdDevice.id]).where(sdDevice.device_group_id == 3)
        devices = [device_id[0] for device_id in db.session.execute(query).fetchall()]
        self.assertTrue([9, 10, 11, 12, 17, 18, 19] == devices)
Ejemplo n.º 24
0
    def test_account_delete(self):
        user_insertion()

        delete_data = {"users": ["2", "3", "4"]}
        token = self.login()
        resp = self.client.delete("/api/v1/account/delete",
                                  data=json.dumps(delete_data),
                                  content_type="application/json",
                                  headers={"Authorization": f"Bearer {token}"})

        logger.debug("Delete Reponse " + resp.status)
        data = json.loads(resp.data.decode())

        expect = ret.http_resp(ret.RET_OK)

        stmt = db.select([sdUser.id])

        db_changed = [i[0] for i in db.session.execute(stmt).fetchall()]

        self.assert200(resp)
        self.assertEqual(data, expect)

        # test db changed
        self.assertEqual(db_changed, [1, 5, 6, 7, 8, 9])
Ejemplo n.º 25
0
 def put(self, user_group_id):
     """ join schedule groups """
     cust_id = aaa_verify()
     payload = request.json
     response_leave_users(cust_id, user_group_id, payload)
     return ret.http_resp(ret.RET_OK), status.HTTP_200_OK
Ejemplo n.º 26
0
def missing_header_handler(callback):
    return ret.http_resp(
        ret.RET_AUTH_TOKEN_MISSING), status.HTTP_401_UNAUTHORIZED
Ejemplo n.º 27
0
def expired_token_handler(callback):
    return ret.http_resp(
        ret.RET_AUTH_TOKEN_EXPIRED), status.HTTP_401_UNAUTHORIZED
Ejemplo n.º 28
0
 def post(self):
     refresh = get_jwt_identity()
     token = access_token(refresh)
     return ret.http_resp(ret.RET_OK, extra=token), status.HTTP_200_OK
 def delete(self):
     """ Delete User """
     cust_id = aaa_verify()
     user_list = request.json.get("users")
     response_delete(cust_id, user_list)
     return ret.http_resp(ret.RET_OK), status.HTTP_200_OK
 def put(self):
     """ update device """
     cust_id = aaa_verify()
     payload = request.json
     response_update(cust_id, payload)
     return ret.http_resp(ret.RET_OK), status.HTTP_200_OK