Beispiel #1
0
def join_group(group_id):
    if not request.json:
        return page_not_found

    if 'Authorization' not in request.headers:
        user_name = request.json["name"]
        user_id = get_uuid()
        token = jwt.encode({
            'userId': user_id,
            'name': user_name
        }, 'very-super-secret')
        response = {
            "visitor": {
                "id": user_id,
                "name": user_name
            },
            "token": token  #.decode("utf-8")
        }

        GroupRepository().create_visitor(user_id, group_id, user_name)

        return flask.jsonify(response)
    else:
        token = get_token_info(request.headers.environ["HTTP_AUTHORIZATION"])
        user_id = token["userId"]
        user_name = token["name"]
        if not GroupRepository().find_user(user_id):
            return unauthorized
        else:
            GroupRepository().insert_user_group(group_id, user_name)
            return ok
Beispiel #2
0
    def insert_device(self, device):
        device["id"] = get_uuid()

        query = f"""
        {self.prefixes}
        INSERT DATA {{
            devices:{device["id"]} rdf:type devices:{device["type"]};
                devices:name "{device["name"]}" ;
                devices:id "{device["id"]}" ;
                devices:nickname "{device["nickname"]}" ;  
        }}
        """

        self.fuseki_client.execute(query)

        return device["id"]
Beispiel #3
0
    def create_group(self, group):
        group["id"] = get_uuid()

        query = f"""
        {self.prefixes}
        INSERT DATA {{
            groups:{group["id"]} rdf:type groups:Group ;
                groups:name "{group["name"]}" ;
                groups:id "{group["id"]}" ;
                groups:isOwnedBy users:{group["owner"]} ;
                groups:hasMember users:{group["owner"]} .
        }}
        """

        self.fuseki_client.execute(query)

        return group["id"]
Beispiel #4
0
    def insert_user(self, user):
        user["id"] = get_uuid()
        user["password"] = encrypt_password(user["password"])

        query = f"""
        PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
        PREFIX users: <http://www.semanticweb.org/ontologies/users#>
        INSERT DATA {{
            users:{user["username"]} rdf:type users:User ;
            users:name "{user["name"]}" ;
            users:phone "{user["phone"]}" ;
            users:password "{user["password"]}" ;
            users:id "{user["id"]}" .
        }}
        """

        self.fuseki_client.execute(query)

        return user
Beispiel #5
0
    def add_permission(self, group_id, permission):
        id = get_uuid()

        query = f"""
        {self.prefixes}
        INSERT DATA {{
            permissions:{id} rdf:Type permissions:Permission;
                permissions:id "{id}" ;
                permissions:deviceId "{permission["deviceId"]}" ;
                permissions:memberId "{permission["memberId"]}" ;
                permissions:manage "{int(permission["manage"])}" ;
                permissions:read "{int(permission["read"])}" ;
                permissions:write "{int(permission["write"])}" ;
        }};

        INSERT DATA {{
            groups:{group_id} groups:hasPermission permissions:{id} .
        }}   
        """

        self.fuseki_client.execute(query)
Beispiel #6
0
    def discover(self, group_id):
        discovered_devices = self.get_discovered_devices(group_id)
        if len(discovered_devices) == 0:
            device_repo = DeviceRepository()
            devices = []
            devices_ids = []

            for device_type, _ in known_devices.items():
                device_id = get_uuid()
                device_name = random.choice(known_devices[device_type])

                device = {
                    "id": device_id,
                    "nickname": "",
                    "name": device_name,
                    "type": device_type
                }

                devices.append(device)
                devices_ids.append(device_id)
                device_repo.insert_device_with_id(device)

            insert = f"""
                    PREFIX devices: <http://www.semanticweb.org/ontologies/devices#>
                    PREFIX groups: <http://www.semanticweb.org/ontologies/groups#>
                    INSERT DATA {{
                        groups:{group_id} groups:hasDiscovered {self.compute_sparql_devices('devices', devices_ids)}
                    }}
                """

            self.fuseki_client.execute(insert)

            return {
                "devices": devices
            }
        else:
            return {
                "devices": discovered_devices
            }