This commit is contained in:
Brandon Thomas committed 2025-10-28 20:26:34 -04:00
1 parent 0eb2f9f79c
commit d3269d185f
1 file changed
+44 -11
@@ -1,13 +1,13 @@
use std::ops::Sub;
use base64::Engine;
use crate::error::grok_client_error::GrokClientError;
use crate::requests::index_page::index_parsers::parse_index_verification_token::VerificationToken;
use crate::requests::index_page::signature::signature_xs::signature_xs;
use base64::prelude::BASE64_STANDARD;
use base64::Engine;
use byteorder::{LittleEndian, WriteBytesExt};
use chrono::{TimeDelta, Utc};
use log::error;
use sha2::{Digest, Sha256};
use crate::error::grok_client_error::GrokClientError;
use crate::requests::index_page::index_parsers::parse_index_verification_token::VerificationToken;
use crate::requests::index_page::signature::signature_xs::signature_xs;
use std::ops::Sub;
/*
xsid: str = Signature.generate_sign('/rest/app-chat/conversations/new', 'POST', self.verification_token, self.svg_data, self.numbers)
@@ -51,7 +51,7 @@ pub struct GenerateSignArgs<'a> {
pub numbers: &'a [u8],
}
pub fn generate_sign(args: GenerateSignArgs<'_>) -> Result<(), GrokClientError> {
pub fn generate_sign(args: GenerateSignArgs<'_>) -> Result<String, GrokClientError> {
let t = 1761646073; // TODO: REPLACE
//let n = Utc::now().timestamp() - 1682924400;
@@ -91,7 +91,6 @@ pub fn generate_sign(args: GenerateSignArgs<'_>) -> Result<(), GrokClientError>
// POST!/rest/app-chat/conversations/new!78721673obfiowerehiring4320e30fd70a3d70a3d7028f5c28f5c28f6028f5c28f5c28f60fd70a3d70a3d700
println!("msg = {}", msg);
//digest = sha256(msg.encode('utf-8')).digest()[:16]
let digest_all_bytes = Sha256::digest(msg.as_bytes()).to_vec();
@@ -119,21 +118,53 @@ pub fn generate_sign(args: GenerateSignArgs<'_>) -> Result<(), GrokClientError>
println!("assembled = {:?}", assembled);
Ok(())
/*
arr = bytearray(assembled)
if len(arr) > 0:
first = arr[0]
for i in range(1, len(arr)):
arr[i] = arr[i] ^ first
*/
let mut arr = assembled.clone();
// NB: Does not appear to be needed because the first byte is always "0" (for now)
//if arr.len() > 0 {
// let first = *arr.get(0).ok_or(GrokClientError::BadSignatureInputs)?;
// for i in 1..arr.len() {
// let mut a = arr.get_mut(i).ok_or(GrokClientError::BadSignatureInputs)?;
// let av = *a;
// let bv = av ^ first;
// *a = bv;
// }
//}
println!("arr = {:?}", arr);
// Uses + and /
//encoded = b64encode(bytes(arr)).decode('ascii').replace('=', '')
let encoded_bytes = BASE64_STANDARD.encode(arr);
let encoded_bytes = encoded_bytes.replace("=", "");
println!("encoded_bytes = {:?}", encoded_bytes);
Ok(encoded_bytes)
}
#[cfg(test)]
mod tests {
use errors::AnyhowResult;
use crate::requests::index_page::index_parsers::parse_index_verification_token::VerificationToken;
use crate::requests::index_page::signature::generate_sign_for_new_conversation::{generate_sign, GenerateSignArgs};
use errors::AnyhowResult;
#[test]
fn test() -> AnyhowResult<()> {
let ver = VerificationToken("yt16CWiUI42s7wGGeMxcdEIT2miPF5PVOGZF1Jcae7K7HMQrLeI4RTYufmdfBIZU".to_string());
let svg_data = "M 10,30 C 147,16 51,222 136,87 h 31 s 177,77 40,114 C 68,166 18,188 114,44 h 220 s 148,210 202,25 C 220,36 246,218 12,120 h 244 s 34,154 56,161 C 211,204 208,60 174,14 h 155 s 157,116 220,95 C 116,164 53,210 174,232 h 139 s 148,151 135,221 C 167,196 118,27 149,247 h 233 s 129,238 113,21 C 73,44 215,158 218,29 h 68 s 13,98 243,134 C 44,98 149,35 20,178 h 163 s 219,104 41,152 C 237,107 118,120 127,117 h 57 s 41,167 43,136 C 116,168 44,246 182,209 h 143 s 238,93 237,119 C 142,36 64,67 97,111 h 71 s 230,247 119,27 C 206,56 158,51 71,115 h 135 s 120,186 74,57 C 197,165 180,214 102,16 h 88 s 252,48 189,166 C 163,237 57,253 154,60 h 96 s 84,56 15,66 C 177,101 10,202 185,227 h 29 s 204,55 115,219 C 103,82 127,143 194,99 h 102 s 179,63 84,110";
let result = generate_sign(GenerateSignArgs {
let observed = generate_sign(GenerateSignArgs {
path: "/rest/app-chat/conversations/new",
method: "POST",
verification_token: &ver,
@@ -141,7 +172,9 @@ mod tests {
numbers: &[40, 18, 3, 18],
})?;
assert_eq!(1,2);
let expected = "AMrdeglolCONrO8BhnjMXHRCE9pojxeT1ThmRdSXGnuyuxzEKy3iOEU2Ln5nXwSGVIkysQRoLOMjee3yLtjtJXbPVwjgAw";
assert_eq!(&observed, expected);
Ok(())
}
}