diff options
| author | Teddy Wing | 2018-11-08 00:51:44 +0100 | 
|---|---|---|
| committer | Teddy Wing | 2018-11-08 00:59:48 +0100 | 
| commit | d226efe56948b5ef3aeae8b276c3b6332e008e95 (patch) | |
| tree | ec797fa2446676aef4f6858d3fd6de17e4883113 /license-generator | |
| parent | d5e6978d7efc770c4ae3dd2af0a25ff463a63265 (diff) | |
| download | dome-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
Diffstat (limited to 'license-generator')
| -rw-r--r-- | license-generator/Cargo.lock | 4 | ||||
| -rw-r--r-- | license-generator/Cargo.toml | 5 | ||||
| -rw-r--r-- | license-generator/paddle/Cargo.toml | 5 | ||||
| -rw-r--r-- | license-generator/paddle/src/lib.rs | 40 | 
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() { +    } +}  | 
