Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/3rdparty.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'laravel/serializable-closure/src/Serializers/Signed.php')
-rw-r--r--laravel/serializable-closure/src/Serializers/Signed.php88
1 files changed, 88 insertions, 0 deletions
diff --git a/laravel/serializable-closure/src/Serializers/Signed.php b/laravel/serializable-closure/src/Serializers/Signed.php
new file mode 100644
index 00000000..a47d367e
--- /dev/null
+++ b/laravel/serializable-closure/src/Serializers/Signed.php
@@ -0,0 +1,88 @@
+<?php
+
+namespace Laravel\SerializableClosure\Serializers;
+
+use Laravel\SerializableClosure\Contracts\Serializable;
+use Laravel\SerializableClosure\Exceptions\InvalidSignatureException;
+use Laravel\SerializableClosure\Exceptions\MissingSecretKeyException;
+
+class Signed implements Serializable
+{
+ /**
+ * The signer that will sign and verify the closure's signature.
+ *
+ * @var \Laravel\SerializableClosure\Contracts\Signer|null
+ */
+ public static $signer;
+
+ /**
+ * The closure to be serialized/unserialized.
+ *
+ * @var \Closure
+ */
+ protected $closure;
+
+ /**
+ * Creates a new serializable closure instance.
+ *
+ * @param \Closure $closure
+ * @return void
+ */
+ public function __construct($closure)
+ {
+ $this->closure = $closure;
+ }
+
+ /**
+ * Resolve the closure with the given arguments.
+ *
+ * @return mixed
+ */
+ public function __invoke()
+ {
+ return call_user_func_array($this->closure, func_get_args());
+ }
+
+ /**
+ * Gets the closure.
+ *
+ * @return \Closure
+ */
+ public function getClosure()
+ {
+ return $this->closure;
+ }
+
+ /**
+ * Get the serializable representation of the closure.
+ *
+ * @return array
+ */
+ public function __serialize()
+ {
+ if (! static::$signer) {
+ throw new MissingSecretKeyException();
+ }
+
+ return static::$signer->sign(
+ serialize(new Native($this->closure))
+ );
+ }
+
+ /**
+ * Restore the closure after serialization.
+ *
+ * @param array $signature
+ * @return void
+ *
+ * @throws \Laravel\SerializableClosure\Exceptions\InvalidSignatureException
+ */
+ public function __unserialize($signature)
+ {
+ if (static::$signer && ! static::$signer->verify($signature)) {
+ throw new InvalidSignatureException();
+ }
+
+ $this->closure = unserialize($signature['serializable'])->getClosure();
+ }
+}