UI
This commit is contained in:
parent
7086d7b6d9
commit
839d016bda
@ -5,5 +5,6 @@
|
||||
# Author: xaoyaoo
|
||||
# Date: 2023/09/27
|
||||
# -------------------------------------------------------------------------------
|
||||
from .db_parsing import read_img_dat, read_emoji, decompress_CompressContent, read_audio_buf, read_audio, parse_xml_string,read_BytesExtra
|
||||
from .export_chat import export_csv
|
||||
from .db_parsing import read_img_dat, read_emoji, decompress_CompressContent, read_audio_buf, read_audio, \
|
||||
parse_xml_string, read_BytesExtra
|
||||
from .export_chat import export_csv, get_contact_list, get_chatroom_list, get_msg_list, get_chat_count
|
||||
|
36
pywxdump/api/chat_api.py
Normal file
36
pywxdump/api/chat_api.py
Normal file
@ -0,0 +1,36 @@
|
||||
# -*- coding: utf-8 -*-#
|
||||
# -------------------------------------------------------------------------------
|
||||
# Name: chat_api.py
|
||||
# Description:
|
||||
# Author: xaoyaoo
|
||||
# Date: 2024/01/02
|
||||
# -------------------------------------------------------------------------------
|
||||
from flask import Flask, request, render_template, g, Blueprint
|
||||
from pywxdump import analyzer
|
||||
from pywxdump.api.rjson import ReJson, RqJson
|
||||
# from flask_cors import CORS
|
||||
|
||||
app = Flask(__name__ , static_folder='../ui/web/dist', static_url_path='/')
|
||||
|
||||
|
||||
@app.route('/api/contact_list', methods=["GET", 'POST'])
|
||||
def contact_list():
|
||||
"""
|
||||
获取联系人列表
|
||||
:return:
|
||||
"""
|
||||
if request.method == "POST":
|
||||
# 从header中读取micro_path
|
||||
micro_path = request.headers.get("micro_path")
|
||||
try:
|
||||
# 获取联系人列表
|
||||
contact_list = analyzer.get_contact_list(micro_path)
|
||||
return ReJson(0, contact_list)
|
||||
except Exception as e:
|
||||
return ReJson(9999, msg=str(e))
|
||||
else:
|
||||
return ReJson(9999)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(host='0.0.0.0', port=5000, debug=True)
|
61
pywxdump/api/rjson.py
Normal file
61
pywxdump/api/rjson.py
Normal file
@ -0,0 +1,61 @@
|
||||
import logging
|
||||
|
||||
|
||||
def ReJson(code: int, body: dict = None, msg: str = None, error: str = None, extra: dict = None) -> dict:
|
||||
"""
|
||||
返回格式化的json数据
|
||||
:param code: 状态码 int
|
||||
:param body: 返回的主体内容,一般为具体的数据
|
||||
:param msg: 返回状态码相关的调试信息
|
||||
:param error: 出现错误时候,这个参数可以把错误写入日志
|
||||
:param extra: # 全局附加数据,字段、内容不定(如等级,经验的变化,可以作为全局的数据存在,区别于某次请求的具体data)
|
||||
:return: json格式的返回值
|
||||
"""
|
||||
if extra is None:
|
||||
extra = {}
|
||||
situation = {
|
||||
0: {'code': 0, 'body': body, 'msg': "success", "extra": extra},
|
||||
# 100 开头代表 请求数据有问题
|
||||
# 4*** 表示数据库查询结果存在异常
|
||||
1001: {'code': 1001, 'body': body, 'msg': "请求数据格式存在错误!", "extra": extra},
|
||||
1002: {'code': 1002, 'body': body, 'msg': "请求参数存在错误!", "extra": extra},
|
||||
2001: {'code': 2001, 'body': body, 'msg': "操作失败!", "extra": extra}, # 请求未能正确执行
|
||||
4001: {'code': 4001, 'body': body, 'msg': "账号或密码错误!", "extra": extra}, # 表示用户没有权限(令牌、用户名、密码错误)
|
||||
4003: {'code': 4003, 'body': body, 'msg': "禁止访问!", "extra": extra},
|
||||
4004: {'code': 4004, 'body': body, 'msg': "数据不存在!", "extra": extra},
|
||||
4005: {'code': 4005, 'body': body, 'msg': "数据库异常!", "extra": extra},
|
||||
4006: {'code': 4006, 'body': body, 'msg': "数据已存在!", "extra": extra},
|
||||
5002: {'code': 5002, 'body': body, 'msg': "服务器错误!", "extra": extra},
|
||||
9999: {'code': 9999, 'body': body, 'msg': "未知错误!", "extra": extra},
|
||||
}
|
||||
rjson = situation.get(code, {'code': 9999, 'body': None, 'msg': "code错误", "extra": {}})
|
||||
if code != 0:
|
||||
logging.warning((code, rjson['body'], msg if msg else None))
|
||||
if body:
|
||||
rjson['body'] = body
|
||||
if msg:
|
||||
rjson['msg'] = msg
|
||||
if error:
|
||||
logging.error(error)
|
||||
return rjson
|
||||
|
||||
|
||||
def RqJson(rqData):
|
||||
"""
|
||||
进行请求数据验证数据合法性,确实用户以及资格
|
||||
主要根路径下的数据
|
||||
:param rqData: 请求的数据
|
||||
:return: body的值
|
||||
"""
|
||||
userid = rqData.get("userid", "") # 用户id
|
||||
version = rqData.get("version", "v1.0") # api版本
|
||||
uidid = rqData.get("uidid", "qweqrew") # 唯一设备标识符
|
||||
token = rqData.get("token", "") # token
|
||||
"""验证数据合法性"""
|
||||
""""""
|
||||
body = rqData.get("body", None)
|
||||
return body
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(ReJson(0, "asdf", "asdf"))
|
29
pywxdump/ui/web/.gitignore
vendored
29
pywxdump/ui/web/.gitignore
vendored
@ -1,29 +0,0 @@
|
||||
dist/
|
||||
build/
|
||||
.git/
|
||||
__pycache__/
|
||||
decrypted/
|
||||
pywxdump.egg-info/
|
||||
|
||||
# 忽略.idea目录
|
||||
.idea/
|
||||
|
||||
pysqlcipher3/
|
||||
# 忽略secret.txt文件
|
||||
secret.txt
|
||||
#.gitignore
|
||||
# 忽略所有的.class文件
|
||||
*.class
|
||||
# 忽略所有的.iml文件
|
||||
*.iml
|
||||
|
||||
gitandpypi.cmd
|
||||
# 忽略test_xaooyaoo_conf.txt文件
|
||||
test_xaooyaoo_conf.txt
|
||||
|
||||
# vue ignore
|
||||
node_modules
|
||||
.DS_Store
|
||||
dist
|
||||
dist-ssr
|
||||
*.local
|
@ -1,13 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Vite App</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script type="module" src="/src/main.js"></script>
|
||||
</body>
|
||||
</html>
|
2551
pywxdump/ui/web/package-lock.json
generated
2551
pywxdump/ui/web/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -1,15 +0,0 @@
|
||||
{
|
||||
"name": "wxdump_web",
|
||||
"version": "0.0.0",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vite build"
|
||||
},
|
||||
"dependencies": {
|
||||
"vue": "^3.0.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"vite": "^1.0.0-rc.13",
|
||||
"@vue/compiler-sfc": "^3.0.4"
|
||||
}
|
||||
}
|
Binary file not shown.
Before Width: | Height: | Size: 4.2 KiB |
@ -1,15 +0,0 @@
|
||||
<template>
|
||||
<img alt="Vue logo" src="./assets/logo.png" />
|
||||
<HelloWorld msg="Hello Vue 3.0 + Vite" />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import HelloWorld from './components/HelloWorld.vue'
|
||||
|
||||
export default {
|
||||
name: 'App',
|
||||
components: {
|
||||
HelloWorld
|
||||
}
|
||||
}
|
||||
</script>
|
Binary file not shown.
Before Width: | Height: | Size: 6.7 KiB |
@ -1,19 +0,0 @@
|
||||
<template>
|
||||
<h1>{{ msg }}</h1>
|
||||
<button @click="count++">count is: {{ count }}</button>
|
||||
<p>Edit <code>components/HelloWorld.vue</code> to test hot module replacement.</p>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'HelloWorld',
|
||||
props: {
|
||||
msg: String
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
count: 0
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
@ -1,8 +0,0 @@
|
||||
#app {
|
||||
font-family: Avenir, Helvetica, Arial, sans-serif;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
text-align: center;
|
||||
color: #2c3e50;
|
||||
margin-top: 60px;
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
import { createApp } from 'vue'
|
||||
import App from './App.vue'
|
||||
import './index.css'
|
||||
|
||||
createApp(App).mount('#app')
|
Loading…
Reference in New Issue
Block a user