aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2018-11-08 00:51:44 +0100
committerTeddy Wing2018-11-08 00:59:48 +0100
commitd226efe56948b5ef3aeae8b276c3b6332e008e95 (patch)
treeec797fa2446676aef4f6858d3fd6de17e4883113
parentd5e6978d7efc770c4ae3dd2af0a25ff463a63265 (diff)
downloaddome-key-web-d226efe56948b5ef3aeae8b276c3b6332e008e95.tar.bz2
Add 'paddle' crate
Should verify a Paddle webhook. This ensures that the request really does come from Paddle. In order to verify the request, we need to sign the serialized POST parameters. And, weirdly, Paddle requires you to serialize parameters in PHP's serialization format. Using this Gist by 'drewmccormack' as a reference for the format: https://gist.github.com/drewmccormack/a51b18ffeda8f596a11a8623481344d8
-rw-r--r--license-generator/Cargo.lock4
-rw-r--r--license-generator/Cargo.toml5
-rw-r--r--license-generator/paddle/Cargo.toml5
-rw-r--r--license-generator/paddle/src/lib.rs40
4 files changed, 53 insertions, 1 deletions
diff --git a/license-generator/Cargo.lock b/license-generator/Cargo.lock
index cee7dd9..d615538 100644
--- a/license-generator/Cargo.lock
+++ b/license-generator/Cargo.lock
@@ -147,6 +147,10 @@ dependencies = [
]
[[package]]
+name = "paddle"
+version = "0.0.1"
+
+[[package]]
name = "pkg-config"
version = "0.3.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/license-generator/Cargo.toml b/license-generator/Cargo.toml
index 55d1a3f..99c9a3c 100644
--- a/license-generator/Cargo.toml
+++ b/license-generator/Cargo.toml
@@ -6,4 +6,7 @@ version = "0.0.1"
fastcgi = "1.0.0"
[workspace]
-members = ["aquatic-prime"]
+members = [
+ "aquatic-prime",
+ "paddle",
+]
diff --git a/license-generator/paddle/Cargo.toml b/license-generator/paddle/Cargo.toml
new file mode 100644
index 0000000..0a4f677
--- /dev/null
+++ b/license-generator/paddle/Cargo.toml
@@ -0,0 +1,5 @@
+[package]
+name = "paddle"
+version = "0.0.1"
+
+[dependencies]
diff --git a/license-generator/paddle/src/lib.rs b/license-generator/paddle/src/lib.rs
new file mode 100644
index 0000000..a1db417
--- /dev/null
+++ b/license-generator/paddle/src/lib.rs
@@ -0,0 +1,40 @@
+// https://paddle.com/docs/reference-verifying-webhooks/
+fn verify_signature<'a, I>(params: I) -> bool
+where I: ExactSizeIterator<Item = (&'a str, &'a str)> {
+ false
+}
+
+fn php_serialize<'a, I>(pairs: I) -> String
+where I: ExactSizeIterator<Item = (&'a str, &'a str)> {
+ let mut serialized = String::with_capacity(500);
+
+ serialized.push_str(
+ &format!("a:{pairs_count}:{{", pairs_count = pairs.len())
+ );
+
+ for (key, value) in pairs {
+ serialized.push_str(
+ &format!(
+ "s:{key_length}:\"{key}\";s:{value_length}:\"{value}\";",
+ key_length = key.len(),
+ key = key,
+ value_length = value.len(),
+ value = value
+ )
+ );
+ }
+
+ serialized.push_str("}");
+
+ serialized
+}
+
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn php_serialize_serializes_key_values_as_php_string() {
+ }
+}