async def unmute_members(self, guild, targets, *, reason="Mute time expired."): for target in targets: if self.mute_role in target.roles: role_ids = db.field( "SELECT RoleIDs FROM mutes WHERE UserID = ?", target.id) roles = [ guild.get_role(int(id_)) for id_ in role_ids.split(",") if role_ids and len(id_) ] db.execute("DELETE FROM mutes WHERE UserID = ?", target.id) await target.edit(roles=roles) embed = Embed(title="Member unmuted", colour=0xDD2222, timestamp=datetime.utcnow()) embed.set_thumbnail(url=target.avatar_url) fields = [("Member", target.display_name, False), ("Reason", reason, False)] for name, value, inline in fields: embed.add_field(name=name, value=value, inline=inline) await self.log_channel.send(embed=embed)
def userMessage(): "修改用户信息" uid=request.args.get("id",None) if request.method == "GET": g.title=u"修改信息" g.add=False dao=db.execute("select * from paas_account where id = %s limit 1"%(sqlDeal(uid))) g.obj=objToDict(dao.fetchone()) dao.close() return render_template("admin/userAdd.html") else: password=request.form.get("password",None) status=request.form.get("status",None) realname=request.form.get("realname",None) college=request.form.get("college",None) specialty=request.form.get("specialty",None) if password == "": args=map(sqlDeal,(status,realname,college,specialty,uid)) sql="update paas_account set status = '%s',realname = '%s',college = '%s',specialty='%s' where id = %s"%tuple(args) else: #加密密码 password=hashlib.md5(password).hexdigest() args=map(sqlDeal,(password,status,realname,college,specialty,uid)) sql="update paas_account set password = '******',status = '%s',realname = '%s',college = '%s',specialty='%s' where id = %s"%tuple(args) #修改用户信息 dao=db.execute(sql) dao.close() return redirect("/admin/userManager")
def startApp(aid): "启动app" #提取应用数据 sql = "select * from paas_app where id = %d limit 1" % (aid) dao = db.execute(sql) appData = objToDict(dao.first()) dao.close() baseObj = json.loads(getConfig("config")) data = getConfig("mainServer") data = data.replace("{{ appHost }}", appData['host']).replace( "{{ remoteSocket }}", appData['remoteSocket']).replace("{{ appId }}", str(aid)) #main_作为前缀 fp = open(baseObj['nginx']['confPath'] + "/main_" + str(aid) + ".conf", "w") fp.write(data) fp.close() #修改状态 sql = "update paas_app set status = 1 where id =%d" % (aid) dao = db.execute(sql) dao.close() #平滑重启服务器 reloadServer()
def init(): sleepSign=True sql="select * from paas_gitQueue limit 1" dao=db.execute(sql) obj=dao.first() if obj != None: sleepSign=False r=objToDict(obj) optionResult=deal(r) if optionResult: if r['executeSql'] != '': #执行回调sql dao2=db.execute(r['executeSql']) dao2.close() else: #发布失败 dao2=db.execute("update paas_app set status = 5 where id = %d"%(r['aid'])) dao2.close() sql="delete from paas_gitQueue where id = %d"%(r['id']) dao2=db.execute(sql) dao2.close() dao.close() if sleepSign: print 'sleep 1s' time.sleep(1)
def buildApp(aid,appHost,language): "生成一个应用" #请求应用服务器生成应用 #根据轮转算法选择服务器 dao=db.execute("select count(*) from paas_app") r=objToDict(dao.first()) dao.close() num=r['count(*)'] % len(config.REMOTE_SERVER_PHP) data={'language':language,'appHost':config.REMOTE_SERVER_PHP[num],'aid':str(aid)} result=urlPostWithToken(config.REMOTE_SERVER_PHP[num],"/servlet/buildApp",data) #在主服务器生成反向代理配置文件 obj=json.loads(result) if obj['result'] == "ok": buildMainServerConfig(aid,appHost,obj['remoteSocket']) #把远程服务器地址写入数据库 sql="update paas_app set remoteServer = '%s' ,remoteSocket = '%s' where id = %d"%(config.REMOTE_SERVER_PHP[num],obj['remoteSocket'],aid) dao=db.execute(sql) dao.close() return True else: return False
async def sell_item(self, ctx, category, item_user): user = ctx.author with open('./data/json/shop.json', 'r') as f: shop = load(f) with open('./data/json/inv.json', 'r') as f: inv = load(f) if category in shop: for items in shop[category]: price = items['price'] item_name = items['item_name'] item_id = items['name'] item_desc = items['desc.'] if item_user in item_id: if item_user in inv[str(user.id)]['inv']['item_id']: inv[str(user.id)]['inv']['item_name'].remove(item_name) inv[str(user.id)]['inv']['item_id'].remove(item_id) inv[str(user.id)]['inv']['item_desc'].remove(item_desc) db.execute( "UPDATE economy SET Wallet = Wallet + ? WHERE UserID = ?", price, user.id) await ctx.send(f'{item_name} sold successfully') with open('./data/json/inv.json', 'w') as f: dump(inv, f) return else: await ctx.send(f'{item_name} is not in your inventory') return else: await ctx.send(f'{item_user} not available in store') return
def develop(): "发布应用" #提取应用信息 aid=int(request.form.get("aid",None)) sql="select * from paas_app where id = %d limit 1"%(aid) dao=db.execute(sql) appData=objToDict(dao.first()) dao.close() #把任务交给后台队列 option=request.form.get("option",None) if option == "reboot": gitUrl="" command="cp" elif option == "develop": gitUrl=appData['gitUrl'] if git.checkLocationCode(aid): command="pull" else: command="clone" executeSql="update paas_app set status = 1 where id = %d"%(aid) #为了防止恶意不断请求操作应用,因此一段时间只保存一个操作 sql="delete from paas_gitQueue where aid = %d"%(aid) dao=db.execute(sql) dao.close() sql="insert into paas_gitQueue(aid,command,gitUrl,executeSql,appAccount,appGroup,appPath) values(%d,'%s','%s','%s','%s','%s','%s')"%(aid,command,gitUrl,sqlDeal(executeSql),appData['appAccount'],appData['appGroup'],appData['appPath']) dao=db.execute(sql) dao.close() return "ok"
def editApp(): "编辑应用" aid=request.args.get("id",None) if request.method == "GET": g.add=False sql="select * from paas_app where id = %s limit 1"%(sqlDeal(aid)) dao=db.execute(sql) g.obj=objToDict(dao.first()) dao.close() sql="select * from paas_account where status != 3" dao=db.execute(sql) g.users=map(objToDict,dao.fetchall()) dao.close() return render_template("admin/addApp.html") else: uid=request.form.get("uid",None) title=request.form.get("title",None) description=request.form.get("description",None) language=request.form.get("language",None) host=request.form.get("host",None) gitUrl=request.form.get("gitUrl",None) #处理git地址,防止注入恶意代码 gitUrl=gitUrl.replace(" ","") args=map(sqlDeal,[uid,title,description,language,host,gitUrl,aid]) sql="update paas_app set uid = '%s',title='%s',description='%s',language='%s',host='%s',gitUrl='%s' where id = %s"%tuple(args) dao=db.execute(sql) dao.close() return redirect("/admin/appManager")
async def unmute_members(self, ctx, targets, *, reason: str = 'Mute time expired.'): for target in targets: if self.mute_role in target.roles: role_ids = db.field("SELECT RoleIDs FROM mutes WHERE UserID = ?", target.id) roles = [ctx.guild.get_role(int(id_)) for id_ in role_ids.split(',') if len(id_)] db.execute("DELETE FROM mutes WHERE UserID = ?", target.id) await target.edit(roles=roles) embed = Embed( title='Member muted', colour=0xDD2222, timestamp=datetime.utcnow() ) embed.set_thumbnail(url=target.avatar_url) fields = [ ('Member', f'{target.name} a.k.a {target.display_name}', False), ('Actioned by', ctx.author.display_name, False), ('Reason', reason, False) ] for name, value, inline in fields: embed.add_field(name=name, value=value, inline=inline) await self.log_channel.send(embed=embed)
def startApp(aid): "启动app" #提取应用数据 sql="select * from paas_app where id = %d limit 1"%(aid) dao=db.execute(sql) appData=objToDict(dao.first()) dao.close() baseObj=json.loads(getConfig("config")) data=getConfig("mainServer") data=data.replace("{{ appHost }}",appData['host']).replace("{{ remoteSocket }}",appData['remoteSocket']).replace("{{ appId }}",str(aid)) #main_作为前缀 fp=open(baseObj['nginx']['confPath']+"/main_"+str(aid)+".conf","w") fp.write(data) fp.close() #修改状态 sql="update paas_app set status = 1 where id =%d"%(aid) dao=db.execute(sql) dao.close() #平滑重启服务器 reloadServer()
def buildApp(aid, appHost, language): "生成一个应用" #请求应用服务器生成应用 #根据轮转算法选择服务器 dao = db.execute("select count(*) from paas_app") r = objToDict(dao.first()) dao.close() num = r['count(*)'] % len(config.REMOTE_SERVER_PHP) data = { 'language': language, 'appHost': config.REMOTE_SERVER_PHP[num], 'aid': str(aid) } result = urlPostWithToken(config.REMOTE_SERVER_PHP[num], "/servlet/buildApp", data) #在主服务器生成反向代理配置文件 obj = json.loads(result) if obj['result'] == "ok": buildMainServerConfig(aid, appHost, obj['remoteSocket']) #把远程服务器地址写入数据库 sql = "update paas_app set remoteServer = '%s' ,remoteSocket = '%s' where id = %d" % ( config.REMOTE_SERVER_PHP[num], obj['remoteSocket'], aid) dao = db.execute(sql) dao.close() return True else: return False
async def change_prefix(self, ctx, new: str): if len(new) > 5: await ctx.send( 'Prefix can not be more than 5 characters in length.') else: db.execute('UPDATE guilds SET Prefix = ? WHERE GuildID = ?', new, ctx.guild.id) await ctx.send(f'Prefix set to {new}')
def addApp(): "添加应用" if request.method == "GET": g.add=True g.obj={} sql="select * from paas_account where status != 3" dao=db.execute(sql) g.users=map(objToDict,dao.fetchall()) dao.close() return render_template("admin/addApp.html") else: uid=request.form.get("uid",None) title=request.form.get("title",None) description=request.form.get("description",None) language=request.form.get("language",None) host=request.form.get("host",None) gitUrl=request.form.get("gitUrl",None) #处理git地址,防止注入恶意代码 gitUrl=gitUrl.replace(" ","") #添加应用信息 session=Session() obj=AppModel(title,description,uid,language,host,gitUrl,-1) session.add(obj) session.commit() #记录应用路径,用户,用户组 appUser,appGroup,appPath=client.getAppMessage(obj.id,sqlDeal(language)) sql="update paas_app set appAccount = '%s' , appGroup = '%s',appPath = '%s' where id = %d"%(appUser,appGroup,appPath,obj.id) dao=db.execute(sql) dao.close() #为应用创建一个数据库,但是静态环境不需要数据库 if language != "static": dbName=hashlib.md5(str(time.time())).hexdigest() username=hashlib.md5(uid+str(time.time())).hexdigest()[8:-8] password=hashlib.md5(title.encode("UTF-8")+str(time.time())).hexdigest() #建立数据库 buildDb(dbName,username,password) sql="insert into paas_db(uid,aid,dbName,username,password,host,port) values('%s','%s','%s','%s','%s','%s','%s')"%(sqlDeal(uid),str(obj.id),dbName,username,password,config.MYSQL_HOST,config.MYSQL_PORT) dao=db.execute(sql) dao.close() #初始化应用 client.buildApp(obj.id,sqlDeal(host),sqlDeal(language)) #生成apiKey和secretKey apiKey=hashlib.md5("apiKey_"+str(time.time())).hexdigest() secretKey=hashlib.md5("secretKey_"+str(time.time())).hexdigest() sql="insert into paas_app_token(aid,apiKey,secretKey) values('%s','%s','%s')"%(str(obj.id),apiKey,secretKey) dao=db.execute(sql) dao.close() return redirect("/admin/appManager")
async def on_member_join(self, member): db.execute("INSERT INTO exp (UserID) VALUES (?)", member.id) await self.bot.get_channel(785923224470290436).send( f'Wlcome to **{member.guild.name}** {member.mention}!') try: await member.send( f'Welcome to ***{member.guild.name}***! Enjoq your stay!') except Forbidden: pass
async def assignment_delete_command(self, ctx, name: str): embed = self.display_assignment("Deleted Assignment", ctx.author.id, name) try: db.execute("DELETE FROM assignments WHERE UserID = ? AND Name = ?", ctx.author.id, name) except: pass await ctx.send(embed=embed)
async def add_xp(self, message, xp, lvl): xp_to_add = randint(10, 20) new_lvl = int(((xp + xp_to_add) // 42) ** 0.55) db.execute("UPDATE exp SET XP = XP + ?, Level = ?, XPLock = ? WHERE UserID = ?", xp_to_add, new_lvl, (datetime.utcnow() + timedelta(seconds=60)).isoformat(), message.author.id) if new_lvl > lvl: await message.channel.send(f'Congrats {message.author.mention} - you reach level {new_lvl:,}!', delete_after=10)
async def assignment_delete_comand(self, ctx): try: db.execute( "DELETE FROM assignments WHERE UserID = ?", ctx.author.id, ) await ctx.send( f"All assignments for {ctx.author.name} have been deleted") except: await ctx.send("You do not have any assignments to delete")
async def assignment_add_command(self, ctx, name: str, due_date: str): db.execute( "INSERT INTO assignments (UserID, Name, DueDate) Values (?, ?, ?)", ctx.author.id, name, due_date, ) embed = self.display_assignment("Added Assignment", ctx.author.id, name) await ctx.send(embed=embed)
def update_completion_command(self, ctx, name: str, newState: str): due_date = db.record( "SELECT DueDate FROM assignments WHERE UserID = ? AND Name = ?", ctx.author.id, name) db.execute("UPDATE assignments SET Completed = ? WHERE Name = ?", newState, name) embed = Embed(title="Assignment's Completion Changed") embed.add_field(name=f"**{name}**", value=f"Due: {due_date[0]}\nCompleted: {newState}", inline=True) return embed
def write_to_db(location_bool, coordinates, ip_addr): if location_bool is None or coordinates is None or ip_addr is None: return elif not re.search("true|false|NULL", location_bool, re.I|re.M): logger.log("ERROR", str(location_bool) + " is not a known mode.") elif not re.search("\A\((\d|\-\d)+\.\d+,\s(\d|\-\d)+\.\d+\)|NULL", coordinates, re.M | re.I): logger.log("ERROR", "Improper coordinate format -> " + str(coordinates) + ".") elif not re.search("\A\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}$|NULL", ip_addr, re.M|re.I): logger.log("ERROR", "Improper ip address format -> " + str(ip_addr) + ".") else: coor = re.sub("[\(\)]", "", str(coordinates)) db.execute("insert into connected (location_bool, coordinates, ip_addr) values(\"" + str(location_bool) + "\", \"" + str(coor) + "\", \"" + str(ip_addr) + "\")") db.commit()
async def on_raw_reaction_add(self, payload): if self.bot.ready and payload.message_id == self.reaction_message.id: current_colours = filter(lambda r: r in self.colours.values(), payload.member.roles) await payload.member.remove_roles(*current_colours, reason='Colour role reaction') await payload.member.add_roles(self.colours[payload.emoji.name], reason='Colour role reaction') await self.reaction_message.remove_reaction(payload.emoji, payload.member) elif payload.message_id in (poll[1] for poll in self.polls): message = await self.bot.get_channel(payload.channel_id).fetch_message(payload.message_id) for reaction in message.reactions: if (not payload.member.bot and payload.member in await reaction.users().flatten() and reaction.emoji != payload.emoji.name): await message.remove_reaction(reaction.emoji, payload.member) elif payload.emoji.name == "⭐": message = await self.bot.get_channel(payload.channel_id).fetch_message(payload.message_id) if not message.author.bot and payload.member.id != message.author.id: msg_id, stars = db.record("SELECT StarMessageID, Stars FROM starboard WHERE RootMessageID = ?", message.id) or (None, 0) embed = Embed(title='Starred message', colour=message.author.colour, timestamp=datetime.utcnow()) fields = [ ('Author', message.author.mention, False), ('Content', message.content, False), ('Stars', stars + 1, False) ] for name, value, inline in fields: embed.add_field(name=name, value=value, inline=inline) if len(message.attachments): embed.set_image(url=message.attachments[0].url) if not stars: star_message = await self.starboard_channel.send(embed=embed) db.execute("INSERT INTO starboard (RootMessageID, StarMessageID) VALUES (?, ?)", message.id, star_message.id) else: star_message = await self.starboard_channel.fetch_message(msg_id) await star_message.edit(embed=embed) db.execute("UPDATE starboard SET Stars = Stars + 1 WHERE RootMessageID = ?", message.id) else: await message.remove_reaction(payload.emoji, payload.member)
def edit_date_command(self, ctx, name: str, newDate: str): completion = db.record( "SELECT DueDate, Completed FROM assignments WHERE UserID = ? AND Name = ?", ctx.author.id, name) db.execute("UPDATE assignments SET DueDate = ? WHERE Name = ?", newDate, name) embed = Embed(title="Assignment's Date Changed") embed.add_field(name=f"**{name}**", value=f"Due on {newDate}\nCompleted: {completion}", inline=True) return embed
def userManager(): "用户管理面板" sql = "select * from paas_account where status != 3 order by id desc" dao = db.execute(sql) g.lists = map(objToDict, dao.fetchall()) dao.close() return render_template("admin/userManager.html")
def getAppFromToken(apiKey,secretKey): "获取应用信息" sql="select aid from paas_app_token where apiKey = '%s' AND secretKey = '%s'"%(sqlDeal(apiKey),sqlDeal(secretKey)) dao=db.execute(sql) r=objToDict(dao.first()) dao.close() return r
def optionApp(option): "操作应用" aid = int(request.form.get("aid", None)) #防止操作别人的应用 sql = "select count(*) from paas_app where uid = %d" % (session['user']) dao = db.execute(sql) r = objToDict(dao.first()) dao.close() if r['count(*)'] == 0: return abort(403) if option == "start": #启动应用 client.startApp(aid) return "ok" elif option == "stop": #停止应用 client.stopApp(aid) return "ok" elif option == "reboot": #重启应用 client.developApp(aid, "reboot") return "ok" elif option == "develop": #部署应用 client.developApp(aid, "develop") return "ok"
def userAdd(): "添加用户" if request.method == "GET": g.add = True g.title = u"添加信息" g.obj = {} return render_template("admin/userAdd.html") else: username = request.form.get("username", None) password = request.form.get("password", None) status = request.form.get("status", None) realname = request.form.get("realname", None) college = request.form.get("college", None) specialty = request.form.get("specialty", None) #加密密码 password = hashlib.md5(password).hexdigest() #把用户写入数据库 args = map(sqlDeal, (username, password, status, realname, college, specialty)) sql = "insert into paas_account(username,password,status,realname,college,specialty) values('%s','%s','%s','%s','%s','%s')" % tuple( args) dao = db.execute(sql) dao.close() return redirect("/admin/userManager")
def deleteUser(): "删除用户" uid = request.args.get("id", None) sql = "update paas_account set status = 3 where id = " + sqlDeal(uid) dao = db.execute(sql) dao.close() return redirect("/admin/userManager")
def userAdd(): "添加用户" if request.method == "GET": g.add=True g.title=u"添加信息" g.obj={} return render_template("admin/userAdd.html") else: username=request.form.get("username",None) password=request.form.get("password",None) status=request.form.get("status",None) realname=request.form.get("realname",None) college=request.form.get("college",None) specialty=request.form.get("specialty",None) #加密密码 password=hashlib.md5(password).hexdigest() #把用户写入数据库 args=map(sqlDeal,(username,password,status,realname,college,specialty)) sql="insert into paas_account(username,password,status,realname,college,specialty) values('%s','%s','%s','%s','%s','%s')"%tuple(args) dao=db.execute(sql) dao.close() return redirect("/admin/userManager")
def index(): "主页面" g.apiHost=config.API_HOST sql="select paas_app_token.apiKey,paas_app_token.secretKey,paas_app.status,paas_app.id,paas_app.gitUrl,paas_app.host,paas_app.remoteServer,paas_app.title,paas_app.description,paas_app.language,paas_account.username from paas_app_token,paas_app,paas_account where paas_app.status != 4 AND paas_app.uid = paas_account.id AND paas_app_token.aid=paas_app.id AND paas_app.uid = %d order by paas_app.id desc"%(session['user']) dao=db.execute(sql) g.lists=map(objToDict,dao.fetchall()) #显示数据库信息 g.lists=map(client.getAppMysql,g.lists) dao.close() dao=db.execute("select * from paas_account where id = %d limit 1"%(session['user'])) g.user=objToDict(dao.first()) dao.close() return render_template("user/index.html")
def deleteUser(): "删除用户" uid=request.args.get("id",None) sql="update paas_account set status = 3 where id = "+sqlDeal(uid) dao=db.execute(sql) dao.close() return redirect("/admin/userManager")
def optionApp(option): "操作应用" aid=int(request.form.get("aid",None)) #防止操作别人的应用 sql="select count(*) from paas_app where uid = %d"%(session['user']) dao=db.execute(sql) r=objToDict(dao.first()) dao.close() if r['count(*)']==0: return abort(403) if option == "start": #启动应用 client.startApp(aid) return "ok" elif option == "stop": #停止应用 client.stopApp(aid) return "ok" elif option == "reboot": #重启应用 client.developApp(aid,"reboot") return "ok" elif option == "develop": #部署应用 client.developApp(aid,"develop") return "ok"
def deleteApp(): "删除应用" uid=request.args.get("id",None) sql="update paas_app set status = 4 where id = "+sqlDeal(uid) dao=db.execute(sql) dao.close() return redirect("/admin/appManager")
def userManager(): "用户管理面板" sql="select * from paas_account where status != 3 order by id desc" dao=db.execute(sql) g.lists=map(objToDict,dao.fetchall()) dao.close() return render_template("admin/userManager.html")
def developApp(aid,option): "部署应用,无论是不是第一次部署,主机不处理,逻辑交给应用服务器" #提取应用数据 sql="select * from paas_app where id = %d limit 1"%(aid) dao=db.execute(sql) appData=objToDict(dao.first()) dao.close() #部署过程走异步路线,所以只改变标志位 data={'option':option,'language':appData['language'],'appHost':appData['remoteServer'],'aid':appData['id']} result=urlPostWithToken(appData['remoteServer'],"/servlet/developApp",data) #修改状态 sql="update paas_app set status = 2 where id =%d"%(aid) dao=db.execute(sql) dao.close()
def getAppFromToken(apiKey, secretKey): "获取应用信息" sql = "select aid from paas_app_token where apiKey = '%s' AND secretKey = '%s'" % ( sqlDeal(apiKey), sqlDeal(secretKey)) dao = db.execute(sql) r = objToDict(dao.first()) dao.close() return r
async def show_balance(self, ctx, target: Optional[Member]): target = target or ctx.author wallet, bank = db.record( "SELECT Wallet, Bank FROM economy WHERE UserID = ?", target.id) or (None, None) if wallet is not None: pass else: db.execute("INSERT INTO economy (UserID) VALUES (?)", target.id) wallet, bank = db.record( f"SELECT Wallet, Bank FROM economy WHERE UserID = ?", target.id) wallet_embed = Embed(title="ECONOMY", timestamp=datetime.utcnow()) wallet_embed.add_field(name=f"{target.display_name}'s Economy", value=f"Wallet: {wallet:,} \n Bank: {bank:, }", inline=False) await ctx.send(embed=wallet_embed)
def buildDb(dbName, username, password): "新建一个数据库" try: #创建数据库 sql = "create database %s" % (dbName) dao = db.execute(sql) dao.close() #创建用户 sql = "CREATE USER %s IDENTIFIED BY '%s'" % (username, password) dao = db.execute(sql) dao.close() #用户授权 sql = "GRANT ALL ON %s.* TO %s" % (dbName, username) dao = db.execute(sql) dao.close() return True except: return False
def buildDb(dbName,username,password): "新建一个数据库" try: #创建数据库 sql="create database %s"%(dbName) dao=db.execute(sql) dao.close() #创建用户 sql="CREATE USER %s IDENTIFIED BY '%s'"%(username,password) dao=db.execute(sql) dao.close() #用户授权 sql="GRANT ALL ON %s.* TO %s"%(dbName,username) dao=db.execute(sql) dao.close() return True except: return False
def index(): "主页面" g.apiHost = config.API_HOST sql = "select paas_app_token.apiKey,paas_app_token.secretKey,paas_app.status,paas_app.id,paas_app.gitUrl,paas_app.host,paas_app.remoteServer,paas_app.title,paas_app.description,paas_app.language,paas_account.username from paas_app_token,paas_app,paas_account where paas_app.status != 4 AND paas_app.uid = paas_account.id AND paas_app_token.aid=paas_app.id AND paas_app.uid = %d order by paas_app.id desc" % ( session['user']) dao = db.execute(sql) g.lists = map(objToDict, dao.fetchall()) #显示数据库信息 g.lists = map(client.getAppMysql, g.lists) dao.close() dao = db.execute("select * from paas_account where id = %d limit 1" % (session['user'])) g.user = objToDict(dao.first()) dao.close() return render_template("user/index.html")
def api(): "Ajax Api" g.apiHost=config.API_HOST sql="select paas_app.status,paas_app.id,paas_app.title,paas_app.language,paas_account.username from paas_app_token,paas_app,paas_account where paas_app.status != 4 AND paas_app.uid = paas_account.id AND paas_app_token.aid=paas_app.id AND paas_app.uid = %d order by paas_app.id desc"%(session['user']) dao=db.execute(sql) obj=map(objToDict,dao.fetchall()) dao.close() return json.dumps(obj)
def api(): "Ajax Api" g.apiHost = config.API_HOST sql = "select paas_app.status,paas_app.id,paas_app.title,paas_app.language,paas_account.username from paas_app_token,paas_app,paas_account where paas_app.status != 4 AND paas_app.uid = paas_account.id AND paas_app_token.aid=paas_app.id AND paas_app.uid = %d order by paas_app.id desc" % ( session['user']) dao = db.execute(sql) obj = map(objToDict, dao.fetchall()) dao.close() return json.dumps(obj)
def appMessage(apiKey, secretKey): "获取应用状态" r = getAppFromToken(apiKey, secretKey) sql = "select * from paas_app where id = %d limit 1" % (r['aid']) dao = db.execute(sql) obj = objToDict(dao.first()) dao.close() obj['createTime'] = obj['createTime'].strftime("%Y-%m-%d") return jsonify(obj)
def appMessage(apiKey,secretKey): "获取应用状态" r=getAppFromToken(apiKey,secretKey) sql="select * from paas_app where id = %d limit 1"%(r['aid']) dao=db.execute(sql) obj=objToDict(dao.first()) dao.close() obj['createTime']=obj['createTime'].strftime("%Y-%m-%d") return jsonify(obj)
def editApp(): "编辑应用" aid = request.args.get("id", None) sql = "select * from paas_app where id = %s limit 1" % (sqlDeal(aid)) dao = db.execute(sql) g.obj = objToDict(dao.first()) dao.close() if request.method == "GET": g.add = False sql = "select * from paas_account where status != 3" dao = db.execute(sql) g.users = map(objToDict, dao.fetchall()) dao.close() return render_template("admin/addApp.html") else: uid = request.form.get("uid", None) title = request.form.get("title", None) description = request.form.get("description", None) host = request.form.get("host", None) gitUrl = request.form.get("gitUrl", None) #处理git地址,防止注入恶意代码 gitUrl = gitUrl.replace(" ", "") args = map(sqlDeal, [uid, title, description, host, gitUrl, aid]) sql = "update paas_app set uid = '%s',title='%s',description='%s',host='%s',gitUrl='%s' where id = %s" % tuple( args) dao = db.execute(sql) dao.close() #修改配置文件,防止修改域名后nginx配置文件不一致 obj = g.obj webApp.buildMainServerConfig(obj['id'], obj['host'], obj['remoteSocket']) return redirect("/admin/appManager")
async def mute_members(self, message, targets, hours, reason): unmutes = [] for target in targets: if self.mute_role not in target.roles: if message.guild.me.top_role.position > target.top_role.position: role_ids = '.'.join([str(r.id) for r in target.roles]) end_time = datetime.utcnow() + timedelta(seconds=hours) if hours else None db.execute("INSERT INTO mutes VALUES (?, ?, ?)", target.id, role_ids, getattr(end_time, 'isogormat', lambda: None)()) await target.edit(roles=[self.mute_role]) embed = Embed( title='Member muted', colour=0xDD2222, timestamp=datetime.utcnow() ) embed.set_thumbnail(url=target.avatar_url) fields = [ ('Member', f'{target.name} a.k.a {target.display_name}', False), ('Actioned by', message.author.display_name, False), ('Reason', reason, False) ] for name, value, inline in fields: embed.add_field(name=name, value=value, inline=inline) await self.log_channel.send(embed=embed) if hours: unmutes.append(target) else: await message.channel.send(f'{target.display_name} could not be muted.') else: await message.channel.send(f'{target.display_name} is already muted.') return unmutes
def appManager(): "应用管理面板" g.apiHost=config.API_HOST sql="select paas_app.status, paas_app_token.apiKey,paas_app_token.secretKey,paas_app.id,paas_app.gitUrl,paas_app.host,paas_app.remoteServer,paas_app.title,paas_app.description,paas_app.language,paas_account.username from paas_app_token,paas_app,paas_account where paas_app.status != 4 AND paas_app.uid = paas_account.id AND paas_app_token.aid=paas_app.id order by paas_app.id desc" dao=db.execute(sql) g.lists=map(objToDict,dao.fetchall()) g.lists=map(client.getAppMysql,g.lists) dao.close() return render_template("admin/appManager.html")
def read_from_db(column): query = db.execute("select * from connected") for row in query: if column == 'location_bool' and row[1] is not None: return str(row[1]) elif column == 'coordinates' and row[2] is not None: return str(row[2]) elif column == 'ip_addr' and row[3] is not None: return str(row[3]) else: logger.log("ERROR", "Not a known column or DB is empty.") return
def deleteApp(): "删除应用" aid = request.args.get("id", None) #删除应用前停止运行 client.stopApp(int(aid.encode("UTF-8"))) sql = "update paas_app set status = 4 where id = " + sqlDeal(aid) dao = db.execute(sql) dao.close() return redirect("/admin/appManager")
def appManager(): "应用管理面板" g.apiHost = config.API_HOST sql = "select paas_app.status, paas_app_token.apiKey,paas_app_token.secretKey,paas_app.id,paas_app.gitUrl,paas_app.host,paas_app.remoteServer,paas_app.title,paas_app.description,paas_app.language,paas_account.username from paas_app_token,paas_app,paas_account where paas_app.status != 4 AND paas_app.uid = paas_account.id AND paas_app_token.aid=paas_app.id order by paas_app.id desc" dao = db.execute(sql) g.lists = map(objToDict, dao.fetchall()) g.lists = map(client.getAppMysql, g.lists) dao.close() return render_template("admin/appManager.html")
def stopApp(aid): "停止app" baseObj=json.loads(getConfig("config")) path=baseObj['nginx']['confPath']+"/main_"+str(aid)+".conf" if os.path.exists(path): os.remove(path) #修改状态 sql="update paas_app set status = 3 where id =%d"%(aid) dao=db.execute(sql) dao.close() #平滑重启服务器 reloadServer()
def deleteApp(): "删除应用" aid=request.args.get("id",None) #删除应用前停止运行 client.stopApp(int(aid.encode("UTF-8"))) sql="update paas_app set status = 4 where id = "+sqlDeal(aid) dao=db.execute(sql) dao.close() return redirect("/admin/appManager")
def getAppMysql(obj): "获取应用的数据库信息" if obj['language'] == "static": return obj sql="select username as dbUsername,password as dbPassword,dbName,host as dbHost,port as dbPort from paas_db where aid = "+str(obj['id']) dao=db.execute(sql) lists=objToDict(dao.first()) dao.close() for key in lists: obj[key]=lists[key] return obj
def buildApp(): "创建应用" try: aid=request.form.get("aid",None) appHost=request.form.get("appHost",None) language=request.form.get("language",None) #确定应用端口号 dao=db.execute("select count(*) from paas_app where remoteServer = '%s'"%(appHost)) r=objToDict(dao.first()) dao.close() appPort=10001+int(r['count(*)']) buildServerConfig(aid,appHost,appPort,language) return json.dumps({"result":"ok","remoteSocket":"http://"+appHost+":"+str(appPort)}) except: return json.dumps({"result":"fail"})
def account(): "用户请登录" if request.method == "GET": return render_template("user/account.html") else: username=request.form.get("username",None) password=hashlib.md5(request.form.get("password",None)).hexdigest() sql="select * from paas_account where username = '******' AND password = '******' limit 1"%(sqlDeal(username),sqlDeal(password)) dao=db.execute(sql) obj=dao.first() if obj != None: obj=objToDict(obj) session['user']=obj['id'] r=True else: r=False dao.close() if r: return redirect("/user/") else: return redirect("/user/account")
def update_db(column,value): if column is None or value is None: return try: if read_from_db('location_bool') is None or read_from_db('coordinates') is None or read_from_db('ip_addr') is None: logger.log("ERROR", "You must write to the database first before updating!") return elif re.search("true|false", value, re.I|re.M) and column == 'location_bool': db.execute("update connected set location_bool = \"" + value + "\"") db.commit() elif re.search("\A(\d|\-\d)+\.\d+,\s(\d|\-\d)+\.\d+", value, re.M | re.I) and column == 'coordinates': db.execute("update connected set coordinates = \"" + value + "\"") db.commit() elif re.search("\A\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}$", value, re.M|re.I) and column == 'ip_addr': db.execute("update connected set ip_addr = \"" + value + "\"") db.commit() else: logger.log("ERROR", str(column) + " is not a known column for the connected table in the imagecapture db.") return except sqlite3.OperationalError: logger.log("ERROR", "The database is lock, could not add coordinates to DB.")