view release on metacpan or search on metacpan
lib/Activator/Config.pm view on Meta::CPAN
argument, and pass a flag to L</get_config()>.
That is, when your script is called like this:
myscript.pl --options <project>
get the config like this:
Activator::Config->get_config( \@ARGV, undef, 1 );
The second argument to L</get_config()> is the realm, so you pass
C<undef> (unless you know the realm you are looking for) to allow the
command line options and environment variables to take affect.
=head1 ENVIRONMENT VARIABLES
Environment variables can be used to act as a default to command line
options, and/or override any top level configuration file key which is
a scalar. The expected format is C<ACT_CONFIG_[key]>. Note that YAML is
case sensitive, so the environment variables must match. Be especially
wary of command shell senstive characters in your YAML keys (like
C<:~E<gt>E<lt>|>).
If you wish to override a key for only a particular realm, you
can insert the realm into the env variable wrapped by double
underscores:
ACT_CONFIG_foo - set 'foo' for default realm
ACT_CONFIG__bar__foo - set 'foo' only for 'bar' realm
The L</Reserved Arguments> listed in the L</COMMAND LINE ARGUMENTS>
section also have corresponding environment variables with only
C<skip_env> being slightly different:
ACT_CONFIG_skip_env : set to 1 to skip, or 0 (or don't set it at all) to
not skip
ACT_CONFIG_project : same as command line argument
ACT_CONFIG_realm : same as command line argument
ACT_CONFIG_conf_path : same as command line argument
=head2 Automatically Imported Environment Variables
lib/Activator/Config.pm view on Meta::CPAN
All C<default> realm environment variables override all values for
each I<realm> (excepting the C<overrides> realm).
=item *
All specific I<realm> environment variables override that realm's values.
=item *
The C<default> realm overrides section is used to override matching
keys in each I<realm>.
=item *
The specific I<realm> overrides section is used to override matching keys
in I<realm>.
=item *
Any command line options given override ALL matching keys for ALL realms.
=item *
# TODO: NOT YET IMPLEMENTED
lib/Activator/Config.pm view on Meta::CPAN
#### TODO: in the future, there needs to be a 'lint' hash within the
#### realm that says where every variable came from.
=head1 COOKBOOK
#### TODO: these examples are probably complete baloney at this point.
This section gives some examples of how to utilze this module. Each
section below (cleverly) assumes we are writing a Cookbook application
that can fetch recipies from a database.
=head2 End User
Use Case: A user has a CPAN module that provides C<cookbook.pl> to
lookup recipies from a database. The project installs these files:
/etc/cookbook.d/org.yml
/usr/lib/perl5/site-perl/Cookbook.pm
lib/Activator/DB.pm view on Meta::CPAN
If you are using this module from a script, you need to insure that
the environment is properly set using a BEGIN block:
BEGIN{
$ENV{ACT_REG_YAML_FILE} ||= '/path/to/config.yml'
}
=head2 Registry Configuration
Add an C<Activator::DB> section to your project YAML configuration file:
'Activator::Registry':
log4perl<.conf>: # Log4perl config file or definition
# See Logging Configuration below
'Activator::DB':
default: # default configuration for all connections
connection: <conn_alias>
## Optional default attributes and config for all connections
config:
debug: 0/1 # default: 0, affects all queries, all aliases
reconn_att: <int> # attempt reconnects this many times. default: 3
reconn_sleep: <int> # initial sleep seconds between reconnect attempts.
# doubles every attempt. default: 1
attr: # connection attributes. Only AutoCommit at this time
AutoCommit: 0/1 # default: 1
## You must define at least one connection alias
connections:
<conn_alias>:
user: <user>
pass: <password>
dsn: '<DSN>' # MySql Example: DBI:mysql:<DBNAME>:<DBHOST>
lib/Activator/Dictionary.pm view on Meta::CPAN
CREATE TABLE db_table_name (
# primary column must end with '_id'
*_id serial,
lang enum('en','de','es') default 'en',
realm text NOT NULL,
key_prefix text NOT NULL,
last_modified datetime NOT NULL,
# Then, define any attributes of the key that you any way you want,
# excepting that they cannot end with the string '_id', or be the
# same as any of the cols in the above section (aka: the previous
# columns use reserved words):
col_1 varchar(256) NOT NULL,
col_2 text NOT NULL,
col_3 text NOT NULL,
col_4 int,
col_5 text,
# insure realm/key/lang integrity in your DB's way. This is MySQL:
UNIQUE KEY IDX_db_dictionary_1 (realm,key_prefix,lang)
);
lib/Activator/Emailer.pm view on Meta::CPAN
mailer_args => [ username => 'user@gmail.com',
password => '123456'
],
);
$mailer->attach( Type => 'application/pdf',
Path => 'path/to/doc.pdf',
Filename => 'invoice.pdf',
Disposition => 'attachment'
$mailer->send( $tt_vars );
The next section shows how to simplify this.
=head1 CONFIGURATION
As is seen in the previous section, a lot of information is needed to
send an email. Fortunately, most of the information is reusable. You
can utilize L<Activator::Registry> to simplify creation of emails:
'Activator::Registry':
'Activator::Emailer':
From: noreply@domain.com
mailer_type: Gmail # any of the send methods Email::Send supports
mailer_args: # any of the args required by your Email::Send::<TYPE>
- username: <username>
- password: <password>
lib/Activator/Emailer.pm view on Meta::CPAN
=head2 File 1: html_header
This is the most basic header, but you can add as much HTML as you
like, including limited style and script tags:
<html>
<body>
=head2 File 2: html_body
Put whatever html you like in this section.
<h1>Body</h1>
<p>This is only an example</p>
[% IF Activator_Emailer_format == 'text' -%]
========================================
[% ELSE -%]
<hr>
[% END -%]
=head2 File 3: html_footer
lib/Activator/Log.pm view on Meta::CPAN
=head1 DESCRIPTION
This module provides a simple wrapper for L<Log::Log4perl> that allows
you to have a project level configuration for Log4perl, and have any
class or script in your project be configured and output log messages
in a consistent centralized way.
Additionally, C<TRACE> and C<DEBUG> functions have the extra
capabilities to turn logging on and off on a per-module basis. See the
section L<DISABLING DEBUG OR TRACE BY MODULE> for more information.
=head2 Centralized Configuration
Your project C<log4perl.conf> gets loaded based on your
L<Activator::Registry> configuration. If you do not have a Log4perl
config available, the log level is set to WARN and all output goes to
STDERR.
See the section L<CONFIGURATION> for more details.
=head2 Exporting Level Functions
Log::Log4perl logging functions are exported into the global
namespace if you use the C<:levels> tag
use Activator::Log qw( :levels );
&FATAL( $msg );
&ERROR( $msg );
&WARN( $msg );
lib/Activator/Options.pm view on Meta::CPAN
All C<default> realm environment variables override all values for
each realm (excepting C<overrides> realm).
=item *
All specific realm environment variables override that realm's values
for the key.
=item *
The C<default> realm overrides section is used to override matching
keys in all realms.
=item *
The specific realm overrides section is used to override matching keys
in the requested realm.
=item *
Any command line options given override ALL matching keys for all
realms.
=item *
# TODO: NOT YET IMPLEMENTED
lib/Activator/Options.pm view on Meta::CPAN
characters in your YAML keys.
If you wish to override a key for only a particular realm, you
can insert the realm into the env variable wrapped by double
underscores:
ACT_OPT_foo - set 'foo' for default realm
ACT_OPT__bar__foo - set 'foo' only for 'bar' realm
The special command line arguments listed in the COMMAND LINE
ARGUMENTS section also have corresponding environment variables with
minor differences in use:
ACT_OPT_skip_env : set to 1 to skip, or 0 (or don't set it at all) to
not skip
ACT_OPT_project : same as command line argument
ACT_OPT_project_home : same as command line argument
ACT_OPT_realm : same as command line argument
ACT_OPT_conf_file : comma separated list of files
ACT_OPT_conf_path : colon separated list of directories
lib/Activator/Options.pm view on Meta::CPAN
Since this module is part of L<Activator>, you can set your
L<Activator::Log> level to DEBUG to see how your C<$opts> are
generated.
#### TODO: in the future, there needs to be a 'lint' hash within the
#### realm that says where every variable came from.
=head1 COOKBOOK
This section gives some examples of how to utilze this module. Each
section below (cleverly) assumes we are writing a Cookbook application
that can fetch recipies from a database.
#### TODO: these examples use currently unimplemented features. FIX IT!
=head2 End User
Use Case: A user has a CPAN module that provides C<cookbook.pl> to
lookup recipies from a database. The project installs these files:
/etc/cookbook.d/org.yml
lib/Catalyst/Plugin/Activator/Config.pm view on Meta::CPAN
To support the distinction between development and production environments,
this module will also attemp to load a local config (e.g. myapp_local.yaml)
which will override any duplicate settings.
=head1 METHODS
=head2 setup( )
This method is automatically called by Catalyst's setup routine. It will
attempt to use each plugin and, once a file has been successfully
loaded, set the C<config()> section.
=cut
sub setup {
my $c = shift;
my @files = $c->find_files;
my $cfg = Config::Any->load_files(
{ files => \@files,
filter => \&_fix_syntax,
use_ext => 1,
lib/Catalyst/Plugin/SecureCookies.pm view on Meta::CPAN
use Catalyst qw/SecureCookies/;
MyApp->config->{SecureCookies} = {
key => $blowfish_key,
ssl => 1 # send the checksum over ssl
};
MyApp->setup;
# later, in another part of MyApp...
$c->request->exp_secure_cookies( $expiration );
$c->request->set_secure_cookie( 'my_cookie_name', $value );
my $secure_data = $c->request->get_secure_cookie('my_cookie_name');
=head1 DESCRIPTION
=head2 Overview
When HTTP cookies are used to store a user's state or identity it's
important that your application is able to distinguish legitimate
cookies from those that have been edited or created by a malicious
user.
lib/Catalyst/Plugin/SecureCookies.pm view on Meta::CPAN
hash. The encoded string is then hashed using Digest::SHA1 to
prepare a sort of "checksum" or hash to make sure the user did
not modify the cookie.
=head1 CONFIGURATION
=over 4
=item key
MyApp->config->{SecureCookies}->{key} = $secret_key;
This parameter is B<required>, and sets the secret key that is used to
encrypt the cookies with Crypt::CBC Blowfish. This needs to be a
16 hex character string.
=item ssl
MyApp->config->{SecureCookies}->{ssl} = 0;
# or
MyApp->config->{SecureCookies}->{ssl} = 1;
This parameter is optional, and will default to C<1> if not set.
If C<1>, the checksum or hash cookie will be sent over SSL for
added security. This will prevent replay attacks from being
used against the server.
If C<0>, the checksum will be sent as a normal, non-secure cookie.
=back
=head1 DIAGNOSTICS
=over 4
=back
=cut
lib/Catalyst/Plugin/SecureCookies.pm view on Meta::CPAN
=head2 Catalyst Request Object Methods
=over 4
=cut
*{Symbol::qualify_to_ref('SecureCookies', 'Catalyst::Request')} =
Class::Accessor::Fast::make_accessor('Catalyst::Request', 'SecureCookies');
=item C<< $c->request->get_secure_cookie($cookie_name) >>
If a cookie was successfully authenticated then this method will
return the value of the cookie.
=cut
*{Symbol::qualify_to_ref('get_secure_cookie', 'Catalyst::Request')} = sub {
my $self = shift;
my $name = shift;
return $self->SecureCookies->{$name};
};
# add a secure cookie to the output
*{Symbol::qualify_to_ref('set_secure_cookie', 'Catalyst::Response')} = sub {
my $self = shift;
my $name = shift;
my $value = shift;
$self->{SecureCookies}->{$name} = $value;
};
## set the cookie exp time
*{Symbol::qualify_to_ref('exp_secure_cookies', 'Catalyst::Response')} =
Class::Accessor::Fast::make_accessor('Catalyst::Request', 'exp_secure_cookies');
sub setup {
my $self = shift;
$self->config->{SecureCookies}->{ssl} ||= 1;
return $self->NEXT::setup(@_);
}
# remove and check hash in Cookie Values
sub prepare_cookies {
my $c = shift;
$c->NEXT::prepare_cookies(@_);
## pull out our secure dudes
$c->request->{SecureCookies} = {};
my $rJ = $c->request->cookie( 'rJ' );
my $rC = $c->request->cookie( 'rC' );
## decrypt them
if( $rJ && $rC ) {
## decode it
my $secret_form = &_decrypt( $c,
$rJ->value, # encoded cookie
$rC->value ); # it's checksum
if( $secret_form ) {
foreach my $key (keys %$secret_form) {
$c->request->{SecureCookies}->{$key} = $secret_form->{$key};
}
}
}
return $c;
}
# alter all Cookie Values to include a hash
sub finalize_cookies {
my $c = shift;
my $sc = $c->response->{SecureCookies};
if( $sc ) {
## pull in the existing secure cookies
my $sco = $c->req->SecureCookies;
if( $sco ) {
foreach my $key (keys %$sco) {
if( ! defined($sc->{$key}) ) {
$sc->{$key} = $sco->{$key};
}
}
}
## first encode the form
my ($encoded, $csum) = &_encrypt( $c, $sc );
## ssl, yes or no?
my $ssl = $c->config->{SecureCookies}->{ssl};
my $ssl_val = $ssl ? 1 : 0;
## expiration?
my $exp = $c->response->exp_secure_cookies();
## make the two cookies
$c->response->cookies->{rJ} = { value => $encoded,
expires => $exp };
$c->response->cookies->{rC} = { value => $csum,
expires => $exp };
my $domain = $c->config->{SecureCookies}->{cookie_domain};
if( $domain ) {
$c->response->cookies->{rJ}->{domain} = ".$domain";
share/apache2/conf/httpd.conf.tt view on Meta::CPAN
# See <URL:http://httpd.apache.org/docs/2.2/> for detailed information.
# In particular, see
# <URL:http://httpd.apache.org/docs/2.2/mod/directives.html>
# for a discussion of each configuration directive.
#
#
# Do NOT simply read the instructions in here without understanding
# what they do. They're here only as hints or reminders. If you are unsure
# consult the online docs. You have been warned.
#
# The configuration directives are grouped into three basic sections:
# 1. Directives that control the operation of the Apache server process as a
# whole (the 'global environment').
# 2. Directives that define the parameters of the 'main' or 'default' server,
# which responds to requests that aren't handled by a virtual host.
# These directives also provide default values for the settings
# of all virtual hosts.
# 3. Settings for virtual hosts, which allow Web requests to be sent to
# different IP addresses or hostnames and have them handled by the
# same Apache server process.
#
# Configuration and logfile names: If the filenames you specify for many
# of the server's control files begin with "/" (or "drive:/" for Win32), the
# server will use that explicit path. If the filenames do *not* begin
# with "/", the value of ServerRoot is prepended -- so "logs/foo.log"
# with ServerRoot set to "/etc/httpd" will be interpreted by the
# server as "/etc/httpd/logs/foo.log".
#
### Section 1: Global Environment
#
# The directives in this section affect the overall operation of Apache,
# such as the number of concurrent requests it can handle or where it
# can find its configuration files.
#
#
# Don't give away too much information about all the subcomponents
# we are running. Comment out this line if you don't mind remote sites
# finding out what major optional modules you are running
ServerTokens OS
share/apache2/conf/httpd.conf.tt view on Meta::CPAN
#
ServerRoot "[% apache2.ServerRoot %]"
#
# PidFile: The file in which the server should record its process
# identification number when it starts.
#
PidFile [% apache2.PidFile %]
#
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 120
#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive Off
#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100
#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 15
##
## Server-Pool Size Regulation (MPM specific)
##
# prefork MPM
# StartServers: number of server processes to start
share/apache2/conf/httpd.conf.tt view on Meta::CPAN
# suggested workaround is to create a user www and use that user.
# NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET)
# when the value of (unsigned)Group is above 60000;
# don't use Group #-1 on these systems!
#
User [% apache2.User %]
Group [% apache2.Group %]
### Section 2: 'Main' server configuration
#
# The directives in this section set up the values used by the 'main'
# server, which responds to any requests that aren't handled by a
# <VirtualHost> definition. These values also provide defaults for
# any <VirtualHost> containers you may define later in the file.
#
# All of these directives may appear inside <VirtualHost> containers,
# in which case these default settings will be overridden for the
# virtual host being defined.
#
#
share/apache2/conf/httpd.conf.tt view on Meta::CPAN
Alias /icons/ "/var/www/icons/"
<Directory "/var/www/icons">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
#
# WebDAV module configuration section.
#
<IfModule mod_dav_fs.c>
# Location of the WebDAV lock database.
DAVLockDB /var/lib/dav/lockdb
</IfModule>
#
# ScriptAlias: This controls which directories contain server scripts.
# ScriptAliases are essentially the same as Aliases, except that
# documents in the realname directory are treated as applications and
share/apache2/conf/httpd.conf.tt view on Meta::CPAN
#NameVirtualHost *:80
#
# NOTE: NameVirtualHost cannot be used without a port specifier
# (e.g. :80) if mod_ssl is being used, due to the nature of the
# SSL protocol.
#
#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
#<VirtualHost *:80>
# ServerAdmin webmaster@dummy-host.example.com
# DocumentRoot /www/docs/dummy-host.example.com
# ServerName dummy-host.example.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>
share/conf/default-project.yml view on Meta::CPAN
#
# It is OK to have deep dir paths relative to ${conf_dir}. They will be preserved.
#
# Note that most projects need at least these two files listed here:
# one to configure every catalyst thing that is not Activator aware
# (usually ${project_alias}-catalyst.yml), and one to have the multi-
# functional project registry (usually ${project_alias}-registry.yml).
#
# Note also that this is a great place for a log4perl.conf and your
# Activator::Dictionary files (but don't list dictionary files here,
# list them in the Activator: Dictionary: section below)
#
sync_config_files:
- ${project_alias}-registry.yml
- ${project_alias}-catalyst.yml
################################################################################
#
# Default Activator Module Settings
#
t/Dictionary-default.t view on Meta::CPAN
$capture = IO::Capture::Stderr->new();
$capture->start();
lives_ok {
$dict = Activator::Dictionary->get_dict();
} 'get_dict() does not die';
$capture->stop();
$line = $capture->read;
#ok ( $line =~ /$expected_err1/os, 'got first load error');
ok (defined $line, 'got first expected error');
$line = $capture->read;
#ok ( $line =~ /$expected_err2/os, 'got second load error');
ok (defined $line, 'got second expected error');
$val = $dict->lookup('fkey1');
ok( $val eq 'fvalue1', 'can lookup known key' );
lives_ok {
$val = $dict->lookup('fkey2');
} "lookup doesn't die when looking up invalid key";
ok( !defined($val), 'unknown key returns undef by default' );
$val = $dict->lookup('fkey3');