mirror of
https://gitlab.com/JKANetwork/powerfulcomputermanager.git
synced 2026-02-19 19:51:31 +01:00
Fix bugs and started translation.
This commit is contained in:
199
api.py
199
api.py
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python3
|
||||
BUILD = 12
|
||||
BUILD = 16
|
||||
API_VER = 0 #Its beta, API 1 will have password checks enabled
|
||||
##It can be run directly with "waitress-serve --port=3333 api:api"
|
||||
import falcon
|
||||
@@ -21,6 +21,18 @@ def logit(text):
|
||||
file.write(text)
|
||||
file.write('\n')
|
||||
|
||||
def retPassword():
|
||||
try:
|
||||
return sql.select("SELECT Value FROM OPTIONS WHERE Option='Password'")[0]['Value']
|
||||
except:
|
||||
return ""
|
||||
|
||||
##
|
||||
# getComputerExists: Know if computer exists and matches UUID
|
||||
# /get/computerexists?
|
||||
# @param ComputerName -> Computer to deploy it
|
||||
# @param UUID: Check UUID validation of this computer
|
||||
##
|
||||
class getComputerExists(object):
|
||||
def on_get(self, request, response):
|
||||
logit(request)
|
||||
@@ -32,26 +44,33 @@ class getComputerExists(object):
|
||||
UUID = value
|
||||
|
||||
if ComputerName is None:
|
||||
response.media = {'RESULT': 'ERROR'}
|
||||
response.media = {'TEXT':'No params','RESULT': 'ERROR'}
|
||||
else:
|
||||
result = sql.select("SELECT COUNT(*) 'RESULT' FROM COMPUTERS WHERE Name='"+ComputerName+"' AND UUID='"+UUID+"'")
|
||||
|
||||
if result[0]['RESULT'] == 0: # 0 or 1
|
||||
if sql.select("SELECT COUNT(*) 'RESULT' FROM COMPUTERS WHERE Name='"+ComputerName+"' AND UUID IS NULL")[0]['RESULT'] != 0:
|
||||
if sql.select("SELECT COUNT(*) 'RESULT' FROM COMPUTERS WHERE Name='"+ComputerName+"' AND UUID IS NULL")[0]['RESULT'] != 0: #UUID doesn't in database, insert it
|
||||
sql.insert("UPDATE COMPUTERS SET UUID='"+UUID+"' WHERE Name='"+ComputerName+"'")
|
||||
response.media = {'RESULT': '1'}
|
||||
return
|
||||
elif sql.select("SELECT COUNT(*) 'RESULT' FROM COMPUTERS WHERE Name='"+ComputerName+"'")[0]['RESULT'] != 0:
|
||||
response.media = {'RESULT': 'ERROR'}
|
||||
elif sql.select("SELECT COUNT(*) 'RESULT' FROM COMPUTERS WHERE Name='"+ComputerName+"'")[0]['RESULT'] != 0: #Not UUID match, but computer exists
|
||||
response.media = {'TEXT': 'Error, computer and UUID doesn\'t match in database', 'RESULT': 'ERROR','EXITCODE':'2'}
|
||||
return
|
||||
if sysopt.addComputers == True:
|
||||
if sysopt.addComputers == True: #Computer doesn't exist, but you have enabled add all computers
|
||||
sql.insert("INSERT INTO COMPUTERS (`Name`,`UUID`) VALUES('"+ComputerName+"','"+UUID+"')")
|
||||
response.media = {'RESULT': '1'}
|
||||
else:
|
||||
response.media = {'RESULT': 'ERROR'}
|
||||
else: #Computer doesn't exist and you don't want to be added
|
||||
response.media = {'TEXT':'Error: Computer not exists in database', 'RESULT': 'ERROR','EXITCODE':'1'}
|
||||
|
||||
else: #Exists
|
||||
response.media = {'RESULT': '1'}
|
||||
|
||||
|
||||
##
|
||||
# getGroups: Know all groups or groups of a computer
|
||||
# /get/groups?
|
||||
# @param ComputerName/ComputerID -> Computer to see groups (Not neccesary)
|
||||
##
|
||||
class getGroups(object): #Get local groups of a Computer
|
||||
def on_get(self,request, response):
|
||||
logit(request)
|
||||
@@ -180,6 +199,12 @@ class addCookGrp(object): #Assign Cook to group
|
||||
result = sql.insert("INSERT INTO COOKS_IDG (`ID_G`,`CookName`) VALUES ('"+GroupID+"','"+CookName+"')")
|
||||
response.media = {'TEXT': 'OK'}
|
||||
|
||||
##
|
||||
# delCookGrp: Delete cook from a group
|
||||
# /del/cookgrp?
|
||||
# @param GroupName/GroupID -> Group to show cooks
|
||||
# @param CookName -> Cook to assign
|
||||
##
|
||||
class delCookGrp(object): #Delete cook from a group
|
||||
def on_get(self,request,response):
|
||||
logit(request)
|
||||
@@ -196,10 +221,15 @@ class delCookGrp(object): #Delete cook from a group
|
||||
|
||||
if GroupID is not None and CookName is not None:
|
||||
result = sql.insert("DELETE FROM COOKS_IDG WHERE ID_G='"+GroupID+"' AND CookName='"+CookName+"'")
|
||||
#response.media = result
|
||||
response.media = result
|
||||
else:
|
||||
response.media = {'TEXT': 'Error, no Group, or CookName does\'t exists','RESULT':'ERROR'}
|
||||
|
||||
##
|
||||
# delEmptyPcsGroup: Delete all computers from from a group
|
||||
# /del/emptypcsgroup?
|
||||
# @param GroupName/GroupID -> Group to delete computers
|
||||
##
|
||||
class delEmptyPcsGroup(object): #Delete all computers from a group
|
||||
def on_get(self,request,response):
|
||||
logit(request)
|
||||
@@ -319,6 +349,11 @@ class addComputer(object):
|
||||
result = sql.insert("INSERT INTO COMPUTERS (Name) VALUES ('"+ComputerName+"')")
|
||||
response.media = result
|
||||
|
||||
##
|
||||
# addGroup: Add a new group
|
||||
# /add/group?
|
||||
# @param GroupName -> Name of group to add
|
||||
##
|
||||
class addGroup(object):
|
||||
def on_get(self, request, response):
|
||||
logit(request)
|
||||
@@ -334,6 +369,11 @@ class addGroup(object):
|
||||
result = sql.insert("INSERT INTO GROUPS (Name) VALUES ('"+GroupName+"')")
|
||||
response.media = result
|
||||
|
||||
##
|
||||
# delGroup: Delete a group and all tables that has it.
|
||||
# /del/group?
|
||||
# @param GroupName/GroupID -> Name of group to delete
|
||||
##
|
||||
class delGroup(object): #Delete group
|
||||
def on_get(self, request, response):
|
||||
logit(request)
|
||||
@@ -351,6 +391,73 @@ class delGroup(object): #Delete group
|
||||
sql.insert("DELETE FROM COOKS_IDG WHERE ID_G='"+GroupID+"'")
|
||||
result = sql.insert("DELETE FROM GROUPS WHERE ID_G='"+GroupID+"'")
|
||||
response.media = result
|
||||
|
||||
|
||||
##
|
||||
# delCook: Delete a cook and all tables that has it. It doesn't delete files
|
||||
# /del/cook?
|
||||
# @param CookName -> Name of cook to disappear
|
||||
##
|
||||
class delCook(object):
|
||||
def on_get(self,request,response):
|
||||
logit(request)
|
||||
CookName = None, None # Initialize
|
||||
for key, value in request.params.items():
|
||||
if key == "CookName":
|
||||
exists = os.path.isfile('cooks/'+value+'.yaml')
|
||||
if exists:
|
||||
CookName = value
|
||||
|
||||
if CookName is not None:
|
||||
sql.insert("DELETE FROM COOKS_ONETIME WHERE CookName='"+CookName+"'")
|
||||
sql.insert("DELETE FROM COOKS_STATUS WHERE CookName='"+CookName+"'")
|
||||
result = sql.insert("DELETE FROM COOKS_IDG WHERE CookName='"+CookName+"'")
|
||||
response.media = result
|
||||
else:
|
||||
response.media = {'TEXT': 'Error, CookName don\'t exists','RESULT':'ERROR'}
|
||||
|
||||
##
|
||||
# delGroupsCook: Delete groups of a cook
|
||||
# /del/groupscook?
|
||||
# @param CookName -> Name of cook to make his groups disappear
|
||||
##
|
||||
class delGroupsCook(object):
|
||||
def on_get(self,request,response):
|
||||
logit(request)
|
||||
CookName = None, None # Initialize
|
||||
for key, value in request.params.items():
|
||||
if key == "CookName":
|
||||
exists = os.path.isfile('cooks/'+value+'.yaml')
|
||||
if exists:
|
||||
CookName = value
|
||||
|
||||
if CookName is not None:
|
||||
result = sql.insert("DELETE FROM COOKS_IDG WHERE CookName='"+CookName+"'")
|
||||
response.media = result
|
||||
else:
|
||||
response.media = {'TEXT': 'Error, CookName don\'t exists','RESULT':'ERROR'}
|
||||
|
||||
##
|
||||
# delCleanCook: Delete groups of a cook
|
||||
# /del/cleancook?
|
||||
# @param CookName -> Clean status of a cook (Restart it)
|
||||
##
|
||||
class delCleanCook(object):
|
||||
def on_get(self,request,response):
|
||||
logit(request)
|
||||
CookName = None, None # Initialize
|
||||
for key, value in request.params.items():
|
||||
if key == "CookName":
|
||||
exists = os.path.isfile('cooks/'+value+'.yaml')
|
||||
if exists:
|
||||
CookName = value
|
||||
|
||||
if CookName is not None:
|
||||
result = sql.insert("DELETE FROM COOKS_STATUS WHERE CookName='"+CookName+"'")
|
||||
response.media = result
|
||||
else:
|
||||
response.media = {'TEXT': 'Error, CookName don\'t exists','RESULT':'ERROR'}
|
||||
|
||||
|
||||
class updGroup(object): #Delete group
|
||||
def on_get(self, request, response):
|
||||
@@ -445,7 +552,7 @@ class updComputer(object):
|
||||
try:
|
||||
ComputerID = str(sql.select("SELECT ID_C FROM COMPUTERS WHERE Name='"+value+"'")[0]['ID_C'])
|
||||
except:
|
||||
response.media = {'TEXT': 'Error: Computer not exists in database','RESULT':'ERROR'}
|
||||
response.media = {'TEXT': 'Error: Computer not exists in database','RESULT':'ERROR','EXITCODE':'1'}
|
||||
break
|
||||
if key == "ComputerID":
|
||||
ComputerID = value
|
||||
@@ -456,7 +563,7 @@ class updComputer(object):
|
||||
elif response.media is None and ComputerID is not None and UUID is not None:
|
||||
Count = str(sql.select("SELECT COUNT(*) 'Count' FROM COMPUTERS WHERE UUID='"+UUID+"' AND ID_C='"+ComputerID+"'")[0]['Count'])
|
||||
if Count == "0":
|
||||
response.media = {'TEXT': 'Error, computer doesn\'t exists in database','RESULT':'ERROR'}
|
||||
response.media = {'TEXT': 'Error, computer and UUID doesn\'t match in database','RESULT':'ERROR','EXITCODE':'2'}
|
||||
else:
|
||||
for key, value in request.params.items():
|
||||
if key == "SOVersion":
|
||||
@@ -570,10 +677,70 @@ class setCookStatus(object):
|
||||
response.media = sql.insert("UPDATE COOKS_STATUS SET Revision='"+Revision+"',`Error`='"+Error+"',`ErrorDesc`='"+ErrorDesc+"' WHERE ID_C='"+ComputerID+"' AND CookName='"+CookName+"'")
|
||||
else:
|
||||
response.media = {'TEXT': 'Error in parameters...','RESULT':'ERROR'}
|
||||
|
||||
logit(response.media)
|
||||
|
||||
|
||||
##
|
||||
# checkPassword: Check password
|
||||
# /check/password?
|
||||
# @param Password -> SHA-256 of password
|
||||
##
|
||||
class checkPassword(object): #Check password (ERROR if password not valid or no password and 1 if valid)
|
||||
def on_get(self, request, response):
|
||||
logit(request)
|
||||
Password= None
|
||||
for key, value in request.params.items():
|
||||
if key == "Password":
|
||||
Password = value
|
||||
|
||||
if Password is None:
|
||||
response.media = {'TEXT': 'Error, you need to supply a password','RESULT':'ERROR'}
|
||||
else:
|
||||
pass
|
||||
res = sql.select("SELECT COUNT(*) 'RESULT' FROM OPTIONS WHERE Option='Password' AND Value='"+Password+"'")[0]['RESULT']
|
||||
if res == 1:
|
||||
response.media = {'RESULT':'1','TEXT':'OK'}
|
||||
else:
|
||||
res = sql.select("SELECT COUNT(*) 'RESULT' FROM OPTIONS WHERE Option='Password'")[0]['RESULT']
|
||||
if res == 0: #Password doesn't exists in database
|
||||
response.media = {'RESULT':'ERROR','TEXT':'No password set. Please set it'}
|
||||
else:
|
||||
response.media = {'RESULT':'ERROR','TEXT':'Password incorrect'}
|
||||
|
||||
##
|
||||
# updPassword: Update password
|
||||
# /upd/password?
|
||||
# @param OldPassword -> SHA-256 of password (Old)
|
||||
# @param NewPassword -> SHA-256 of password (New)
|
||||
##
|
||||
class updPassword(object): #Update password (ERROR if password not valid or no password and 1 if changed)
|
||||
def on_get(self, request, response):
|
||||
logit(request)
|
||||
OldPassword,NewPassword= None, None
|
||||
for key, value in request.params.items():
|
||||
if key == "NewPassword":
|
||||
NewPassword = value
|
||||
if key == "OldPassword":
|
||||
OldPassword = value
|
||||
|
||||
res = sql.select("SELECT COUNT(*) 'RESULT' FROM OPTIONS WHERE Option='Password'")[0]['RESULT']
|
||||
if res == 0 and NewPassword is not None: #Password doesn't exists in database
|
||||
response.media = sql.insert("INSERT INTO COMMENTS VALUES('Password','"+NewPassword+"')")
|
||||
elif res == 0 and NewPassword is None: #No password supplied
|
||||
response.media = {'RESULT':'ERROR','TEXT':'Error, you need to supply a password'}
|
||||
elif res == 1 and OldPassword is not None: # Password exists in database (And you supplied OldPassword)
|
||||
res = sql.select("SELECT COUNT(*) 'RESULT' FROM OPTIONS WHERE Option='Password' AND Value='"+OldPassword+"'")[0]['RESULT']
|
||||
if res == 0: # Old password incorrect
|
||||
response.media = {'RESULT':'ERROR','TEXT':'Old password incorrect'}
|
||||
elif res == 1 and NewPassword is not None: # All is supplied
|
||||
response.media = sql.insert("UPDATE OPTIONS SET Value='"+NewPassword+"' WHERE Option='Password'")
|
||||
else:
|
||||
response.media = {'RESULT':'ERROR', 'TEXT':'No password supplied or bad args'}
|
||||
else:
|
||||
response.media = {'RESULT':'ERROR', 'TEXT':'No password supplied or bad args'}
|
||||
|
||||
|
||||
|
||||
api = falcon.API()
|
||||
api.add_route('/add/computer', addComputer()) #Add computer
|
||||
api.add_route('/add/group', addGroup()) #Add group to the list of local groups
|
||||
@@ -584,6 +751,10 @@ api.add_route('/del/cookgrp', delCookGrp()) # Deassign cook from a group
|
||||
api.add_route('/del/emptypcsgroup', delEmptyPcsGroup()) # Delete all computers from a group
|
||||
api.add_route('/del/group', delGroup()) #Delete group
|
||||
api.add_route('/del/grpcomputer', delGrpComputer()) #Delete computer from a group
|
||||
api.add_route('/del/cook', delCook()) #Delete cook and all status about it
|
||||
api.add_route('/del/groupscook', delGroupsCook()) #Delete all groups of a cook
|
||||
api.add_route('/del/cleancook', delCleanCook()) #Delete status of a cook for all computers (Restart cook). No delete groups
|
||||
|
||||
api.add_route('/get/computerexists', getComputerExists()) #Returns 0 or 1 (name status)
|
||||
api.add_route('/get/computers', getComputers()) #Get list of computer
|
||||
api.add_route('/get/computersgrp', getComputersGrp()) #Get computers in a group
|
||||
@@ -602,8 +773,8 @@ api.add_route('/upd/cookname', updCookName()) #Update file name of cook and SQL
|
||||
api.add_route('/upd/group', updGroup()) #Update group name
|
||||
|
||||
|
||||
#api.add_route('/check/password', checkPassword()) #Check admin password
|
||||
#api.add_route('/upd/password', updPassword()) # Update password (Or create it not exists)
|
||||
api.add_route('/check/password', checkPassword()) #Check admin password
|
||||
api.add_route('/upd/password', updPassword()) # Update password (Or create it not exists)
|
||||
#api.add_route('/get/password', getPassword()) # Get password (Will be '' if password not exists)
|
||||
|
||||
class getApiVer(object):
|
||||
|
||||
Reference in New Issue
Block a user