92 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env php
 | 
						|
<?php
 | 
						|
 | 
						|
use NoccyLabs\Mercureact\Configuration;
 | 
						|
use NoccyLabs\Mercureact\Daemon;
 | 
						|
 | 
						|
file_exists(__DIR__."/../vendor") && require_once __DIR__."/../vendor/autoload.php";
 | 
						|
file_exists(__DIR__."/../../../autoload.php") && require_once __DIR__."/../../../autoload.php";
 | 
						|
 | 
						|
if (file_exists(__DIR__."/../src/meta")) {
 | 
						|
    $meta = require_once(__DIR__."/../src/meta");
 | 
						|
    define("MERCUREACT_VERSION", $meta['version']?:'0.0.0');
 | 
						|
    define("MERCUREACT_BUILDTIME", $meta['buildtime']);
 | 
						|
} else {
 | 
						|
    define("MERCUREACT_VERSION", "DEV");
 | 
						|
    define("MERCUREACT_BUILDTIME", null);
 | 
						|
}
 | 
						|
 | 
						|
$opts = getopt("c:C:hvV");
 | 
						|
 | 
						|
if (isset($opts['h'])) {
 | 
						|
    $info = "v".MERCUREACT_VERSION.(MERCUREACT_BUILDTIME?("\nBuilt on ".MERCUREACT_BUILDTIME):"");
 | 
						|
    fwrite(STDERR, <<<HELP
 | 
						|
    Mercureact Realtime SSE Daemon {$info}
 | 
						|
    (c) 2024, NoccyLabs - Distributed under GNU GPL v3 or later.
 | 
						|
 | 
						|
      Options:
 | 
						|
 | 
						|
        -V            Print version and exit
 | 
						|
        -v            Verbose debug logging
 | 
						|
        -c config     Read configuration from file
 | 
						|
        -C config     Write a new configuration to file and open with editor
 | 
						|
    
 | 
						|
    
 | 
						|
    HELP);
 | 
						|
    exit(0);
 | 
						|
}
 | 
						|
 | 
						|
if (isset($opts['V'])) {
 | 
						|
  fprintf(STDOUT, "Mercureact %s\nBuilt on %s\n", MERCUREACT_VERSION, MERCUREACT_BUILDTIME);
 | 
						|
  exit(0);
 | 
						|
}
 | 
						|
 | 
						|
if (isset($opts['C'])) {
 | 
						|
    $file = $opts['C'];
 | 
						|
    if (file_exists($file)) {
 | 
						|
        fwrite(STDERR, "File {$file} already exists. Will not overwrite.\n");
 | 
						|
        exit(1);
 | 
						|
    }
 | 
						|
    file_put_contents($file, <<<DEFAULTS
 | 
						|
    server:
 | 
						|
      address: 0.0.0.0:9000
 | 
						|
      public_url: https://example.com
 | 
						|
      websockets: false
 | 
						|
      cors:
 | 
						|
        allow_origin: '*'
 | 
						|
        csp: "default-src * 'self' http: 'unsafe-eval' 'unsafe-inline'; connect-src * 'self'"
 | 
						|
      encryption:
 | 
						|
        cert: foo.pem
 | 
						|
        key: foo.key
 | 
						|
 | 
						|
    publish:
 | 
						|
      overwrite_ids: false
 | 
						|
      reject_duplicates: true
 | 
						|
 | 
						|
    subscribe:
 | 
						|
      allow_anonymous: true
 | 
						|
 | 
						|
    security:
 | 
						|
      jwt_secret: "!ChangeThisMercureHubJWTSecretKey!"
 | 
						|
 | 
						|
    DEFAULTS);
 | 
						|
    passthru("editor ".escapeshellarg($file));
 | 
						|
    exit(1);
 | 
						|
}
 | 
						|
 | 
						|
if (isset($opts['c'])) {
 | 
						|
    $config = Configuration::fromFile($opts['c']);
 | 
						|
} else {
 | 
						|
    $config = Configuration::createDefault()
 | 
						|
        ->setListenAddress('127.0.0.1:8888')
 | 
						|
        ->setAllowOriginHeader("*")
 | 
						|
        ->setContentSecurityPolicyHeader("default-src * 'self' http: 'unsafe-eval' 'unsafe-inline'; connect-src * 'self'")
 | 
						|
        ->setAllowAnonymousSubscribe(true)
 | 
						|
        ->setJwtSecret("!ChangeThisMercureHubJWTSecretKey!");
 | 
						|
}
 | 
						|
 | 
						|
$verbose = isset($opts['v']);
 | 
						|
 | 
						|
$daemon = new Daemon($config, $verbose);
 | 
						|
$daemon->start();
 |