#include "jwt.h" #include #include #include using namespace std::literals::chrono_literals; extern "C" { auto create_token(const char* user_id, const char* secret) -> char* { auto token = jwt::create() .set_type("JWS") .set_issuer("KeqingMoe") .set_subject("user_id") .set_audience("web_client") .set_expires_at(std::chrono::system_clock::now() + 1h) .set_payload_claim("user_id", jwt::claim(std::string{user_id})) .sign(jwt::algorithm::hs256{secret}); return strdup(token.c_str()); } auto get_payload(const char* token) -> char* { try { auto decoded_token = jwt::decode(token); auto payload = decoded_token.get_payload_claim("user_id").as_string(); return strdup(payload.c_str()); } catch (...) { return nullptr; } } auto verify_token(const char* token, const char* secret) -> int { try { auto decoded_token = jwt::decode(token); auto verifier = jwt::verify() .allow_algorithm(jwt::algorithm::hs256{secret}) .with_issuer("KeqingMoe") .with_subject("user_id"); verifier.verify(decoded_token); return 1; } catch (...) { return 0; } } }