可以打包

This commit is contained in:
Cheney 2024-12-25 13:38:09 +08:00
parent 8176e9c034
commit e099ff08ba
10 changed files with 196 additions and 15 deletions

View File

@ -5,6 +5,11 @@
3. 暂时无法实现 UKEY 复制, 只能从初始化时就使用 Fake UKEY。
## 版本
- 0.1
打包为一个文件
## API
请求:
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
@ -78,6 +83,7 @@ alg : 1
}
### 重置口令

View File

@ -5,8 +5,7 @@ const path = require("path");
function listFakeUKeys(){
let ukeyDir = config.getFakeUKeyDir();
const files = fs.readdirSync(ukeyDir);
return files;
return fs.readdirSync(ukeyDir);
}
function checkFakeUKey(name){
@ -29,6 +28,7 @@ module.exports = {
return {
"EnumDeviceNameList": nameList.join("|"),
"fakeList" : nameList
}
},
@ -66,7 +66,7 @@ module.exports = {
"01000032" : function (params) {
let ukey = params.hdevice
let dir = params.dir
let acc = params.acc
// let acc = params.acc
if ( dir.startsWith("\\root\\") ) {
dir = dir.substring(6);
@ -82,15 +82,18 @@ module.exports = {
let ukey = params.hdevice
let dir = params.dir
let file = params.file
let size = params.size
let acc = params.acc
// let size = params.size
// let acc = params.acc
if ( dir.startsWith("\\root\\") ) {
dir = dir.substring(6);
if ( fs.existsSync(path.resolve(config.getFakeUKeyDir(), ukey, "root", dir)) ) {
if ( fs.existsSync(path.resolve(config.getFakeUKeyDir(), ukey, "root", dir, file)) ) {
// throw "文件已存在"
return {}
}
// 文件无需创建,直接写入即可。
} else {
throw "目录不合法"
}
@ -123,14 +126,14 @@ module.exports = {
let ukey = params.hdevice
let dir = params.dir
let file = params.file
let size = params.size
// let size = params.size
let offset = parseInt(params.offset, 10)
let input = params.input
if ( dir.startsWith("\\root\\") ) {
dir = dir.substring(6);
let f = path.resolve(config.getFakeUKeyDir(), ukey, "root\\", dir, file)
let buffer = undefined;
let buffer = null;
if ( offset === 0 ) {
buffer = Buffer.from(input, 'hex');
} else {
@ -189,7 +192,9 @@ module.exports = {
files.push( fname )
}
}
return {
data : files.join("|")
}
},
// 枚举文件
@ -211,6 +216,9 @@ module.exports = {
files.push( fname )
}
}
return {
data : files.join("|")
}
},
// 生成密钥对
@ -220,6 +228,8 @@ module.exports = {
let keyNum = params.keyNum
let keyLen = params.keyLen
console.log("genKeypair", alg, keyLen)
const sm2 = require('sm-crypto').sm2
let keypair = sm2.generateKeyPairHex()

47
backend/src/Proxy.js Normal file
View File

@ -0,0 +1,47 @@
const http = require('http');
const querystring = require('querystring');
const base = {
hostname: '127.0.0.1',
port: 8090,
path: '/do',
method: 'POST'
};
async function call(form){
const postData = querystring.stringify(form);
const options = Object.assign(base, {
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(postData)
}
})
return new Promise((cbok, cberr)=>{
const req = http.request(options, (res) => {
let data = '';
res.on('error', (e)=>{
cberr(e)
})
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
console.log(data);
cbok(data)
});
});
req.write(postData);
req.end();
})
}
export default {
call
}

1
backend/src/Version.js Normal file
View File

@ -0,0 +1 @@
export const version = "0.1"

View File

@ -2,24 +2,60 @@ const express = require('express');
const bodyParser = require('body-parser');
const ukey = require("./FakeUKey")
const cors = require('cors');
const { killPortProcess } = require('kill-port-process');
const Proxy = require("./Proxy")
const Config = require("./Config")
const Version = require("./Version")
const app = express();
// const port = 3000;
const port = 8090;
const port = 18090;
// 使用body-parser中间件来解析urlencoded格式的请求体
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cors());
app.get("/", (req, res) => {
app.all("/", (req, res) => {
res.json({
server : "Fake UKey",
version : "1.0"
version : Version.version,
"rev": 0
})
})
/**
* 新建 FakeUKey
*/
app.post("/fakeUkey/add", (req, res) => {
Config.newFakeUKey();
res.json({
"rev": 0
})
})
/**
* 删除 FakeUKey
*/
app.post("/fakeUkey/del", (req, res) => {
Config.delFakeUKey(req.body.name);
res.json({
"rev": 0
})
})
app.post('/do', (req, res) => {
// 先尝试代理
let pd = null
try {
pd = Proxy.call(req.body)
}catch (e) {
console.error("proxy error", pd)
}
// 获取请求体中的数据
let requestData = {
"rev": -1
@ -28,7 +64,7 @@ app.post('/do', (req, res) => {
let func = ukey[ req.body.order ]
if ( func ){
try {
let ret = func(req.body)
let ret = func(req.body, pd)
requestData = Object.assign(ret, {
"rev": 0
})
@ -49,7 +85,7 @@ app.post('/do', (req, res) => {
// long running process running on a given port(s), e.g. a http-server
// takes a number, number[], string or string[]
// single port
await killPortProcess(8090);
// await killPortProcess(8090);
app.listen(port, "127.0.0.1", () => {
console.log(`Server is running on port ${port}`);

7
build.cmd Normal file
View File

@ -0,0 +1,7 @@
cd backend
bun build --compile --target=bun-windows-x64 --outfile=PFakeUKey.exe-x86_64-pc-windows-msvc.exe ./src/main.js
cd ..
npm run tauri build

BIN
view/public/add.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

BIN
view/public/ukey.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

72
view/src/api.js Normal file
View File

@ -0,0 +1,72 @@
import axios from 'axios';
import qs from 'qs';
const apiClient = axios.create({
baseURL: 'http://localhost:18090', // Replace with your API base URL
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
});
export const postData = async (data) => {
try {
const response = await apiClient.post('/do', qs.stringify(data));
return response.data;
} catch (error) {
console.error('Error posting data:', error);
throw error;
}
};
export const getVersion = async () => {
const data = {
};
try {
const response = await apiClient.post('/', qs.stringify(data));
return response.data;
} catch (error) {
console.error('Error posting data:', error);
throw error;
}
}
export const getList = async () => {
const data = {
order: '01000005'
};
return postData(data);
}
export const addFakeUkey = async (name) => {
const data = {
name
};
try {
const response = await apiClient.post('/fakeUkey/add', qs.stringify(data));
return response.data;
} catch (error) {
console.error('Error posting data:', error);
throw error;
}
}
export const delFakeUkey = async (name) => {
const data = {
name
};
try {
const response = await apiClient.post('/fakeUkey/del', qs.stringify(data));
return response.data;
} catch (error) {
console.error('Error posting data:', error);
throw error;
}
}

2
view/test/bun-node17.js Normal file
View File

@ -0,0 +1,2 @@
console.log(structuredClone)