forked from lbryio/lbry.com
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOpsActions.class.php
88 lines (70 loc) · 3.09 KB
/
OpsActions.class.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
<?php
class OpsActions extends Actions
{
public static function executeClearCache(): array
{
if (!Apc::isEnabled()) {
return View::renderJson(['success' => false, 'error' => 'Cache not enabled']);
}
apcu_clear_cache();
return View::renderJson(['success' => true]);
}
public static function executePostCommit(): array
{
$payload = Request::getParam('payload');
if (!$payload) {
return NavActions::execute400(['error' => 'No payload']);
}
$payload = json_decode($payload, true);
if ($payload['ref'] === 'refs/heads/master') {
$sig = Request::getHttpHeader('X-Hub-Signature');
if (!$sig) {
return NavActions::execute400(['error' => "HTTP header 'X-Hub-Signature' is missing."]);
}
list($algo, $hash) = explode('=', Request::getHttpHeader('X-Hub-Signature'), 2) + ['', ''];
if (!in_array($algo, hash_algos(), true)) {
return NavActions::execute400(['error' => 'Invalid hash algorithm "' . htmlspecialchars($algo) . '"']);
}
$rawPost = file_get_contents('php://input');
$secret = Config::get(Config::GITHUB_KEY);
if ($hash !== hash_hmac($algo, $rawPost, $secret)) {
return NavActions::execute400(['error' => 'Hash does not match.']);
}
file_put_contents(ROOT_DIR . '/data/writeable/NEEDS_UPDATE', '');
}
return [null, []];
}
public static function executeLogUpload(): array
{
$log = Request::getPostParam('log') ? urldecode(Request::getPostParam('log')) : null;
if (Request::getPostParam('name')) {
$name = substr(trim(urldecode(Request::getPostParam('name'))), 0, 50);
} elseif (Request::getPostParam('date')) {
$name = substr(trim(urldecode(Request::getPostParam('date'))), 0, 20) . '_' .
substr(trim(urldecode(Request::getPostParam('hash'))), 0, 20) . '_' .
substr(trim(urldecode(Request::getPostParam('sys'))), 0, 50) . '_' .
substr(trim(urldecode(Request::getPostParam('type'))), 0, 20);
} else {
$name = null;
}
$name = preg_replace('/[^A-Za-z0-9_-]+/', '', $name);
if (!$log || !$name) {
return NavActions::execute400(['error' => "Required params: log, name"]);
}
$awsKey = Config::get(Config::AWS_LOG_ACCESS_KEY);
$awsSecret = Config::get(Config::AWS_LOG_SECRET_KEY);
if (!$log || !$name) {
throw new RuntimeException('Missing AWS credentials');
}
$tmpFile = tempnam(sys_get_temp_dir(), 'lbryinstalllog');
file_put_contents($tmpFile, $log);
if (filesize($tmpFile) > 1024 * 1024 * 2) {
return NavActions::execute400(['error' => 'Log file is too large']);
}
S3::$useExceptions = true;
S3::setAuth($awsKey, $awsSecret);
S3::putObject(S3::inputFile($tmpFile, false), 'lbry-install-logs', $name);
unlink($tmpFile);
return [null, []];
}
}