Пример #1
0
def remove_token():
    #支持两种判断方式 输入邮箱token后验证
    #通过邮件里的check标志验证
    mail = request.args.get('mail')
    token = request.args.get('token')
    check = request.args.get('check')

    if mail and token:

        res = database().remove_token(global_config.engine, {
            "mail": mail,
            "token": token
        })
        if res:
            return format_response('ok', '密钥删除成功')
        else:
            return format_response('error', '密钥删除失败')

    elif mail and check:
        res = database().remove_token(global_config.engine, {
            "mail": mail,
            "check": check
        })
        if res:
            return format_response('ok', '密钥删除成功')
        else:
            return format_response('error', '密钥删除失败')

    else:
        return format_response('error', '密钥删除失败,信息不全')
Пример #2
0
def image_delete():
    #根据图片的唯一ID删除对应的文件
    data = request.json
    if "namaelist" in data.keys():
        database().delete_many(global_config.engine,'image',data["namelist"])
        return format_response('ok', '文件删除成功')

    elif "name" in data.keys():
        database().delete(global_config.engine,'image',data["name"])
        return format_response('ok','文件删除成功')
Пример #3
0
def image_list():
    #支持按需获取图片列表 用于前端的懒加载
    try:
        token = request.args.get('token')
        if request.args.get('page'):
            #分页情况
            #默认从第一页开始
            if global_config.engine == 'sqlite':
                try:
                    # pages = count_page(all,global_config.image_page)
                    p = Image.query.paginate(1, 10)
                    #暂未实现
                    return format_response('ok', 10)

                except:
                    return format_response('error', '获取图片列表错误')
            else:
                pass

        else:
            #默认返回全部图片列表
            #包含图片总数,计算得到的图片分页数
            g.data = []
            mail = database().get(global_config.engine, 'token', token)
            if mail:
                #仅获取当前用户下的图片列表
                if global_config.engine == 'sqlite':
                    img_list = database().get_image_list(
                        global_config.engine, mail)
                    for i in img_list:
                        g.data.append(i.info())

                elif global_config.engine == 'mongo':
                    img_list = database().get_image_list(
                        global_config.engine, mail)
                    for i in img_list:
                        g.data.append({
                            "name": i["name"],
                            "path": i["path"],
                            "url": i["url"]
                        })

                else:
                    pass
            else:
                pass
            return format_response('ok', g.data)

    except Exception as e:
        print((e.args))
        return format_response('error', '图片列表加载失败')
Пример #4
0
def get_check(address):
    #生成临时check标志,针对本身不存在的账户生成空信息
    #存在
    check = str(time.time())
    database().update_token(global_config.engine, {
        "address": address,
        "check": check
    })

    #请在地址栏填写本站点运行的域名,或者在flask_config里修改server_name参数
    server_name = current_app.config['SERVER_NAME'] if current_app.config[
        'SERVER_NAME'] else 'localhost:{}'.format(global_config.port)

    return 'http://{}/api/remove_token?mail={}&check={}'.format(
        server_name, address, check)
def update(data):
    try:
        body = json.loads(data)

        if body:
            response = body.get('response')
            _id = body.get('id')

            if not response:
                print('A RESPONSE não foi informada')

            conn = None
            try:
                params = database()
                conn = psycopg2.connect(**params)
                cur = conn.cursor()

                query = "UPDATE tb_tj_sp SET response = %s WHERE id = %s"
                cur.execute(query, (response, _id))
                conn.commit()
                cur.close()

                print('O id {} foi atualizado com sucesso'.format(_id))

            except (Exception, psycopg2.DatabaseError) as error:
                print(
                    'Erro ao conectar com o banco de dados: {} '.format(error))
            finally:
                if conn is not None:
                    conn.close()
        else:
            print('Nenhum dado foi fornecido')

    except JSONDecodeError as error:
        print('Os dados informados não é do tipo JSON válido')
Пример #6
0
    def get(self, _id):
        conn = None
        try:
            params = database()
            conn = psycopg2.connect(**params)
            cur = conn.cursor()

            query = "SELECT id, name, response, date FROM tb_tj_sp WHERE id = %s"
            cur.execute(query, (int(_id), ))
            data = cur.fetchone()

            obj = {
                'id': data[0],
                'name': data[1],
                'response': json.loads(data[2]),
                'datetime': data[3].isoformat()
            }

            cur.close()

            return self.send_response('', obj, False, 200)

        except (Exception, psycopg2.DatabaseError) as error:
            return self.send_response('', str(error), True,
                                      HTTPStatus.INTERNAL_SERVER_ERROR)
        finally:
            if conn is not None:
                conn.close()
