add native csrf helpers
This commit is contained in:
@@ -877,6 +877,39 @@ void session_destroy(String session_name)
|
||||
}
|
||||
}
|
||||
|
||||
String csrf_session_key(String token_name)
|
||||
{
|
||||
token_name = first(trim(token_name), "csrf_token");
|
||||
return("_csrf_" + token_name);
|
||||
}
|
||||
|
||||
String csrf_token(String session_name, String token_name)
|
||||
{
|
||||
session_start(session_name);
|
||||
String key = csrf_session_key(token_name);
|
||||
if(context->session[key] == "")
|
||||
{
|
||||
String random = random_bytes(32);
|
||||
if(random.size() != 32)
|
||||
random = session_id_create();
|
||||
context->session[key] = sha256_hex(random);
|
||||
}
|
||||
return(context->session[key]);
|
||||
}
|
||||
|
||||
bool csrf_valid(String submitted_token, String session_name, String token_name)
|
||||
{
|
||||
session_start(session_name);
|
||||
String expected = context->session[csrf_session_key(token_name)];
|
||||
return(expected != "" && submitted_token != "" && crypto_equal(submitted_token, expected));
|
||||
}
|
||||
|
||||
void csrf_rotate(String session_name, String token_name)
|
||||
{
|
||||
session_start(session_name);
|
||||
context->session.erase(csrf_session_key(token_name));
|
||||
}
|
||||
|
||||
String ws_make_accept_key(String client_key)
|
||||
{
|
||||
return(base64_encode(gen_sha1(
|
||||
|
||||
@@ -33,6 +33,9 @@ StringMap load_session_data(String session_id);
|
||||
void save_session_data(String session_id, StringMap data);
|
||||
String session_start(String session_name = "uce-session");
|
||||
void session_destroy(String session_name = "uce-session");
|
||||
String csrf_token(String session_name = "uce-session", String token_name = "csrf_token");
|
||||
bool csrf_valid(String submitted_token, String session_name = "uce-session", String token_name = "csrf_token");
|
||||
void csrf_rotate(String session_name = "uce-session", String token_name = "csrf_token");
|
||||
String ws_make_accept_key(String client_key);
|
||||
bool ws_is_valid_client_key(String client_key);
|
||||
String ws_encode_frame(String payload, u8 opcode = 0x1, bool is_final_fragment = true);
|
||||
|
||||
Reference in New Issue
Block a user