Compare commits
No commits in common. "27db3d5ef01044d99d5a296980749a0a4c9ad174" and "29c43e64e60dace41b961bff2b07e415ed39a4f8" have entirely different histories.
27db3d5ef0
...
29c43e64e6
11
connect.py
11
connect.py
@ -2,6 +2,7 @@ import time
|
|||||||
import random
|
import random
|
||||||
import asyncio
|
import asyncio
|
||||||
import traceback
|
import traceback
|
||||||
|
import multiprocessing
|
||||||
|
|
||||||
from typing import Dict, List, Tuple, Any, Optional, Union, Literal
|
from typing import Dict, List, Tuple, Any, Optional, Union, Literal
|
||||||
|
|
||||||
@ -66,7 +67,7 @@ class Message(Options):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sio: socketio.AsyncClient = socketio.AsyncClient()
|
sio = socketio.AsyncClient()
|
||||||
|
|
||||||
|
|
||||||
@sio.on('connect')
|
@sio.on('connect')
|
||||||
@ -86,10 +87,6 @@ async def require_auth(salt: str, versions: Dict[str, str]):
|
|||||||
await sio.emit('auth', signature.signature)
|
await sio.emit('auth', signature.signature)
|
||||||
print(f"{Fore.BLUE}send auth emit{Style.RESET_ALL}")
|
print(f"{Fore.BLUE}send auth emit{Style.RESET_ALL}")
|
||||||
|
|
||||||
# @sio.on('requireAuth')
|
|
||||||
# def require_auth(*data: Dict[str, Any]):
|
|
||||||
# print(f"{Fore.BLUE}requireAuth: {data}{Style.RESET_ALL}")
|
|
||||||
|
|
||||||
|
|
||||||
@sio.on('auth')
|
@sio.on('auth')
|
||||||
def auth(data: Dict[str, Any]):
|
def auth(data: Dict[str, Any]):
|
||||||
@ -226,8 +223,8 @@ async def add_message(data: Dict[str, Any]):
|
|||||||
|
|
||||||
await asyncio.sleep(random.random() * 2)
|
await asyncio.sleep(random.random() * 2)
|
||||||
await sio.emit('sendMessage', message.to_json())
|
await sio.emit('sendMessage', message.to_json())
|
||||||
elif data['message']['content'] == '!!jrrp':
|
elif data['message']['content'] == 'jrrp':
|
||||||
randomer = random.Random(f'{sender_id}-{data["message"]["date"]}-jrrp-v2')
|
randomer = random.Random(f'{sender_id}-{data["message"]["date"]}-jrrp')
|
||||||
result = randomer.randint(0, 50) + randomer.randint(0, 50)
|
result = randomer.randint(0, 50) + randomer.randint(0, 50)
|
||||||
print(f'{sender_name} 今日人品值为 {result}')
|
print(f'{sender_name} 今日人品值为 {result}')
|
||||||
reply = ReplyMessage(id=data['message']['_id'])
|
reply = ReplyMessage(id=data['message']['_id'])
|
||||||
|
@ -1,25 +0,0 @@
|
|||||||
use ed25519_dalek::{Signature, Signer, SigningKey};
|
|
||||||
|
|
||||||
pub struct IcalinguaSinger {
|
|
||||||
pub host: String,
|
|
||||||
pub pub_key: SigningKey,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl IcalinguaSinger {
|
|
||||||
pub fn new(host: String, pub_key: &str) -> Self {
|
|
||||||
let array_key: [u8; 32] = hex::decode(pub_key).unwrap().try_into().unwrap();
|
|
||||||
|
|
||||||
let signing_key: SigningKey = SigningKey::from_bytes(&array_key);
|
|
||||||
Self {
|
|
||||||
host,
|
|
||||||
pub_key: signing_key,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn sign_for_salt(&self, salt: String) -> Vec<u8> {
|
|
||||||
let salt: Vec<u8> = hex::decode(salt).unwrap();
|
|
||||||
let signature: Signature = self.pub_key.sign(salt.as_slice());
|
|
||||||
|
|
||||||
signature.to_bytes().to_vec()
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,29 +1,27 @@
|
|||||||
mod client;
|
|
||||||
|
|
||||||
use ed25519_dalek::{Signature, Signer, SigningKey};
|
use ed25519_dalek::{Signature, Signer, SigningKey};
|
||||||
use rust_socketio::{ClientBuilder, Event, Payload, RawClient};
|
use rust_socketio::{ClientBuilder, Payload, RawClient, Event};
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
|
static KEY: &str = "";
|
||||||
|
static HOST: &str = "";
|
||||||
|
|
||||||
#[allow(unused)]
|
#[allow(unused)]
|
||||||
fn require_auth_callback(payload: Payload, client: RawClient) {
|
fn require_auth_callback(payload: Payload, client: RawClient) {
|
||||||
let key = std::env::args().nth(2).expect("No key given");
|
|
||||||
let auth_key = match payload {
|
let auth_key = match payload {
|
||||||
Payload::String(str) => Some(str),
|
Payload::String(str) => Some(str),
|
||||||
Payload::Binary(_) => None,
|
Payload::Binary(_) => None,
|
||||||
}
|
}
|
||||||
.expect("Payload should be String");
|
.unwrap();
|
||||||
|
// 去除前后的 "
|
||||||
let auth_key = &auth_key[1..auth_key.len() - 1];
|
let auth_key = &auth_key[1..auth_key.len() - 1];
|
||||||
|
|
||||||
println!("auth_key: {}", auth_key);
|
println!("auth_key: {}", auth_key);
|
||||||
|
|
||||||
let array_key: [u8; 32] = hex::decode(key)
|
let array_key: [u8; 32] = hex::decode(KEY).unwrap().try_into().unwrap();
|
||||||
.expect("Key should be hex")
|
|
||||||
.try_into()
|
|
||||||
.expect("Key should be 32 bytes");
|
|
||||||
|
|
||||||
let signing_key: SigningKey = SigningKey::from_bytes(&array_key);
|
let signing_key: SigningKey = SigningKey::from_bytes(&array_key);
|
||||||
|
|
||||||
let salt = hex::decode(auth_key).expect("Got an invalid salt from the server");
|
let salt = hex::decode(auth_key).unwrap();
|
||||||
let signature: Signature = signing_key.sign(salt.as_slice());
|
let signature: Signature = signing_key.sign(salt.as_slice());
|
||||||
// let sign = hex::encode(signature.to_bytes());
|
// let sign = hex::encode(signature.to_bytes());
|
||||||
let sign = signature.to_bytes().to_vec();
|
let sign = signature.to_bytes().to_vec();
|
||||||
@ -46,12 +44,10 @@ fn ws_main() {
|
|||||||
let connect_call_back = |payload: Payload, _client: RawClient| {
|
let connect_call_back = |payload: Payload, _client: RawClient| {
|
||||||
println!("Connect callback: {:#?}", payload);
|
println!("Connect callback: {:#?}", payload);
|
||||||
};
|
};
|
||||||
// 从命令行获取 host 和 key
|
|
||||||
let host = std::env::args().nth(1).expect("No host given");
|
|
||||||
|
|
||||||
// get a socket that is connected to the admin namespace
|
// get a socket that is connected to the admin namespace
|
||||||
|
|
||||||
let socket = ClientBuilder::new(host)
|
let socket = ClientBuilder::new(HOST)
|
||||||
// .namespace("/admin")
|
// .namespace("/admin")
|
||||||
.on_any(any_event)
|
.on_any(any_event)
|
||||||
.on("connect", connect_call_back)
|
.on("connect", connect_call_back)
|
||||||
@ -64,6 +60,26 @@ fn ws_main() {
|
|||||||
socket.disconnect().expect("Disconnect failed")
|
socket.disconnect().expect("Disconnect failed")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn sign_main() {
|
||||||
|
// 生成 SingningKey
|
||||||
|
let array_key: [u8; 32] = hex::decode(KEY).unwrap().try_into().unwrap();
|
||||||
|
let signing_key: SigningKey = SigningKey::from_bytes(&array_key);
|
||||||
|
|
||||||
|
// 要签名的东西
|
||||||
|
let data = "187d0b21becfa7a49e97afc00646e169";
|
||||||
|
let data = hex::decode(data).unwrap();
|
||||||
|
|
||||||
|
// 签名
|
||||||
|
let signature: Signature = signing_key.sign(data.as_slice());
|
||||||
|
|
||||||
|
// 生成签名
|
||||||
|
let sign = hex::encode(signature.to_bytes());
|
||||||
|
|
||||||
|
println!("sign: {} {:?} {}", sign, signature.to_bytes(), signature.to_bytes().len());
|
||||||
|
// println!("hex: {}", hex::encode());
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
sign_main();
|
||||||
ws_main();
|
ws_main();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user