Пример #7
0
def mail_to(address):
    HOST = current_app.config["MAIL_HOST"]
    PORT = current_app.config['MAIL_PORT']
    USER = current_app.config['MAIL_USER']
    PASS = current_app.config['MAIL_PASS']

    sender = USER
    receiver = address

    t = database().get_token(global_config.engine, address)
    if t:
        token = t
        #生成check标志

        link = get_check(address)
        message = MIMEText(
            '请妥善保管你的认证密钥\n{},如果你的邮箱没有在本站点注册很抱歉打扰您,请点击以下链接删除您的账户,{}'.format(
                token, link), 'plain', 'utf-8')
        message['From'] = sender
        message['To'] = address

        subject = 'Mgek_ImgBed认证密钥找回服务'
        message['Subject'] = Header(subject, 'utf-8')
        try:
            smtp = smtplib.SMTP_SSL(host=HOST, port=PORT)
            smtp.login(USER, PASS)
            smtp.sendmail(sender, receiver, message.as_string())
            smtp.quit()
            return True

        except Exception as e:
            print(e.args)
            return False
    else:
        return False
Пример #8
0
def image_info():
    # 根据图片的id获取图片信息
    name = request.args.get("name")
    img = database().get(global_config.engine, 'image', name)
    if img:
        return format_response('ok', img)
    else:
        return format_response('error', '图片信息获取失败')
Пример #9
0
def image_upload():
    #保持一个上下文的命名变量
    #默认的文件列表是file,这应该与前端保持同步
    #没有使用安全命名的方式,因为所有文件名会经过hash计算后重命名
    #默认需要登录认证
    token = request.args.get("token")
    files = request.files.getlist('file')
    path = global_config.image_path if global_config.image_path != '' else os.path.join(os.getcwd(),"images")

    if token and database().get(global_config.engine,'token',token):
        #账户存在
        try:
            if not os.path.exists(path):
                os.mkdir(path)
                #保证目录的创建
            #判断是否有上传文件
            if 'file' not in request.files:
                return format_response('error', '空的上传文件')
            else:
                res = database().get(global_config.engine, 'token', token)
                for f in files:
                    if f.filename:
                        name = rename.rename(f.filename)
                        f.save(os.path.join(path, name))

                        #数据库操作
                        try:
                            database().set(global_config.engine, 'image',
                                           {"name": name, "mail": res, "path": os.path.join(path, name),
                                            "url": "{}{}".format(global_config.image_url, name),
                                            "time": generate_time()[0]
                                            })
                        except:
                            return format_response('error', '文件上传失败')

                return format_response('ok', '文件上传成功')

        except Exception as e:
            print(e.args)
            return format_response('error', '文件上传失败')

    else:
        return format_response('error', '无文件上传权限')
Пример #10
0
def image_info():
    # 根据图片的id获取图片信息
    try:
        name = request.json["name"]
        img = database().get(global_config.engine,'image',name)
        if img:
            return format_response('ok',img)
        else:
            return format_response('error','图片信息获取失败')
            
    except Exception as e:
        
        return format_response('error', '图片信息获取失败')
Пример #11
0
def get_token():
    try:
        mail = request.json["mail"]
        g.token = genernate(mail)
        """
        在这里添加保存至数据库的函数
        #注意如果原本账户存在 不能更新只能找回
        """
        ifexist = database().get_token(global_config.engine, mail)
        if not ifexist:
            res = database().set(global_config.engine, 'token', {
                "mail": mail,
                "token": g.token
            })
            if res:
                return jsonify({"token": g.token})
            else:
                return jsonify({"token": ''})

        else:
            return jsonify({"token": 'already exist'})
    except:
        return jsonify({"token": ''})
Пример #12
0
def image_delete():
    #根据图片的唯一ID删除对应的文件
    try:
        data = request.json
        if "namaelist" in data.keys():
            try:
                database().delete_many(global_config.engine, 'image',
                                       data["namelist"])
                return format_response('ok', '文件删除成功')

            except:
                return format_response('error', '文件删除失败')

        elif "name" in data.keys():
            try:
                database().delete(global_config.engine, 'image', data["name"])
                return format_response('ok', '文件删除成功')
            except:
                return format_response('error', '文件删除失败')

    except Exception as e:
        print(e.args)
        return format_response('error', '文件删除失败')
Пример #13
0
def image_format():
    name = request.json["name"]
    img = database().get(global_config.engine, 'image', name)
    res = {
        "raw":
        img["name"],
        "link":
        "{}{}".format(global_config.image_url, img["name"]),
        "html":
        "<img src={}{} alt=image>".format(global_config.image_url,
                                          img["name"]),
        "markdown":
        "![image]({}{})".format(global_config.image_url, img["name"])
    }
    return format_response('ok', res)
