Merge branch 'master' of https://github.com/adefaria/clearscm
[clearscm.git] / Confluence / lib / Confluence.pm
1 =pod
2
3 =head1 NAME $RCSfile: JIRAUtils.pm,v $
4
5 Some shared functions dealing with JIRA
6
7 =head1 VERSION
8
9 =over
10
11 =item Author
12
13 Andrew DeFaria <Andrew@ClearSCM.com>
14
15 =item Revision
16
17 $Revision: 1.0 $
18
19 =item Created
20
21 Fri Mar 12 10:17:44 PST 2004
22
23 =item Modified
24
25 $Date: 2013/05/30 15:48:06 $
26
27 =back
28
29 =head1 ROUTINES
30
31 The following routines are exported:
32
33 =cut
34
35 package Confluence;
36
37 use strict;
38 use warnings;
39
40 use File::Basename;
41 use MIME::Base64;
42
43 use Display;
44 use GetConfig;
45 use Carp;
46
47 use REST::Client;
48
49 our $VERSION  = '$Revision: 1.0 $';
50    ($VERSION) = ($VERSION =~ /\$Revision: (.*) /);
51    
52 my $confluenceConf = $ENV{CONFLUENCE_CONF} || dirname (__FILE__) . '../etc/confluence.conf';
53
54 my %OPTS = GetConfig $confluenceConf if -r $confluenceConf;   
55
56 sub _get () {
57   my ($self, $url) = @_;
58   
59   unless ($self->{headers}) {
60     $self->{headers} = { 
61       Accept        => 'application/json',
62       Authorization => 'Basic ' 
63                      . encode_base64 ($self->{username} . ':' . $self->{password}),
64     };
65   } # unless
66   
67   return $self->{REST}->GET ($url, $self->{headers});
68 } # _get
69
70 sub new (;%) {
71   my ($class, %parms) = @_;
72   
73   my $self = bless {}, $class;
74   
75   $self->{username} = $parms{username} || $OPTS{username} || $ENV{CONFLUENCE_USERNAME};
76   $self->{password} = $parms{password} || $OPTS{password} || $ENV{CONFLUENCE_PASSWORD};
77   $self->{server}   = $parms{server}   || $OPTS{server}   || $ENV{CONFLUENCE_SERVER};
78   $self->{port}     = $parms{port}     || $OPTS{port}     || $ENV{CONFLUENCE_PORT};
79   $self->{URL}      = "http://$self->{server}:$self->{port}/rest/api";
80   
81   return $self->connect;
82 } # new
83
84 sub connect () {
85   my ($self) = @_;
86   
87   $self->{REST} = REST::Client->new (
88     host => "http://$self->{server}:$self->{port}",
89   );
90   
91   $self->{REST}->getUseragent()->ssl_opts (verify_hostname => 0);
92   $self->{REST}->setFollow (1);
93    
94   return $self; 
95 } # connect
96
97 sub getContent (%) {
98   my ($self, %parms) = @_;
99   
100   my $url  = 'content?';
101   
102   my @parms;
103   
104   push @parms, "type=$parms{type}"             if $parms{type};
105   push @parms, "spacekey=$parms{spaceKey}"     if $parms{spaceKey};
106   push @parms, "title=$parms{title}"           if $parms{title};
107   push @parms, "status=$parms{status}"         if $parms{status};
108   push @parms, "postingDay=$parms{postingDay}" if $parms{postingDay};
109   push @parms, "expand=$parms{expand}"         if $parms{expand};
110   push @parms, "start=$parms{start}"           if $parms{start};
111   push @parms, "limit==$parms{limit}"          if $parms{limit};
112   
113   my $content = $self->_get ('/content/', join ',', @parms);
114   
115   return $content;
116 } # getContent
117
118 1;