aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-rw-r--r--crates/shirabe-php-shim/src/lib.rs15
-rw-r--r--crates/shirabe/src/downloader/phar_downloader.rs25
2 files changed, 40 insertions, 0 deletions
diff --git a/crates/shirabe-php-shim/src/lib.rs b/crates/shirabe-php-shim/src/lib.rs
index 03db936..ff9909d 100644
--- a/crates/shirabe-php-shim/src/lib.rs
+++ b/crates/shirabe-php-shim/src/lib.rs
@@ -40,6 +40,21 @@ pub fn hash(algo: &str, data: &str) -> String {
}
#[derive(Debug)]
+pub struct Phar {
+ path: String,
+}
+
+impl Phar {
+ pub fn new(a: String) -> Self {
+ todo!()
+ }
+
+ pub fn extract_to(&self, a: &str, b: Option<()>, c: bool) {
+ todo!()
+ }
+}
+
+#[derive(Debug)]
pub struct PharData {
path: String,
}
diff --git a/crates/shirabe/src/downloader/phar_downloader.rs b/crates/shirabe/src/downloader/phar_downloader.rs
index 4b95e81..57610f1 100644
--- a/crates/shirabe/src/downloader/phar_downloader.rs
+++ b/crates/shirabe/src/downloader/phar_downloader.rs
@@ -1 +1,26 @@
//! ref: composer/src/Composer/Downloader/PharDownloader.php
+
+use anyhow::Result;
+use shirabe_php_shim::Phar;
+use shirabe_external_packages::react::promise::promise_interface::PromiseInterface;
+use crate::downloader::archive_downloader::ArchiveDownloader;
+use crate::package::package_interface::PackageInterface;
+
+#[derive(Debug)]
+pub struct PharDownloader {
+ inner: ArchiveDownloader,
+}
+
+impl PharDownloader {
+ pub(crate) fn extract(&self, package: &dyn PackageInterface, file: &str, path: &str) -> Result<Box<dyn PromiseInterface>> {
+ // Can throw an UnexpectedValueException
+ let archive = Phar::new(file.to_string());
+ archive.extract_to(path, None, true);
+ // TODO: handle openssl signed phars
+ // https://github.com/composer/composer/pull/33#issuecomment-2250768
+ // https://github.com/koto/phar-util
+ // http://blog.kotowicz.net/2010/08/hardening-php-how-to-securely-include.html
+
+ Ok(shirabe_external_packages::react::promise::resolve(None))
+ }
+}