示例#1
0
文件: MOD.py 项目: Eros-Kad/MandoBot
    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)
示例#2
0
文件: admin.py 项目: linjinxin/paas
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")
示例#3
0
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()
示例#4
0
文件: git.py 项目: vipsql/paas
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)
示例#5
0
文件: client.py 项目: linjinxin/paas
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
示例#6
0
    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
示例#7
0
文件: servlet.py 项目: vipsql/paas
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"
示例#8
0
文件: admin.py 项目: linjinxin/paas
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")
示例#9
0
    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)
示例#10
0
文件: client.py 项目: linjinxin/paas
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()
示例#11
0
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
示例#12
0
 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}')
示例#13
0
文件: admin.py 项目: vipsql/paas
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")   
示例#14
0
 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
示例#15
0
    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)
示例#16
0
    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)
示例#17
0
    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")
示例#18
0
    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)
示例#19
0
    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
示例#20
0
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()
示例#21
0
    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)
示例#22
0
    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
示例#23
0
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")
示例#24
0
文件: api.py 项目: linjinxin/paas
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
示例#25
0
文件: user.py 项目: yubang/paas
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"
示例#26
0
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")
示例#27
0
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")
示例#28
0
文件: admin.py 项目: linjinxin/paas
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") 
示例#29
0
文件: user.py 项目: linjinxin/paas
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")
示例#30
0
文件: admin.py 项目: linjinxin/paas
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")
示例#31
0
文件: user.py 项目: linjinxin/paas
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"
示例#32
0
文件: admin.py 项目: linjinxin/paas
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")
示例#33
0
文件: admin.py 项目: linjinxin/paas
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")
示例#34
0
文件: client.py 项目: linjinxin/paas
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()
示例#35
0
文件: api.py 项目: yubang/paas
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
示例#36
0
    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)
示例#37
0
文件: dbManager.py 项目: yubang/paas
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
示例#38
0
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
示例#39
0
文件: user.py 项目: yubang/paas
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")
示例#40
0
文件: user.py 项目: vipsql/paas
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)
示例#41
0
文件: user.py 项目: yubang/paas
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)
示例#42
0
文件: api.py 项目: yubang/paas
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)
示例#43
0
文件: api.py 项目: linjinxin/paas
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)
示例#44
0
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")
示例#45
0
    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
示例#46
0
文件: admin.py 项目: linjinxin/paas
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")
示例#47
0
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
示例#48
0
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")
示例#49
0
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")
示例#50
0
文件: client.py 项目: linjinxin/paas
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()
示例#51
0
文件: admin.py 项目: vipsql/paas
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")
示例#52
0
文件: client.py 项目: linjinxin/paas
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
示例#53
0
文件: servlet.py 项目: vipsql/paas
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"})
示例#54
0
文件: user.py 项目: linjinxin/paas
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")
示例#55
0
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.")