-
Notifications
You must be signed in to change notification settings - Fork 0
/
plusxome.cpp
105 lines (82 loc) · 2.77 KB
/
plusxome.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
// Copyright Arnt Gulbrandsen, arnt@gulbrandsen.priv.no.
#include <sysexits.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "filewatcher.h"
#include "httplistener.h"
#include "postset.h"
#include "plugin.h"
#include "post.h"
#include <iostream>
#include <fstream>
#include <boost/program_options/parsers.hpp>
#include <boost/filesystem.hpp>
using namespace boost::filesystem;
#include "config.h"
string activePlugins;
string outputdir;
string basedir;
string Config::postDirectory;
string Config::assetDirectory;
string Config::homePageUrl;
int port;
int main( int argc, char ** argv ) {
string config( "/etc/plusxome/config" );
options_description cli( "Command-line options" );
cli.add_options()
( "help,h", "produce help message" )
( "config,c", value<string>(&config)->default_value( "/etc/plusxome/config" ),
"configuration file" )
( "version,v", "show Plusxome's version number" );
options_description conf( "Configuration file (and command-line) options" );
conf.add_options()
( "port,p", value<int>( &port )->default_value( 80 ),
"TCP port to serve HTTP on" )
( "base-directory",
value<string>( &basedir )->default_value( "/usr/local/blog" ),
"base directory for postings" )
( "post-directory",
value<string>( &Config::postDirectory )->default_value( "posts" ),
"base directory for postings (relative to base-directory)" )
( "asset-directory",
value<string>( &Config::assetDirectory )->default_value( "assets" ),
"base directory for assets (relative to base-directory)" )
( "plugins",
value<string>( &activePlugins )->default_value( "all" ),
"active plugins (comma-separated, or the word all)" )
( "home-page-url",
value<string>( &Config::homePageUrl )->default_value( "http://example.org" ),
"the URL of the home page" );
conf.add( *(Plugin::pluginOptions()) );
cli.add( conf );
variables_map vm;
store( parse_command_line( argc, argv, cli ), vm );
notify( vm );
std::ifstream cfs( config.c_str() );
store( parse_config_file( cfs, conf, true ), vm );
notify( vm );
if ( vm.count( "help" ) ) {
cout << "Plusxome serves thoughtful writings to the world." << endl
<< endl
<< cli << endl
<< "See http://rant.gulbrandsen.priv.no/plusxome "
<< "for more information." << endl;
exit( 0 );
}
if ( vm.count( "version" ) ) {
cout << "Plusxome version 0.0" << endl;
exit( 0 );
}
if ( ::chdir( basedir.c_str() ) ) {
cerr << "Plusxome: Cannot chdir( " << basedir << " )" << endl;
exit( 0 );
}
Plugin::setActivePlugins( activePlugins );
(void)new FileWatcher;
Plugin::setupPlugins();
HttpListener v6( HttpListener::V6, port );
HttpListener v4( HttpListener::V4, port );
while ( v4.valid() || v6.valid() )
::sleep( 5 );
return 0;
}