mirror of
https://gitlab.com/JKANetwork/powerfulcomputermanager.git
synced 2026-02-20 12:11:30 +01:00
First version with web gui
This commit is contained in:
275
admin/admin.py
Normal file
275
admin/admin.py
Normal file
@@ -0,0 +1,275 @@
|
||||
#!/usr/bin/python3
|
||||
from flask import Flask, url_for, render_template, request, Response,redirect,make_response
|
||||
import os
|
||||
import jinja2
|
||||
import requests
|
||||
import hashlib #SHA256
|
||||
import json
|
||||
import base64
|
||||
import configparser
|
||||
from datetime import datetime
|
||||
from requests.packages.urllib3.exceptions import InsecureRequestWarning
|
||||
|
||||
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
|
||||
|
||||
BUILD=1
|
||||
APIC_VER=2
|
||||
|
||||
# Load config to comunicate with API or use default
|
||||
try:
|
||||
config = configparser.ConfigParser()
|
||||
config.read(os.path.relpath('..\\client\\configpcm.ini'))
|
||||
c_server = config['General']['server']
|
||||
except:
|
||||
c_server = "https://127.0.0.1:3333" #Default server api address
|
||||
|
||||
app = Flask(__name__,static_url_path="/assets", static_folder='assets', template_folder="templates")
|
||||
|
||||
|
||||
def returnvalueapi(suburl,field="Name"):
|
||||
global c_server
|
||||
passha256=request.cookies.get('admin_logued')
|
||||
if 'Password=' in suburl:
|
||||
twopart = ""
|
||||
elif '?' in suburl:
|
||||
twopart = '&Password='+str(passha256)
|
||||
else:
|
||||
twopart = '?Password='+str(passha256)
|
||||
|
||||
r=(requests.post(c_server+suburl+twopart, verify=False).text).replace("\'", "\"").replace('\\"',"'").replace(': None',': "None"')
|
||||
try:
|
||||
#print(suburl+twopart+"->"+r)
|
||||
jsonobj = json.loads(r)
|
||||
return jsonobj[field]
|
||||
except:
|
||||
print('Error: '+str(r))
|
||||
return str({'TEXT':r,'RESULT':'ERROR'})
|
||||
|
||||
def returnTable(suburl,field=["Name"]):
|
||||
global c_server
|
||||
passha256=request.cookies.get('admin_logued')
|
||||
if isinstance(field,str):
|
||||
if field != 'ASIS': # Do not touch if it says that we have to return table AS IS
|
||||
field=[field] # Convert to list
|
||||
if 'Password=' in suburl:
|
||||
twopart = ""
|
||||
elif '?' in suburl:
|
||||
twopart = '&Password='+str(passha256)
|
||||
else:
|
||||
twopart= '?Password='+str(passha256)
|
||||
try:
|
||||
r=(requests.post(c_server+suburl+twopart, verify=False).text).replace("\'", "\"").replace('\\"',"'").replace(': None',': "None"')
|
||||
jsonobj = json.loads(r)
|
||||
if field == 'ASIS':
|
||||
return jsonobj
|
||||
else:
|
||||
listitems = []
|
||||
for ite in jsonobj: # Run in array from json
|
||||
to = []
|
||||
for i in field:
|
||||
to.append(str(ite[i]))
|
||||
listitems.append(to)
|
||||
return listitems
|
||||
except:
|
||||
return None
|
||||
|
||||
|
||||
@app.route("/admin",methods=['GET'])
|
||||
@app.route("/admin/",methods=['GET'])
|
||||
def pAdminIndex(): #Admin Index page
|
||||
if returnvalueapi('/check/password?Password='+str(request.cookies.get('admin_logued')),'EXITCODE') != '0':
|
||||
return render_template('/login.tmpl', title="Login")
|
||||
table = returnTable("/get/computers",['ID_C','Name','RAM','CPUName','SOVersion','SOCaption','HDD','LastConnection','RAMFree'])
|
||||
|
||||
for lista in table:
|
||||
lista.append(returnTable("/get/groups?ComputerID="+lista[0],["Name"])) #lista[9]¿
|
||||
if lista[6] is not None:
|
||||
try:
|
||||
lista[6]=json.loads(base64.b64decode(lista[6]).decode('UTF-8'))
|
||||
except:
|
||||
lista[6]=json.loads(str("{}"))
|
||||
else:
|
||||
lista[6]=json.loads(str("{}"))
|
||||
#print (lista[6])
|
||||
try:
|
||||
lista[7] = datetime.fromtimestamp(int(lista[7])).strftime('%Y-%m-%d %H:%M:%S') # LastConnection
|
||||
except:
|
||||
lista[7] = "Never"
|
||||
return render_template('/adminindex.tmpl', title="Admin Dashboard",tablecomputers=table)
|
||||
|
||||
@app.route("/admin/addcomputer",methods=['GET'])
|
||||
def pAdminAddcomputer():
|
||||
computeradd=request.args.get('computeradd')
|
||||
if computeradd is not None:
|
||||
r = returnvalueapi("/add/computer?ComputerName="+computeradd,field="RESULT")
|
||||
if r == "OK":
|
||||
return redirect('/admin')
|
||||
else:
|
||||
return "ERROR"
|
||||
else:
|
||||
return redirect('/admin')
|
||||
|
||||
@app.route("/admin/delcomputer",methods=['GET'])
|
||||
def pAdminDelcomputer():
|
||||
computerdel=request.args.get('computerdel')
|
||||
r = returnvalueapi("/del/computer?ComputerID="+computerdel,field="RESULT")
|
||||
if r == "OK":
|
||||
return redirect('/admin')
|
||||
else:
|
||||
return "ERROR"
|
||||
|
||||
@app.route("/admin/computer",methods=['GET'])
|
||||
def pAdminComputer(): #Admin see one group
|
||||
if returnvalueapi('/check/password?Password='+str(request.cookies.get('admin_logued')),'EXITCODE') != '0':
|
||||
return render_template('/login.tmpl', title="Login")
|
||||
|
||||
computerid=request.args.get('ID_C')
|
||||
if computerid is not None and computerid.isnumeric():
|
||||
computername = returnvalueapi('/get/computers?ComputerID='+str(computerid),"Name")
|
||||
groups = returnTable("/get/groups?ComputerName="+str(computername),['ID_G','Name'])
|
||||
#####IT DOESNT HAVE TEMPLATE CREATED
|
||||
return render_template('/admincomputer.tmpl', title="Computer "+computername,computerid=computerid,computername=computername,groups=groups)
|
||||
return redirect('/admin')
|
||||
|
||||
|
||||
@app.route("/admin/groups",methods=['GET'])
|
||||
def pAdminGroups(): #Admin Index groups
|
||||
if returnvalueapi('/check/password?Password='+str(request.cookies.get('admin_logued')),'EXITCODE') != '0':
|
||||
return render_template('/login.tmpl', title="Login")
|
||||
table = returnTable("/get/groups",['ID_G','Name'])
|
||||
|
||||
for lista in table:
|
||||
lista.append(returnTable("/get/computersgrp?GroupID="+lista[0],['ID_C','Name'])) #lista[3]¿
|
||||
lista.append(returnTable("/get/cookgrp?GroupID="+lista[0],['CookName'])) #lista[4]¿
|
||||
return render_template('/admingroups.tmpl', title="Groups",tablegroups=table)
|
||||
|
||||
|
||||
@app.route("/admin/group",methods=['GET'])
|
||||
def pAdminGroup(): #Admin see one group
|
||||
if returnvalueapi('/check/password?Password='+str(request.cookies.get('admin_logued')),'EXITCODE') != '0':
|
||||
return render_template('/login.tmpl', title="Login")
|
||||
|
||||
groupid=request.args.get('ID_G')
|
||||
if groupid is not None and groupid.isnumeric():
|
||||
groupname=returnvalueapi('/get/groups?GroupID='+str(groupid),"Name")
|
||||
computers = returnTable("/get/computers",['ID_C','Name'])
|
||||
datagroup = (returnTable("/get/computersgrp?GroupID="+groupid,['ID_C','Name'])) #lista[0]¿
|
||||
tem = (returnTable("/get/cookgrp?GroupID="+groupid,['CookName'])) #lista[1]¿
|
||||
cooksdata = []
|
||||
for cook in tem:
|
||||
to = []
|
||||
to.append(cook[0])
|
||||
to.append(returnvalueapi('/get/lastrevisioncook?CookName='+cook[0],"Revision"))
|
||||
to.append(returnTable("/get/statuscook?CookName="+cook[0],'ASIS'))
|
||||
cooksdata.append(to)
|
||||
|
||||
tem = (returnTable("/get/cookall",'ASIS')) #Lista de todas las recetas
|
||||
allcooks = []
|
||||
for cook in tem['CookName']:
|
||||
to = []
|
||||
to.append(cook)
|
||||
to.append(returnvalueapi('/get/lastrevisioncook?CookName='+cook,"Revision"))
|
||||
allcooks.append(to)
|
||||
|
||||
return render_template('/admingroup.tmpl', title="Group "+groupname,groupname=groupname,groupid=groupid,datagroup=datagroup,cooksdata=cooksdata,computers=computers,allcooks=allcooks)
|
||||
return redirect('/admin/groups')
|
||||
|
||||
@app.route("/admin/group/addcook",methods=['GET'])
|
||||
def pAdminGroupAddcook(): #Add cook form enter
|
||||
cooktoadd=request.args.get('cooknameadd')
|
||||
groupid=request.args.get('groupid')
|
||||
if cooktoadd != None and groupid != None:
|
||||
r = returnvalueapi("/add/cookgrp?CookName="+cooktoadd+"&GroupID="+groupid,field="RESULT")
|
||||
if r == "OK":
|
||||
return redirect('/admin/group?ID_G='+groupid)
|
||||
|
||||
|
||||
@app.route("/admin/group/addcomputer",methods=['GET'])
|
||||
def pAdminGroupAddcomputer(): #Add computer form enter
|
||||
computertoadd=request.args.get('computeridadd')
|
||||
groupid=request.args.get('groupid')
|
||||
if computertoadd != None and groupid != None:
|
||||
r = returnvalueapi("/add/grpcomputer?ComputerID="+computertoadd+"&GroupID="+groupid,field="RESULT")
|
||||
if r == "OK":
|
||||
return redirect('/admin/group?ID_G='+groupid)
|
||||
|
||||
|
||||
@app.route("/admin/group/delcomputer",methods=['GET'])
|
||||
def pAdminGroupDelcomputer(): #Add computer form enter
|
||||
computertodel=request.args.get('computernamedel')
|
||||
groupid=request.args.get('groupid')
|
||||
if computertodel != None and groupid != None:
|
||||
r = returnvalueapi("/del/grpcomputer?ComputerName="+computertodel+"&GroupID="+groupid,field="RESULT")
|
||||
if r == "OK":
|
||||
return redirect('/admin/group?ID_G='+groupid)
|
||||
else:
|
||||
return redirect('/admin/group?ID_G='+groupid)
|
||||
|
||||
|
||||
@app.route("/admin/cook",methods=['GET'])
|
||||
def pAdminCook(): #Admin Index groups
|
||||
if returnvalueapi('/check/password?Password='+str(request.cookies.get('admin_logued')),'EXITCODE') != '0':
|
||||
return render_template('/login.tmpl', title="Login")
|
||||
|
||||
cookname=request.args.get('CookName')
|
||||
if cookname != None:
|
||||
groupscook=returnTable('/get/grpcook?CookName='+str(cookname),['Name'])
|
||||
allgroups=returnTable('/get/groups',['ID_G','Name'])
|
||||
return render_template('/admincook.tmpl', title="Cook "+cookname,cookname=cookname,allgroups=allgroups,groupscook=groupscook)
|
||||
|
||||
@app.route("/admin/cook/addgroup",methods=['GET'])
|
||||
def pAdminCookAddgroup(): # Add cook to group
|
||||
if returnvalueapi('/check/password?Password='+str(request.cookies.get('admin_logued')),'EXITCODE') != '0':
|
||||
return render_template('/login.tmpl', title="Login")
|
||||
cookname=request.args.get('cooknameadd')
|
||||
groupid=request.args.get('groupidadd')
|
||||
if cookname != None and groupid != None:
|
||||
returnvalueapi('/add/cookgrp?CookName='+cookname+'&GroupID='+groupid,'RESULT')
|
||||
return redirect('/admin/cook?CookName='+cookname)
|
||||
else:
|
||||
return "Error of arguments"
|
||||
|
||||
@app.route("/admin/cook/delgroup",methods=['GET'])
|
||||
def pAdminCookDelgroup(): # Add cook to group
|
||||
if returnvalueapi('/check/password?Password='+str(request.cookies.get('admin_logued')),'EXITCODE') != '0':
|
||||
return render_template('/login.tmpl', title="Login")
|
||||
cookname=request.args.get('cooknamedel')
|
||||
groupname=request.args.get('groupnamedel')
|
||||
if cookname != None and groupname != None:
|
||||
ret = returnvalueapi('/del/cookgrp?CookName='+cookname+'&GroupName='+groupname,'RESULT')
|
||||
if ret != '0':
|
||||
return "Error "+str(ret)
|
||||
return redirect('/admin/cook?CookName='+cookname)
|
||||
else:
|
||||
return "Error of arguments"
|
||||
|
||||
|
||||
|
||||
@app.route("/",methods=['GET'])
|
||||
def pIndex(): #Index page
|
||||
howispasswd=returnvalueapi('/check/password?Password='+str(request.cookies.get('admin_logued')),'EXITCODE')
|
||||
if howispasswd == '0': # Logued
|
||||
return redirect(url_for('pAdminIndex'))
|
||||
if howispasswd == '1' or howispasswd == '2': # Has to login
|
||||
return render_template('/login.tmpl')
|
||||
if howispasswd == '3': # No password yet
|
||||
return 'Yet to do it..'
|
||||
|
||||
@app.route("/login",methods=['GET','POST'])
|
||||
def pLogin(): #Login
|
||||
if request.values.get('password'):
|
||||
trpass = hashlib.sha256(request.values.get('password').encode()).hexdigest()
|
||||
#print(returnvalueapi('/check/password?Password='+trpass,'EXITCODE'))
|
||||
if returnvalueapi('/check/password?Password='+trpass,'EXITCODE') == '0':
|
||||
res = make_response(redirect(url_for('pAdminIndex')))
|
||||
res.set_cookie("admin_logued",value=trpass)
|
||||
return res
|
||||
else:
|
||||
return render_template('/login.tmpl')
|
||||
else:
|
||||
return render_template('/login.tmpl')
|
||||
|
||||
print("Build: "+str(BUILD))
|
||||
print("API Client Compatible Version: "+str(APIC_VER))
|
||||
|
||||
app.run(debug=True,port=3434,ssl_context='adhoc',host='0.0.0.0',threaded=True) #Default is port 3434
|
||||
Reference in New Issue
Block a user