Merge pull request #1398 from solgenomics/topic/fix_feature_page_message2
[sgn.git] / lib / SGN.pm
blob0ea35fc688ae4cf4823f39a1d367a827268115fa
2 =head1 NAME
4 SGN - Catalyst-based application to run the SGN website.
6 =head1 SYNOPSIS
8 script/sgn_server.pl
10 =head1 DESCRIPTION
12 This is the main class for the Sol Genomics Network main website.
14 =cut
16 package SGN;
17 use Moose;
18 use namespace::autoclean;
20 BEGIN {
21 $ENV{WEB_PROJECT_NAME} = $ENV{PROJECT_NAME} = __PACKAGE__;
24 use SGN::Exception;
26 use Catalyst::Runtime 5.80;
28 =head1 ROLES
30 Does the roles L<SGN::Role::Site::Config>,
31 L<SGN::Role::Site::DBConnector>, L<SGN::Role::Site::DBIC>,
32 L<SGN::Role::Site::Exceptions>, L<SGN::Role::Site::Files>,
33 L<SGN::Role::Site::Mason>, L<SGN::Role::Site::SiteFeatures>,
34 L<SGN::Role::Site::TestMode>
36 =cut
38 use Catalyst qw/
39 ConfigLoader
40 Static::Simple
41 SmartURI
42 Authentication
43 Assets
44 +SGN::Authentication::Store
45 Authorization::Roles
46 +SGN::Role::Site::Config
47 +SGN::Role::Site::DBConnector
48 +SGN::Role::Site::DBIC
49 +SGN::Role::Site::Exceptions
50 +SGN::Role::Site::Files
51 +SGN::Role::Site::Mason
52 +SGN::Role::Site::SiteFeatures
53 +SGN::Role::Site::TestMode
56 extends 'Catalyst';
58 =head1 METHODS
60 =cut
62 # configure catalyst-related things. in general, things should not be
63 # added here. add them to SGN.conf, with comments.
64 __PACKAGE__->config(
66 name => 'SGN',
67 root => 'static',
69 disable_component_resolution_regex_fallback => 1,
71 default_view => 'Mason',
73 # Static::Simple configuration
74 'Plugin::Static::Simple' => {
75 dirs => [qw[ css s static img documents static_content data ]],
78 'Plugin::ConfigLoader' => {
79 substitutions => {
80 UID => sub { $> },
81 USERNAME => sub { (getpwuid($>))[0] },
82 GID => sub { $) },
83 GROUPNAME => sub { (getgrgid($)))[0] },
87 # configure SGN::Role::Site::TestMode. These are the
88 # configuration keys that it will change so that they point into
89 # t/data
90 'Plugin::TestMode' => {
91 test_data_dir => __PACKAGE__->path_to('t','data'),
92 reroot_conf =>
93 [qw(
95 blast_db_path
96 cluster_shared_tempdir
97 ftpsite_root
98 image_path
99 genefamily_dir
100 homepage_files_dir
101 intron_finder_database
102 solqtl
103 static_content_path
104 static_datasets_path
105 trace_path
110 'Plugin::Cache'=>{
111 backend => {
112 store =>"FastMmap",
118 'Plugin::Authentication' => {
119 default_realm => 'default',
120 realms => {
121 default => {
122 credential => {
123 class => '+SGN::Authentication::Credentials',
126 store => {
127 class => "+SGN::Authentication::Store",
128 user_class => "+SGN::Authentication::User",
129 ### role_column => 'roles',
135 ( $ENV{SGN_TEST_MODE} ? ( test_mode => 1 ) : () ),
139 # on startup, do some dynamic configuration
140 after 'setup_finalize' => sub {
141 my $self = shift;
143 $self->config->{basepath} = $self->config->{home};
145 # all files written by web server should be group-writable
146 umask 000002;
148 # update the symlinks used to serve static files
149 $self->_update_static_symlinks;
152 __PACKAGE__->setup;
154 sub _update_static_symlinks {
155 my $self = shift;
157 # symlink the static_datasets and
158 # static_content in the root dir so that
159 # Catalyst::Plugin::Static::Simple can serve them. in production,
160 # these will be served directly by Apache
162 # make symlinks for static_content and static_datasets
163 my @links =
164 map [ $self->config->{$_.'_path'} =>
165 $self->path_to( $self->config->{root}, $self->config->{$_.'_url'} )
167 qw( static_content static_datasets );
169 for my $link (@links) {
170 if( $self->debug ) {
171 my $l1_rel = $link->[1]->relative( $self->path_to );
172 $self->log->debug("symlinking static dir '$link->[0]' -> '$l1_rel'") if $self->debug;
174 unlink $link->[1];
175 symlink( $link->[0], $link->[1] )
176 or die "$! symlinking $link->[0] => $link->[1]";
180 =head1 SEE ALSO
182 L<SGN::Controller::Root>, L<Catalyst>
184 =head1 AUTHOR
186 The SGN team
188 =head1 LICENSE
190 This library is free software. You can redistribute it and/or modify
191 it under the same terms as Perl itself.
193 =cut