可以打包

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。 3. 暂时无法实现 UKEY 复制, 只能从初始化时就使用 Fake UKEY。
## 版本
- 0.1
打包为一个文件
## API ## API
请求: 请求:
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 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(){ function listFakeUKeys(){
let ukeyDir = config.getFakeUKeyDir(); let ukeyDir = config.getFakeUKeyDir();
const files = fs.readdirSync(ukeyDir); return fs.readdirSync(ukeyDir);
return files;
} }
function checkFakeUKey(name){ function checkFakeUKey(name){
@ -29,6 +28,7 @@ module.exports = {
return { return {
"EnumDeviceNameList": nameList.join("|"), "EnumDeviceNameList": nameList.join("|"),
"fakeList" : nameList
} }
}, },
@ -66,7 +66,7 @@ module.exports = {
"01000032" : function (params) { "01000032" : function (params) {
let ukey = params.hdevice let ukey = params.hdevice
let dir = params.dir let dir = params.dir
let acc = params.acc // let acc = params.acc
if ( dir.startsWith("\\root\\") ) { if ( dir.startsWith("\\root\\") ) {
dir = dir.substring(6); dir = dir.substring(6);
@ -82,15 +82,18 @@ module.exports = {
let ukey = params.hdevice let ukey = params.hdevice
let dir = params.dir let dir = params.dir
let file = params.file let file = params.file
let size = params.size // let size = params.size
let acc = params.acc // let acc = params.acc
if ( dir.startsWith("\\root\\") ) { if ( dir.startsWith("\\root\\") ) {
dir = dir.substring(6); 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 "文件已存在" // throw "文件已存在"
return {} return {}
} }
// 文件无需创建,直接写入即可。
} else { } else {
throw "目录不合法" throw "目录不合法"
} }
@ -123,14 +126,14 @@ module.exports = {
let ukey = params.hdevice let ukey = params.hdevice
let dir = params.dir let dir = params.dir
let file = params.file let file = params.file
let size = params.size // let size = params.size
let offset = parseInt(params.offset, 10) let offset = parseInt(params.offset, 10)
let input = params.input let input = params.input
if ( dir.startsWith("\\root\\") ) { if ( dir.startsWith("\\root\\") ) {
dir = dir.substring(6); dir = dir.substring(6);
let f = path.resolve(config.getFakeUKeyDir(), ukey, "root\\", dir, file) let f = path.resolve(config.getFakeUKeyDir(), ukey, "root\\", dir, file)
let buffer = undefined; let buffer = null;
if ( offset === 0 ) { if ( offset === 0 ) {
buffer = Buffer.from(input, 'hex'); buffer = Buffer.from(input, 'hex');
} else { } else {
@ -189,7 +192,9 @@ module.exports = {
files.push( fname ) files.push( fname )
} }
} }
return {
data : files.join("|")
}
}, },
// 枚举文件 // 枚举文件
@ -211,6 +216,9 @@ module.exports = {
files.push( fname ) files.push( fname )
} }
} }
return {
data : files.join("|")
}
}, },
// 生成密钥对 // 生成密钥对
@ -220,6 +228,8 @@ module.exports = {
let keyNum = params.keyNum let keyNum = params.keyNum
let keyLen = params.keyLen let keyLen = params.keyLen
console.log("genKeypair", alg, keyLen)
const sm2 = require('sm-crypto').sm2 const sm2 = require('sm-crypto').sm2
let keypair = sm2.generateKeyPairHex() 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 bodyParser = require('body-parser');
const ukey = require("./FakeUKey") const ukey = require("./FakeUKey")
const cors = require('cors'); 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 app = express();
// const port = 3000; // const port = 3000;
const port = 8090; const port = 18090;
// 使用body-parser中间件来解析urlencoded格式的请求体 // 使用body-parser中间件来解析urlencoded格式的请求体
app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.urlencoded({ extended: true }));
app.use(cors()); app.use(cors());
app.get("/", (req, res) => { app.all("/", (req, res) => {
res.json({ res.json({
server : "Fake UKey", 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) => { app.post('/do', (req, res) => {
// 先尝试代理
let pd = null
try {
pd = Proxy.call(req.body)
}catch (e) {
console.error("proxy error", pd)
}
// 获取请求体中的数据 // 获取请求体中的数据
let requestData = { let requestData = {
"rev": -1 "rev": -1
@ -28,7 +64,7 @@ app.post('/do', (req, res) => {
let func = ukey[ req.body.order ] let func = ukey[ req.body.order ]
if ( func ){ if ( func ){
try { try {
let ret = func(req.body) let ret = func(req.body, pd)
requestData = Object.assign(ret, { requestData = Object.assign(ret, {
"rev": 0 "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 // long running process running on a given port(s), e.g. a http-server
// takes a number, number[], string or string[] // takes a number, number[], string or string[]
// single port // single port
await killPortProcess(8090); // await killPortProcess(8090);
app.listen(port, "127.0.0.1", () => { app.listen(port, "127.0.0.1", () => {
console.log(`Server is running on port ${port}`); 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)