import requests # Install requests using 'pip install requests' """ Suppose This is the file you want to use in the same directory as this file create a file somePolicy.pl and paste the content in it - username : some_user - password : some_password - project (folder) : someProject - gorgias file : somePolicy.pl contents of some_policy.pl *** :- dynamic request/2, need/1, manager/1. rule(r1(Agent, Resource), challenge(Agent, Resource), []):-request(Agent,Resource). rule(r2(Agent, Resource), refuse(Agent, Resource),[]):-need(Resource), request(Agent, Resource). rule(r3(Agent, Resource),give(Agent, Resource), []):-request(Agent, Resource), manager(Agent). complement(give(Agent, Resource), challenge(Agent, Resource)). complement(challenge(Agent, Resource), give(Agent, Resource)). complement(refuse(Agent, Resource), challenge(Agent, Resource)). complement(challenge(Agent, Resource), refuse(Agent, Resource)). complement(refuse(Agent, Resource), give(Agent, Resource)). complement(give(Agent, Resource), refuse(Agent, Resource)). end of some_policy.pl """ BASE_GORGIAS_URL = "http://aiasvm1.amcl.tuc.gr:8085" # Exemple of a function using the prolog API to prove a policy option def queryGorgias(facts=[], gorgiasFile=""): query = "challenge(Agent, Resource)" # prolog query data = { "facts": facts, # Facts as list of str "gorgiasFiles": [ gorgiasFile # Gorgias file name preceded by project name: project/file.pl ], "query": query, "resultSize": 1 } r = requests.post(f"{BASE_GORGIAS_URL}/GorgiasQuery", json=data, auth=('some_user', 'some_password')) if r.status_code != 200: print("error") return False return r.json() # Exemple of a function using the prolog API to create a project def createProject(project_name = ""): r = requests.post(f"{BASE_GORGIAS_URL}/createProject?project_name={project_name}", auth=('some_user', 'some_password')) if r.status_code != 200: print("error") return False return r.json() # Exemple of a function using the prolog API to add a file def addFile(file = "", project= "", type= ""): files = {'file': open(f'{file}', 'rb')} r = requests.post(f"{BASE_GORGIAS_URL}/addFile?project={project}&type={type}", files=files, auth=('some_user', 'some_password')) if r.status_code != 200: print(r.status_code) return False return r.json() # Exemple of a function using the prolog API to delete a project def deleteProject(project = ""): r = requests.post(f"{BASE_GORGIAS_URL}/deleteProject?project={project}", auth=('some_user', 'some_password')) if r.status_code != 200: print("error") return False return r.json() # Exemple of a function using the prolog API to delete a file def deleteFile(filename = "", project="", ): r = requests.post(f"{BASE_GORGIAS_URL}/deleteFile?filename={filename}.pl&project={project}", auth=('some_user', 'some_password')) if r.status_code != 200: print("error") return False return r.json() #Returns OK if the project has been created print(createProject("someProject")) #Returns OK if the file has been added print(addFile("somePolicy.pl","someProject", "gorgias")) #Returns the result of the query print(queryGorgias(facts=["request(some_agent,some_tool)"], gorgiasFile="someProject/somePolicy.pl")) #Returns OK if the file has been deleted print(deleteFile("somePolicy","someProject")) #Returns OK if the project has been deleted print(deleteProject("someProject"))