File: upload_to_wiki.pl

package info (click to toggle)
log4cplus 2.0.8-1.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 11,592 kB
  • sloc: cpp: 53,091; sh: 10,537; ansic: 1,845; python: 1,226; perl: 263; makefile: 209; xml: 85; objc: 59
file content (131 lines) | stat: -rwxr-xr-x 2,901 bytes parent folder | download | duplicates (3)
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#! env perl
use strict;
use IO::All;
use LWP::UserAgent;
use URI;
use Getopt::Long;
use Config::YAML;
use Pod::Usage;
use File::Basename;
use File::Touch;
use User;

# set up configuration store

my $user_config_file = User->Home . '/.log4cplus-upload_to_wiki';
if (! -e $user_config_file)
{
    touch($user_config_file);
}

my $config = Config::YAML->new(
    config => $user_config_file,
    output => $user_config_file,
    bearer_token => '',
    wiki_endpoint => 'https://sourceforge.net/rest/p/log4cplus/wiki/');

if (-r $user_config_file)
{
    $config->read($user_config_file);
}

my $wiki_endpoint = $config->{wiki_endpoint};

# parse script parameters

my $bearer_token = $config->get_bearer_token;
my $file_path = '';
my $help = 0;
my $remember = 0;

if (! GetOptions("token|t=s" => \$bearer_token,
                 "remember" => \$remember,
                 "file|f=s" => \$file_path,
                 "help|h" => \$help))
{
    pod2usage(2);
}

# evaluate script parameters

pod2usage(1) if $help;
pod2usage(-message => 'missing bearer token argument')
    if $bearer_token eq '';
pod2usage(-message => 'missing input file argument')
    if $file_path eq '';

# save configuration

if ($remember)
{
    $config->set_bearer_token($bearer_token);
    $config->write;
}

# slurp input file

print "reading file ", $file_path, "\n";
my $text = io($file_path)->utf8->slurp;

# add SF specific table of contents
$text = "[TOC]\n\n" . $text;

# construct URL for POST request

my $uri = URI->new($wiki_endpoint);
my ($file_name, undef, undef) = fileparse($file_path);
$uri->path($uri->path . $file_name);
$uri->query_form('access_token' => $bearer_token);

# get user agent

print "POSTing to ", $uri->as_string, "\n";
my $ua = LWP::UserAgent->new;
push @{ $ua->requests_redirectable }, 'POST';

# set up POST request

my $req = HTTP::Request->new(POST => $uri);
$req->content_type("application/x-www-form-urlencoded; charset='utf8'");
$req->accept_decodable;
my $content_enc = URI->new;
$content_enc->query_form('text' => $text, 'labels' => 'readme');
$req->content($content_enc->query);
print "POST body:\n", $req->as_string, "\n";

# do POST request

my $resp = $ua->request($req);

# process response

print "POST response: ";
if ($resp->is_success)
{
    print $resp->decoded_content, "\n";
}
else
{
    print $resp->decoded_content, "\n";
    die $resp->status_line;
}

__END__

=head1 NAME

upload_to_wiki.pl - uploads a file (usually a Markdown document) as wiki page
on log4cplus SourceForge wiki.

=head1 SYNOPSIS

upload_to_wiki.pl [options] --token <bearer token> --file <file>

 Options:
   --help|h                      this help
   --token|t <bearer token>      SourceForge bearer token used for
                                 authentication
   --remember                    remember bearer token in configuration file
   --file|f <file>               file to be uploaded

=cut