mirror of
https://github.com/hak5/nano-tetra-modules.git
synced 2025-10-29 16:58:09 +00:00
Add modules to repository
This commit is contained in:
83
APITokens/api/module.php
Normal file
83
APITokens/api/module.php
Normal file
@@ -0,0 +1,83 @@
|
||||
<?php namespace pineapple;
|
||||
|
||||
require_once('DatabaseConnection.php');
|
||||
|
||||
class APITokens extends Module
|
||||
{
|
||||
private $dbConnection;
|
||||
|
||||
const DATABASE = "/etc/pineapple/pineapple.db";
|
||||
|
||||
public function __construct($request)
|
||||
{
|
||||
parent::__construct($request, __CLASS__);
|
||||
$this->dbConnection = new DatabaseConnection(self::DATABASE);
|
||||
$this->dbConnection->exec("CREATE TABLE IF NOT EXISTS api_tokens (token VARCHAR NOT NULL, name VARCHAR NOT NULL);");
|
||||
}
|
||||
|
||||
public function getApiTokens()
|
||||
{
|
||||
$this->response = array("tokens" => $this->dbConnection->query("SELECT ROWID, token, name FROM api_tokens;"));
|
||||
}
|
||||
|
||||
public function checkApiToken()
|
||||
{
|
||||
if (isset($this->request->token)) {
|
||||
$token = $this->request->token;
|
||||
$result = $this->dbConnection->query("SELECT token FROM api_tokens WHERE token='%s';", $token);
|
||||
if (!empty($result) && isset($result[0]["token"]) && $result[0]["token"] === $token) {
|
||||
$this->response = array("valid" => true);
|
||||
}
|
||||
}
|
||||
$this->response = array("valid" => false);
|
||||
}
|
||||
|
||||
public function addApiToken()
|
||||
{
|
||||
if (isset($this->request->name)) {
|
||||
$token = hash('sha512', openssl_random_pseudo_bytes(32));
|
||||
$name = $this->request->name;
|
||||
$this->dbConnection->exec("INSERT INTO api_tokens(token, name) VALUES('%s','%s');", $token, $name);
|
||||
$this->response = array("success" => true, "token" => $token, "name" => $name);
|
||||
} else {
|
||||
$this->error = "Missing token name";
|
||||
}
|
||||
}
|
||||
|
||||
public function revokeApiToken()
|
||||
{
|
||||
if (isset($this->request->id)) {
|
||||
$this->dbConnection->exec("DELETE FROM api_tokens WHERE ROWID='%s'", $this->request->id);
|
||||
} elseif (isset($this->request->token)) {
|
||||
$this->dbConnection->exec("DELETE FROM api_tokens WHERE token='%s'", $this->request->token);
|
||||
} elseif (isset($this->request->name)) {
|
||||
$this->dbConnection->exec("DELETE FROM api_tokens WHERE name='%s'", $this->request->name);
|
||||
} else {
|
||||
$this->error = "The revokeApiToken API call requires either a 'id', 'token', or 'name' parameter";
|
||||
}
|
||||
}
|
||||
|
||||
public function route()
|
||||
{
|
||||
switch ($this->request->action) {
|
||||
case 'checkApiToken':
|
||||
$this->checkApiToken();
|
||||
break;
|
||||
|
||||
case 'addApiToken':
|
||||
$this->addApiToken();
|
||||
break;
|
||||
|
||||
case 'getApiTokens':
|
||||
$this->getApiTokens();
|
||||
break;
|
||||
|
||||
case 'revokeApiToken':
|
||||
$this->revokeApiToken();
|
||||
break;
|
||||
|
||||
default:
|
||||
$this->error = "Unknown action";
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user