Пример #14
0
    def post(self):
        try:
            # body = tornado.escape.json_decode(self.request.body)
            body = json.loads(self.request.body.decode("utf-8"))
            if body:
                name = body.get('name', '')
                response = body.get('response', '')
                date = datetime.datetime.now()

                if not name:
                    return self.send_response('Por favor informe o NOME', '',
                                              False, HTTPStatus.BAD_REQUEST)

                conn = None
                try:
                    params = database()
                    conn = psycopg2.connect(**params)
                    cur = conn.cursor()

                    query = "INSERT INTO tb_tj_sp (name, response, date) VALUES (%s, %s, %s) RETURNING id"
                    cur.execute(query, (name, response, date))
                    conn.commit()

                    obj = {
                        'name': body.get('name'),
                        'id': int(cur.fetchone()[0])
                    }
                    self.send_to_rabbitmq(obj)

                    cur.close()

                    return self.send_response(
                        'Dado inserido na fila com sucesso!', obj, False, 200)

                except (Exception, psycopg2.DatabaseError) as error:
                    return self.send_response('', str(error), True,
                                              HTTPStatus.INTERNAL_SERVER_ERROR)
                finally:
                    if conn is not None:
                        conn.close()
            else:
                return self.send_response('Nenhum dado foi fornecido', '',
                                          True, HTTPStatus.BAD_REQUEST)

        except JSONDecodeError as error:
            return self.send_response(
                'Os dados informados não é do tipo JSON válido', str(error),
                True, HTTPStatus.BAD_REQUEST)
Пример #15
0
def image_format():
    name = request.json["name"]
    try:
        img = database().get(global_config.engine,'image',name)
        print(global_config.image_url)
        res = {
            "raw": img["name"],
            "link": "{}{}".format(global_config.image_url,img["name"]),
            "html": "<img src={}{} alt=image>".format(global_config.image_url,img["name"]),
            "markdown": "![image]({}{})".format(global_config.image_url,img["name"])
        }
        return format_response('ok',res)

    except Exception as e:
        print(e.args)
        return format_response('error','获取格式化信息失败')
Пример #16
0
def jwt_auth():
    if current_app.config["JWT"]:
        token = request.args.get('token')
        if token:
            if token == test_token["token"]:
                pass
            else:
                t = database().get(global_config.engine,'token',token)
                if t:
                    pass
                else:
                    return abort(401)
        else:
            #你可以使用常规的401权限码也可以使用统一响应码
            return format_response('forbidden','401 No Authority')
            #return abort(401)
    else:
        #不使用jwt时跳过认证
        pass                  
    def patch(self, _id):
        try:
            body = json.loads(self.request.body.decode("utf-8"))
            if body:
                response = body.get('response', '')

                if not response:
                    return self.send_response('Por favor informe a RESPONSE',
                                              '', False,
                                              HTTPStatus.BAD_REQUEST)

                conn = None
                try:
                    params = database()
                    conn = psycopg2.connect(**params)
                    cur = conn.cursor()

                    query = "UPDATE tb_tj_sp SET response = %s WHERE id = %s"
                    cur.execute(query, (response, _id))
                    conn.commit()
                    cur.close()

                    return self.send_response('Dado atualizado com sucesso',
                                              '', False, 200)

                except (Exception, psycopg2.DatabaseError) as error:
                    return self.send_response('', str(error), True,
                                              HTTPStatus.INTERNAL_SERVER_ERROR)
                finally:
                    if conn is not None:
                        conn.close()
            else:
                return self.send_response('Nenhum dado foi fornecido', '',
                                          True, HTTPStatus.BAD_REQUEST)

        except JSONDecodeError as error:
            return self.send_response(
                'Os dados informados não é do tipo JSON válido', '', True,
                HTTPStatus.BAD_REQUEST)
def createTables():
    conn = None
    try:
        params = database()
        conn = psycopg2.connect(**params)
        cur = conn.cursor()

        cur.execute("""
            CREATE TABLE IF NOT EXISTS tb_tj_sp (
                id SERIAL PRIMARY KEY,
                name VARCHAR(255) NOT NULL,
                response TEXT,
                date TIMESTAMP NOT NULL
            )
        """)

        cur.close()
        conn.commit()
    except (Exception, psycopg2.DatabaseError) as error:
        print(error)
    finally:
        if conn is not None:
            conn.close()
Пример #19
0
	def __init__(self):
		self.cl_database = database.database()
		self.cl_template = template.template()
		self.cl_tools = tools.tools()