transfer-encryption

This commit is contained in:
King Wang
2021-06-29 22:18:47 +08:00
parent 8f86b7da96
commit 36a702ae9e
25 changed files with 750 additions and 0 deletions

View File

@@ -0,0 +1,67 @@
import { HttpClient } from 'tsrpc-browser';
import { EncryptUtil } from './shared/models/EncryptUtil';
import { serviceProto } from './shared/protocols/serviceProto';
// Create Client
let client = new HttpClient(serviceProto, {
server: 'http://127.0.0.1:3000',
logger: console,
debugBuf: true
});
// Encrypt
client.flows.preSendBufferFlow.push(v => {
v.buf = EncryptUtil.encrypt(v.buf);
return v;
});
// Decrypt
client.flows.preRecvBufferFlow.push(v => {
v.buf = EncryptUtil.decrypt(v.buf);
return v;
})
// Reload message list
async function loadList() {
let ret = await client.callApi('GetData', {});
// Error
if (!ret.isSucc) {
alert(ret.err.message);
return;
}
// Success
const list = document.querySelector('.list')!;
list.innerHTML = '';
ret.res.data.forEach(v => {
let li = document.createElement('li');
li.innerHTML = `<div class="content"></div><div class="time"></div>`;
(li.querySelector('.content') as HTMLDivElement).innerText = v.content;
(li.querySelector('.time') as HTMLDivElement).innerText = v.time.toLocaleTimeString();
list.appendChild(li);
})
}
// Send Message
async function send() {
const textarea = document.querySelector('.send>textarea') as HTMLTextAreaElement;
let ret = await client.callApi('AddData', {
content: textarea.value
});
// Error
if (!ret.isSucc) {
alert(ret.err.message);
return;
}
// Success
textarea.value = '';
loadList();
}
// Bind Events
(document.querySelector('.send>button') as HTMLButtonElement).onclick = send;
// Load list after page load
loadList();

View File

@@ -0,0 +1,17 @@
export class EncryptUtil {
static encrypt(buf: Uint8Array): Uint8Array {
for (let i = 0; i < buf.length; ++i) {
buf[i] -= 1;
}
return buf;
}
static decrypt(buf: Uint8Array): Uint8Array {
for (let i = 0; i < buf.length; ++i) {
buf[i] += 1;
}
return buf;
}
}

View File

@@ -0,0 +1,10 @@
// This is a demo code file
// Feel free to delete it
export interface ReqAddData {
content: string;
}
export interface ResAddData {
time: Date
}

View File

@@ -0,0 +1,13 @@
// This is a demo code file
// Feel free to delete it
export interface ReqGetData {
}
export interface ResGetData {
data: {
content: string,
time: Date
}[]
}

View File

@@ -0,0 +1,98 @@
import { ServiceProto } from 'tsrpc-proto';
import { ReqAddData, ResAddData } from './PtlAddData';
import { ReqGetData, ResGetData } from './PtlGetData';
// This is a demo service proto file (auto generated)
// Feel free to delete it
export interface ServiceType {
api: {
"AddData": {
req: ReqAddData,
res: ResAddData
},
"GetData": {
req: ReqGetData,
res: ResGetData
}
},
msg: {
}
}
export const serviceProto: ServiceProto<ServiceType> = {
"version": 1,
"services": [
{
"id": 0,
"name": "AddData",
"type": "api"
},
{
"id": 1,
"name": "GetData",
"type": "api"
}
],
"types": {
"PtlAddData/ReqAddData": {
"type": "Interface",
"properties": [
{
"id": 0,
"name": "content",
"type": {
"type": "String"
}
}
]
},
"PtlAddData/ResAddData": {
"type": "Interface",
"properties": [
{
"id": 0,
"name": "time",
"type": {
"type": "Date"
}
}
]
},
"PtlGetData/ReqGetData": {
"type": "Interface"
},
"PtlGetData/ResGetData": {
"type": "Interface",
"properties": [
{
"id": 0,
"name": "data",
"type": {
"type": "Array",
"elementType": {
"type": "Interface",
"properties": [
{
"id": 0,
"name": "content",
"type": {
"type": "String"
}
},
{
"id": 1,
"name": "time",
"type": {
"type": "Date"
}
}
]
}
}
}
]
}
}
};