WWW-Suffit-Server
view release on metacpan or search on metacpan
lib/WWW/Suffit/Server.pm view on Meta::CPAN
clients => 1000,
requests => 100,
workers => 4,
spare => 2,
reload_sig => 'USR2',
no_daemonize => 1,
# Security
mysecret => 'Eph9Ce$quo.p2@oW3',
rsa_keysize => 2048,
private_key => undef, # Auto
public_key => undef, # Auto
# Initialization options
all_features => 'no',
config_opts => {
file => path($root)->child('etc')->make_path->child('myapp.conf')->to_string,
defaults => {foo => 'bar'},
},
);
lib/WWW/Suffit/Server.pm view on Meta::CPAN
See L<Mojo::Server::Prefork/pid_file>
=head2 project_name
project_name => 'MyApp',
The project name. For example: MyApp
Default: current class name
=head2 private_key
private_key => '...'
Private RSA key
=head2 project_version
project_version => '0.01'
The project version. For example: 1.00
B<NOTE!> This is required attribute!
lib/WWW/Suffit/Server.pm view on Meta::CPAN
This helper helps generate the new CacheKey for caching user data
that was got from authorization database
=head2 gen_rsakeys
my %keysdata = $app->gen_rsakeys;
my %keysdata = $app->gen_rsakeys( 2048 );
This helper generates RSA keys pair and returns structure as hash:
private_key => '...',
public_key => '...',
key_size => 2048,
error => '...',
=head2 jwt
This helper makes JWT object with RSA keys and returns it
=head2 token
lib/WWW/Suffit/Server.pm view on Meta::CPAN
has 'tempdir'; # /tmp/<MONIKER>
has 'logfile'; # /var/log/<MONIKER>.log
has 'pidfile'; # /run/<MONIKER>.pid
# Logging
has 'loglevel' => 'warn'; # warn
has 'max_history_size' => MAX_HISTORY_SIZE;
# Security
has 'mysecret' => DEFAULT_SECRET; # Secret
has 'private_key' => ''; # Private RSA key
has 'public_key' => ''; # Public RSA key
has 'rsa_keysize' => sub { shift->conf->latest("/rsa_keysize") };
has 'trustedproxies' => sub { [grep {length} @{(shift->conf->list("/trustedproxy"))}] };
# Prefork
has 'clients' => sub { shift->conf->latest("/clients") || SERVER_MAX_CLIENTS }; # 10000
has 'requests' => sub { shift->conf->latest("/requests") || SERVER_MAX_REQUESTS}; # 100
has 'accepts' => sub { shift->conf->latest("/accepts") }; # SERVER_ACCEPTS is 0 -- by default not specified
has 'spare' => sub { shift->conf->latest("/spare") || SERVER_SPARE }; # 2
has 'workers' => sub { shift->conf->latest("/workers") || SERVER_WORKERS }; # 4
lib/WWW/Suffit/Server.pm view on Meta::CPAN
# Remove system favicon file
delete $self->static->extra->{'favicon.ico'};
# Set secret
$self->mysecret($self->conf->latest("/secret")) if $self->conf->latest("/secret");
$self->secrets([$self->mysecret]);
# Init RSA keys (optional)
if ($all_features || is_true_flag($opts->{init_rsa_keys} // $self->init_rsa_keys)) {
my $private_key_file = $self->conf->latest("/privatekeyfile") || path($self->datadir, PRIVATEKEYFILE)->to_string;
my $public_key_file = $self->conf->latest("/publickeyfile") || path($self->datadir, PUBLICKEYFILE)->to_string;
if ((!-r $private_key_file) and (!-r $public_key_file)) {
my $rsa = WWW::Suffit::RSA->new();
$rsa->key_size($self->rsa_keysize) if $self->rsa_keysize;
$rsa->keygen;
path($private_key_file)->spew($rsa->private_key)->chmod(0600);
$self->private_key($rsa->private_key);
path($public_key_file)->spew($rsa->public_key)->chmod(0644);
$self->public_key($rsa->public_key);
} elsif (!-r $private_key_file) {
$self->raise("Can't read RSA private key file: \"%s\"", $private_key_file);
} elsif (!-r $public_key_file) {
$self->raise("Can't read RSA public key file: \"%s\"", $public_key_file);
} else {
$self->private_key(path($private_key_file)->slurp);
$self->public_key(path($public_key_file)->slurp)
}
}
# Init AuthDB plugin (optional)
if ($all_features || is_true_flag($opts->{init_authdb} // $self->init_authdb)) {
#_load_module("WWW::Suffit::AuthDB");
my $authdb_opts = as_hash_ref($opts->{authdb_opts} || $self->authdb_opts) || {};
my $authdb_file = path($self->datadir, AUTHDBFILE)->to_string;
my $authdb_uri = $authdb_opts->{uri} || $authdb_opts->{url}
lib/WWW/Suffit/Server.pm view on Meta::CPAN
if ($self->app->debugmode and $token = $self->conf->latest("/token")) {
return '' unless $token =~ JWT_REGEXP;
}
return $token // '';
}
sub _getJWT {
my $self = shift;
return WWW::Suffit::JWT->new(
secret => $self->app->mysecret,
private_key => $self->app->private_key,
public_key => $self->app->public_key,
);
}
sub _genCacheKey {
my $self = shift;
my $len = shift || 12;
return randchars($len);
}
sub _genRSAKeys {
my $self = shift;
my $key_size = shift || $self->app->rsa_keysize;
my $rsa = WWW::Suffit::RSA->new();
$rsa->key_size($key_size) if $key_size;
$rsa->keygen;
my ($private_key, $public_key) = ($rsa->private_key // '', $rsa->public_key // '');
return (
private_key => $private_key,
public_key => $public_key,
key_size => $rsa->key_size,
error => $rsa->error
? sprintf("Error occurred while generation %s bit RSA keys: %s", $rsa->key_size // '?', $rsa->error)
: '',
);
}
sub _genClientId {
my $self = shift;
my $user_agent = $self->req->headers->header('User-Agent') // 'unknown';
( run in 0.287 second using v1.01-cache-2.11-cpan-4d50c553e7e )