aboutsummaryrefslogtreecommitdiff
path: root/plugins/youtube/Signature.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/youtube/Signature.hpp')
-rw-r--r--plugins/youtube/Signature.hpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/plugins/youtube/Signature.hpp b/plugins/youtube/Signature.hpp
new file mode 100644
index 0000000..7456615
--- /dev/null
+++ b/plugins/youtube/Signature.hpp
@@ -0,0 +1,46 @@
+#pragma once
+
+#include "../../include/AsyncTask.hpp"
+#include <string>
+#include <vector>
+#include <map>
+#include <mutex>
+#include <time.h>
+
+namespace QuickMedia {
+ // Thread safe
+ class YoutubeSignatureDecryptor {
+ public:
+ static YoutubeSignatureDecryptor& get_instance();
+ bool decrypt(const std::string &s, const std::string &sp, std::string &sig_key, std::string &sig_value);
+ private:
+ YoutubeSignatureDecryptor();
+ ~YoutubeSignatureDecryptor();
+ YoutubeSignatureDecryptor(const YoutubeSignatureDecryptor&) = delete;
+ YoutubeSignatureDecryptor& operator=(const YoutubeSignatureDecryptor&) = delete;
+
+ struct DecryptFuncCall {
+ std::string func_name;
+ long arg;
+ };
+
+ enum class DecryptFunction {
+ REVERSE,
+ SPLICE,
+ SWAP
+ };
+
+ bool js_code_to_operations(const std::string &function_body_str, const std::string &var_body_str, std::vector<DecryptFuncCall> &new_func_calls, std::map<std::string, DecryptFunction> &new_func_decls);
+ int update_decrypt_function();
+ private:
+ AsyncTask<void> poll_task;
+ std::mutex update_signature_mutex;
+ std::string decryption_function;
+ time_t decrypt_function_last_updated = 0;
+ bool running = false;
+ bool up_to_date = false;
+
+ std::vector<DecryptFuncCall> func_calls;
+ std::map<std::string, DecryptFunction> func_decls;
+ };
+} \ No newline at end of file