This repository has been archived by the owner on Apr 24, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 33
/
version-new.php
106 lines (92 loc) · 4.16 KB
/
version-new.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?PHP
require 'includes/master.inc.php';
$Auth->requireAdmin('login.php');
$nav = 'applications';
$app = new Application($_GET['id']);
if(!$app->ok()) redirect('index.php');
if(isset($_POST['btnCreateVersion']))
{
$Error->blank($_POST['version_number'], 'Version Number');
$Error->blank($_POST['human_version'], 'Human Readable Version Number');
$Error->upload($_FILES['file'], 'file');
if($Error->ok())
{
$v = new Version();
$v->app_id = $app->id;
$v->version_number = $_POST['version_number'];
$v->human_version = $_POST['human_version'];
$v->release_notes = $_POST['release_notes'];
$v->dt = dater();
$v->downloads = 0;
$v->filesize = filesize($_FILES['file']['tmp_name']);
$v->signature = sign_file($_FILES['file']['tmp_name'], $app->sparkle_pkey);
$object = strtolower(preg_replace('/[^a-zA-Z0-9]/', '', $app->name)) . "_" . $v->version_number . "." . substr($_FILES['file']['name'], -3);
$v->url = slash($app->s3path) . $object;
$info = parse_url($app->s3path);
$object = slash($info['path']) . $object;
chmod($_FILES['file']['tmp_name'], 0755);
$s3 = new S3($app->s3key, $app->s3pkey);
$s3->uploadFile($app->s3bucket, $object, $_FILES['file']['tmp_name'], true);
$v->insert();
redirect('versions.php?id=' . $app->id);
}
else
{
$version_number = $_POST['version_number'];
$human_version = $_POST['human_version'];
$release_notes = $_POST['release_notes'];
}
}
else
{
$version_number = '';
$human_version = '';
$release_notes = '';
}
// It would be better to use PHP's native OpenSSL extension
// but it's PHP 5.3+ only. Too early to force that requirement
// upon users.
function sign_file($filename, $keydata)
{
$binary_hash = shell_exec('/usr/bin/openssl dgst -sha1 -binary < ' . $filename);
$hash_tmp_file = tempnam('/tmp', 'foo');
file_put_contents($hash_tmp_file, $binary_hash);
$key_tmp_file = tempnam('/tmp', 'bar');
if(strpos($keydata, '-----BEGIN DSA PRIVATE KEY-----') === false)
$keydata = "-----BEGIN DSA PRIVATE KEY-----\n" . $keydata . "\n-----END DSA PRIVATE KEY-----\n";
file_put_contents($key_tmp_file, $keydata);
$signed_data = shell_exec("/usr/bin/openssl dgst -dss1 -sign $key_tmp_file < $hash_tmp_file");
return base64_encode($signed_data);
}
?>
<?PHP include('inc/header.inc.php'); ?>
<div id="bd">
<div id="yui-main">
<div class="yui-b"><div class="yui-g">
<div class="block tabs spaces">
<?PHP echo $Error; ?>
<div class="hd">
<h2>Applications</h2>
<ul>
<li><a href="application.php?id=<?PHP echo $app->id; ?>"><?PHP echo $app->name; ?></a></li>
<li><a href="versions.php?id=<?PHP echo $app->id; ?>">Versions</a></li>
<li class="active"><a href="version-new.php?id=<?PHP echo $app->id; ?>">Release New Version</a></li>
</ul>
<div class="clear"></div>
</div>
<div class="bd">
<form action="version-new.php?id=<?PHP echo $app->id; ?>" method="post" enctype="multipart/form-data">
<p><label for="version_number">Sparkle Version Number</label> <input type="text" name="version_number" id="version_number" value="<?PHP echo $version_number;?>" class="text"></p>
<p><label for="human_version">Human Readable Version Number</label> <input type="text" name="human_version" id="human_version" value="<?PHP echo $human_version;?>" class="text"></p>
<p><label for="release_notes">Release Notes</label> <textarea class="text" name="release_notes" id="release_notes"><?PHP echo $release_notes; ?></textarea></p>
<p><label for="file">Application Archive</label> <input type="file" name="file" id="file"></p>
<p><input type="submit" name="btnCreateVersion" value="Create Version" id="btnCreateVersion"></p>
</form>
</div>
</div>
</div></div>
</div>
<div id="sidebar" class="yui-b">
</div>
</div>
<?PHP include('inc/footer.inc.php'); ?>