Updated Project Source code (I don't remember what i did.)
This commit is contained in:
parent
fc2e4d5a73
commit
4879fdf36d
10 changed files with 289 additions and 10 deletions
162
.github/workflows/ncc_workflow.yml
vendored
Normal file
162
.github/workflows/ncc_workflow.yml
vendored
Normal file
|
@ -0,0 +1,162 @@
|
||||||
|
name: CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- '**'
|
||||||
|
release:
|
||||||
|
types: [created]
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: php:8.3
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
apt update -yqq
|
||||||
|
apt install git libpq-dev libzip-dev zip make wget gnupg -yqq
|
||||||
|
|
||||||
|
- name: Install phive
|
||||||
|
run: |
|
||||||
|
wget -O phive.phar https://phar.io/releases/phive.phar
|
||||||
|
wget -O phive.phar.asc https://phar.io/releases/phive.phar.asc
|
||||||
|
gpg --keyserver hkps://keys.openpgp.org --recv-keys 0x9D8A98B29B2D5D79
|
||||||
|
gpg --verify phive.phar.asc phive.phar
|
||||||
|
chmod +x phive.phar
|
||||||
|
mv phive.phar /usr/local/bin/phive
|
||||||
|
|
||||||
|
- name: Install phab
|
||||||
|
run: |
|
||||||
|
phive install phpab --global --trust-gpg-keys 0x2A8299CE842DD38C
|
||||||
|
|
||||||
|
- name: Install latest version of NCC
|
||||||
|
run: |
|
||||||
|
git clone https://git.n64.cc/nosial/ncc.git
|
||||||
|
cd ncc
|
||||||
|
make redist
|
||||||
|
NCC_DIR=$(find build/ -type d -name "ncc_*" | head -n 1)
|
||||||
|
if [ -z "$NCC_DIR" ]; then
|
||||||
|
echo "NCC build directory not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
php "$NCC_DIR/INSTALL" --auto
|
||||||
|
cd .. && rm -rf ncc
|
||||||
|
|
||||||
|
- name: Build project
|
||||||
|
run: |
|
||||||
|
ncc build --config release --log-level debug
|
||||||
|
|
||||||
|
- name: Upload build artifacts
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: Socialbox_build
|
||||||
|
path: build/release/net.nosial.socialbox.ncc
|
||||||
|
|
||||||
|
check-phpunit:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
phpunit-exists: ${{ steps.check.outputs.phpunit-exists }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
- name: Check for phpunit.xml
|
||||||
|
id: check
|
||||||
|
run: |
|
||||||
|
if [ -f phpunit.xml ]; then
|
||||||
|
echo "phpunit-exists=true" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "phpunit-exists=false" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
|
|
||||||
|
test:
|
||||||
|
needs: [build, check-phpunit]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: php:8.3
|
||||||
|
if: needs.check-phpunit.outputs.phpunit-exists == 'true'
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Download build artifacts
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: Socialbox_build
|
||||||
|
path: Socialbox_build # Adjust this to download the artifact directly under 'Socialbox_build'
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
apt update -yqq
|
||||||
|
apt install git libpq-dev libzip-dev zip make wget gnupg -yqq
|
||||||
|
curl -sSLf -o /usr/local/bin/install-php-extensions https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions
|
||||||
|
chmod +x /usr/local/bin/install-php-extensions
|
||||||
|
install-php-extensions zip
|
||||||
|
|
||||||
|
- name: Install phive
|
||||||
|
run: |
|
||||||
|
wget -O phive.phar https://phar.io/releases/phive.phar
|
||||||
|
wget -O phive.phar.asc https://phar.io/releases/phive.phar.asc
|
||||||
|
gpg --keyserver hkps://keys.openpgp.org --recv-keys 0x9D8A98B29B2D5D79
|
||||||
|
gpg --verify phive.phar.asc phive.phar
|
||||||
|
chmod +x phive.phar
|
||||||
|
mv phive.phar /usr/local/bin/phive
|
||||||
|
|
||||||
|
- name: Install phab
|
||||||
|
run: |
|
||||||
|
phive install phpab --global --trust-gpg-keys 0x2A8299CE842DD38C
|
||||||
|
|
||||||
|
- name: Install latest version of NCC
|
||||||
|
run: |
|
||||||
|
git clone https://git.n64.cc/nosial/ncc.git
|
||||||
|
cd ncc
|
||||||
|
make redist
|
||||||
|
NCC_DIR=$(find build/ -type d -name "ncc_*" | head -n 1)
|
||||||
|
if [ -z "$NCC_DIR" ]; then
|
||||||
|
echo "NCC build directory not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
php "$NCC_DIR/INSTALL" --auto
|
||||||
|
cd .. && rm -rf ncc
|
||||||
|
|
||||||
|
- name: Install NCC packages
|
||||||
|
run: |
|
||||||
|
ncc package install --package="Socialbox_build/net.nosial.socialbox.ncc" --build-source --reinstall -y --log-level debug
|
||||||
|
|
||||||
|
- name: Run PHPUnit tests
|
||||||
|
run: |
|
||||||
|
wget https://phar.phpunit.de/phpunit-11.3.phar
|
||||||
|
php phpunit-11.3.phar --configuration phpunit.xml
|
||||||
|
|
||||||
|
release:
|
||||||
|
needs: [build, test]
|
||||||
|
permissions: write-all
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: php:8.3
|
||||||
|
if: github.event_name == 'release'
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Download build artifacts
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: Socialbox_build
|
||||||
|
path: Socialbox_build
|
||||||
|
|
||||||
|
- name: Upload to GitHub Release
|
||||||
|
uses: softprops/action-gh-release@v1
|
||||||
|
with:
|
||||||
|
files: |
|
||||||
|
Socialbox_build/net.nosial.socialbox.ncc
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
24
main
Normal file
24
main
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
if (PHP_SAPI !== 'cli')
|
||||||
|
{
|
||||||
|
print('net.nosial.socialbox must be run from the command line.' . PHP_EOL);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!isset($argv))
|
||||||
|
{
|
||||||
|
if(isset($_SERVER['argv']))
|
||||||
|
{
|
||||||
|
$argv = $_SERVER['argv'];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print('net.nosial.socialbox failed to run, no $argv found.' . PHP_EOL);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
require('ncc');
|
||||||
|
\ncc\Classes\Runtime::import('net.nosial.socialbox', 'latest');
|
||||||
|
exit(\Socialbox\Program::main($argv));
|
|
@ -37,11 +37,7 @@ abstract class Method
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(!SessionManager::sessionExists($request->getSessionUuid()))
|
// NOTE: If the session UUID was provided, it has already been validated up until this point
|
||||||
{
|
|
||||||
throw new StandardException(sprintf("The requested session %s was not found", $request->getSessionUuid()), StandardError::SESSION_NOT_FOUND);
|
|
||||||
}
|
|
||||||
|
|
||||||
return SessionManager::getSession($request->getSessionUuid());
|
return SessionManager::getSession($request->getSessionUuid());
|
||||||
}
|
}
|
||||||
catch(DatabaseOperationException $e)
|
catch(DatabaseOperationException $e)
|
||||||
|
|
27
src/Socialbox/Classes/Configuration.php
Normal file
27
src/Socialbox/Classes/Configuration.php
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Socialbox\Classes;
|
||||||
|
|
||||||
|
class Configuration
|
||||||
|
{
|
||||||
|
private static ?array $configuration = null;
|
||||||
|
|
||||||
|
public static function getConfiguration(): array
|
||||||
|
{
|
||||||
|
if(self::$configuration === null)
|
||||||
|
{
|
||||||
|
$config = new \ConfigLib\Configuration('net.nosial.socialbox');
|
||||||
|
|
||||||
|
$config->setDefault('database.host', '127.0.0.1');
|
||||||
|
$config->setDefault('database.port', 3306);
|
||||||
|
$config->setDefault('database.username', 'root');
|
||||||
|
$config->setDefault('database.password', null);
|
||||||
|
$config->setDefault('database.name', 'test');
|
||||||
|
$config->save();
|
||||||
|
|
||||||
|
self::$configuration = $config->getConfiguration();
|
||||||
|
}
|
||||||
|
|
||||||
|
return self::$configuration;
|
||||||
|
}
|
||||||
|
}
|
|
@ -13,7 +13,7 @@ class Database
|
||||||
private static ?PDO $instance = null;
|
private static ?PDO $instance = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return mysqli
|
* @return PDO
|
||||||
* @throws DatabaseOperationException
|
* @throws DatabaseOperationException
|
||||||
*/
|
*/
|
||||||
public static function getConnection(): PDO
|
public static function getConnection(): PDO
|
||||||
|
@ -22,7 +22,7 @@ class Database
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$dsn = 'mysql:host=172.27.0.1;dbname=socialbox;port=3306;charset=utf8mb4';
|
$dsn = 'mysql:host=127.0.0.1;dbname=socialbox;port=3306;charset=utf8mb4';
|
||||||
self::$instance = new PDO($dsn, 'root', 'root');
|
self::$instance = new PDO($dsn, 'root', 'root');
|
||||||
|
|
||||||
// Set some common PDO attributes for better error handling
|
// Set some common PDO attributes for better error handling
|
||||||
|
|
|
@ -32,12 +32,12 @@
|
||||||
{
|
{
|
||||||
if($publicKey === '')
|
if($publicKey === '')
|
||||||
{
|
{
|
||||||
throw new InvalidArgumentException('The public key cannot be empty', StandardError::RPC_INVALID_ARGUMENTS);
|
throw new InvalidArgumentException('The public key cannot be empty', 400);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!Cryptography::validatePublicKey($publicKey))
|
if(!Cryptography::validatePublicKey($publicKey))
|
||||||
{
|
{
|
||||||
throw new InvalidArgumentException('The given public key is invalid', StandardError::INVALID_PUBLIC_KEY);
|
throw new InvalidArgumentException('The given public key is invalid', 400);
|
||||||
}
|
}
|
||||||
|
|
||||||
$publicKey = Utilities::base64decode($publicKey);
|
$publicKey = Utilities::base64decode($publicKey);
|
||||||
|
|
18
src/Socialbox/Program.php
Normal file
18
src/Socialbox/Program.php
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Socialbox;
|
||||||
|
|
||||||
|
class Program
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Socialbox main entry point
|
||||||
|
*
|
||||||
|
* @param string[] $args Command-line arguments
|
||||||
|
* @return int Exit code
|
||||||
|
*/
|
||||||
|
public static function main(array $args): int
|
||||||
|
{
|
||||||
|
print("Hello World from net.nosial.socialbox!" . PHP_EOL);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace Socialbox;
|
namespace Socialbox;
|
||||||
|
|
||||||
|
use ConfigLib\Configuration;
|
||||||
use Socialbox\Classes\RpcHandler;
|
use Socialbox\Classes\RpcHandler;
|
||||||
use Socialbox\Enums\StandardError;
|
use Socialbox\Enums\StandardError;
|
||||||
use Socialbox\Enums\StandardMethods;
|
use Socialbox\Enums\StandardMethods;
|
||||||
|
@ -9,6 +10,11 @@
|
||||||
|
|
||||||
class Socialbox
|
class Socialbox
|
||||||
{
|
{
|
||||||
|
public static function getConfiguration(): array
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public static function handleRpc(): void
|
public static function handleRpc(): void
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -29,7 +35,7 @@
|
||||||
|
|
||||||
if($method === false)
|
if($method === false)
|
||||||
{
|
{
|
||||||
$response = $rpcRequest->produceError(StandardError::RPC_METHOD_NOT_FOUND, 'The requested method does not exist');;
|
$response = $rpcRequest->produceError(StandardError::RPC_METHOD_NOT_FOUND, 'The requested method does not exist');
|
||||||
if($response !== null)
|
if($response !== null)
|
||||||
{
|
{
|
||||||
$results[] = $response;
|
$results[] = $response;
|
||||||
|
|
8
src/Socialbox/Socialbox/Socialbox.php
Normal file
8
src/Socialbox/Socialbox/Socialbox.php
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Socialbox;
|
||||||
|
|
||||||
|
class Socialbox
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
38
tests/Socialbox/Classes/ConfigurationTest.php
Normal file
38
tests/Socialbox/Classes/ConfigurationTest.php
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Socialbox\Classes;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Socialbox's Configuration Test Class
|
||||||
|
*
|
||||||
|
* This is a test suite for testing the "getConfiguration" method in the "Configuration" class.
|
||||||
|
*/
|
||||||
|
class ConfigurationTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Test the "getConfiguration" method in "Configuration" class.
|
||||||
|
*/
|
||||||
|
public function testGetConfiguration(): void
|
||||||
|
{
|
||||||
|
$config = Configuration::getConfiguration();
|
||||||
|
$this->assertIsArray($config, "Configuration should be an array.");
|
||||||
|
|
||||||
|
//Assert that all the default configuration exists
|
||||||
|
$this->assertArrayHasKey('database.host', $config);
|
||||||
|
$this->assertEquals($config['database.host'], '127.0.0.1');
|
||||||
|
|
||||||
|
$this->assertArrayHasKey('database.port', $config);
|
||||||
|
$this->assertEquals($config['database.port'], 3306);
|
||||||
|
|
||||||
|
$this->assertArrayHasKey('database.username', $config);
|
||||||
|
$this->assertEquals($config['database.username'], 'root');
|
||||||
|
|
||||||
|
$this->assertArrayHasKey('database.password', $config);
|
||||||
|
$this->assertNull($config['database.password'], 'null should be the value of database.password.');
|
||||||
|
|
||||||
|
$this->assertArrayHasKey('database.name', $config);
|
||||||
|
$this->assertEquals($config['database.name'], 'test');
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue