可以打包
This commit is contained in:
parent
8176e9c034
commit
e099ff08ba
@ -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
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
### 重置口令
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -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
47
backend/src/Proxy.js
Normal 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
1
backend/src/Version.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
export const version = "0.1"
|
@ -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
7
build.cmd
Normal 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
BIN
view/public/add.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 41 KiB |
BIN
view/public/ukey.png
Normal file
BIN
view/public/ukey.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 126 KiB |
72
view/src/api.js
Normal file
72
view/src/api.js
Normal 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
2
view/test/bun-node17.js
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
console.log(structuredClone)
|
Loading…
Reference in New Issue
Block a user