Updated Project Source code (I don't remember what i did.)

This commit is contained in:
netkas 2024-09-24 14:20:49 -04:00
parent fc2e4d5a73
commit 4879fdf36d
10 changed files with 289 additions and 10 deletions

162
.github/workflows/ncc_workflow.yml vendored Normal file
View 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
View 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));

View file

@ -37,11 +37,7 @@ abstract class Method
try
{
if(!SessionManager::sessionExists($request->getSessionUuid()))
{
throw new StandardException(sprintf("The requested session %s was not found", $request->getSessionUuid()), StandardError::SESSION_NOT_FOUND);
}
// NOTE: If the session UUID was provided, it has already been validated up until this point
return SessionManager::getSession($request->getSessionUuid());
}
catch(DatabaseOperationException $e)

View 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;
}
}

View file

@ -13,7 +13,7 @@ class Database
private static ?PDO $instance = null;
/**
* @return mysqli
* @return PDO
* @throws DatabaseOperationException
*/
public static function getConnection(): PDO
@ -22,7 +22,7 @@ class Database
{
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');
// Set some common PDO attributes for better error handling

View file

@ -32,12 +32,12 @@
{
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))
{
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);

18
src/Socialbox/Program.php Normal file
View 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;
}
}

View file

@ -2,6 +2,7 @@
namespace Socialbox;
use ConfigLib\Configuration;
use Socialbox\Classes\RpcHandler;
use Socialbox\Enums\StandardError;
use Socialbox\Enums\StandardMethods;
@ -9,6 +10,11 @@
class Socialbox
{
public static function getConfiguration(): array
{
}
public static function handleRpc(): void
{
try
@ -29,7 +35,7 @@
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)
{
$results[] = $response;

View file

@ -0,0 +1,8 @@
<?php
namespace Socialbox;
class Socialbox
{
}

View 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');
}
}