init ci
This commit is contained in:
commit
1f81c383eb
2 files changed
+98
No files matched your search
+45
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
class Config {
|
||||
private const NEXTCLOUD_BASE_URL = "NCBGW_BASE_URL";
|
||||
private const SECRET = "NCBGW_SECRET";
|
||||
private const BASIC_AUTH_USERNAME = 'NCBGW_USERNAME';
|
||||
private const BASIC_AUTH_PASSWORD = 'NCBGW_PASSWORD';
|
||||
|
||||
private $nextCloudBaseUrl;
|
||||
private $secret;
|
||||
private $username;
|
||||
private $password;
|
||||
|
||||
function __construct($config) {
|
||||
$this->nextCloudBaseUrl = $this->getRequired($config, Config::NEXTCLOUD_BASE_URL);
|
||||
$this->secret = $this->getRequired($config, Config::SECRET);
|
||||
$this->username = $this->getRequired($config, Config::BASIC_AUTH_USERNAME);
|
||||
$this->password = $this->getRequired($config, Config::BASIC_AUTH_PASSWORD);
|
||||
}
|
||||
|
||||
private function getRequired($config, $key) {
|
||||
if (array_key_exists($key, $config)) {
|
||||
return $config[$key];
|
||||
} else {
|
||||
throw new Exception("missing configuration " . $key);
|
||||
}
|
||||
}
|
||||
|
||||
public function getSecret() {
|
||||
return $this->secret;
|
||||
}
|
||||
|
||||
public function getUrl() {
|
||||
return $this->nextCloudBaseUrl . '/ocs/v2.php/apps/spreed/api/v1';
|
||||
}
|
||||
|
||||
public function getUsername() {
|
||||
return $this->username;
|
||||
}
|
||||
|
||||
public function getPassword() {
|
||||
return $this->password;
|
||||
}
|
||||
}
|
||||
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
if (!isset($_SERVER['PHP_AUTH_USER'])) {
|
||||
header('WWW-Authenticate: Basic realm="NCBGW"');
|
||||
header('HTTP/1.0 401 Unauthorized');
|
||||
die('provide credentials');
|
||||
}
|
||||
|
||||
require_once 'config.php';
|
||||
$config = new Config($_ENV);
|
||||
|
||||
// check basic auth
|
||||
if (!$config->getUsername() == $_SERVER['PHP_AUTH_USER']
|
||||
|| !$config->getPassword() == $_SERVER['PHP_AUTH_PW']) {
|
||||
die('invalid credentials');
|
||||
}
|
||||
|
||||
if (!array_key_exists('action', $_GET)
|
||||
|| !array_key_exists('token', $_GET)) {
|
||||
die("required parameters not given");
|
||||
}
|
||||
|
||||
//$message = file_get_contents('php://stdin');
|
||||
$message = file_get_contents('php://input');
|
||||
$token = $_GET['token'];
|
||||
$url = $config->getUrl() . '/bot/' . $token . '/message';
|
||||
$random = bin2hex(random_bytes(32));
|
||||
|
||||
$digest = hash_hmac('sha256', $random . $message, $config->getSecret());
|
||||
|
||||
$data = json_encode(
|
||||
array(
|
||||
'message' => $message
|
||||
)
|
||||
);
|
||||
|
||||
$opts = array('http' =>
|
||||
array(
|
||||
'method' => 'POST',
|
||||
'header' => array(
|
||||
'X-Nextcloud-Talk-Bot-Random: ' . $random,
|
||||
'X-Nextcloud-Talk-Bot-Signature: ' . $digest,
|
||||
'OCS-APIRequest: true',
|
||||
'Content-Type: application/json'
|
||||
),
|
||||
'content' => $data
|
||||
)
|
||||
);
|
||||
|
||||
$context = stream_context_create($opts);
|
||||
|
||||
$result = file_get_contents($url, false, $context);
|
||||
var_dump($result);
|
||||
Reference in new issue
Block a user