mailarchiva 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5e653b0d7c3ce3d017ba0c755fd4aeb4046a0765
4
+ data.tar.gz: ed46e44af53c5c81b9f9f10d3b68cc3dda450568
5
+ SHA512:
6
+ metadata.gz: a4882baa6b0a33b13c70b9a7e1e873252729c14ab0c052f3ab1906ebc1223008d88610eb39bd03c5bf31309dcf9c788870cff042c8ab63aa3e891f758bf41290
7
+ data.tar.gz: e883c4c776bd464959540a358c535b6885360d0425673afedb738a36098c3d35a50fea912a3a0135f4e55b861e47f56c5b373ec7a36dc50fc1bdad1ee20725fe
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+ group :development do
9
+ gem "shoulda", ">= 0"
10
+ gem "rdoc", "~> 3.12"
11
+ gem "bundler", "~> 1.0"
12
+ gem "jeweler", "~> 2.0"
13
+ gem "simplecov", ">= 0"
14
+ end
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2015 David John
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,14 @@
1
+ # mailarchiva
2
+
3
+ A ruby gem to access the [Mailarchiva] API. Refer to the [Mailarchiva API] for more info.
4
+
5
+ ```ruby
6
+ require 'mailarchiva'
7
+ mailarchiva = Mailarchiva::Client.new(host: '192.168.1.1', user: 'user', pass: 'pass')
8
+ results = mailarchiva.search_by_subject('test') # An array of Mailarchiva::Message
9
+
10
+ mailarchiva.get_message(results.first) # A Mail message
11
+ ```
12
+
13
+ [Mailarchiva]:https://www.mailarchiva.com/
14
+ [Mailarchiva API]:https://www.mailarchiva.com/help/display/MAIL/Web+Services+API
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
17
+ gem.name = "mailarchiva"
18
+ gem.homepage = "http://github.com/billguy/mailarchiva"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Access the Mailarchiva API}
21
+ gem.description = %Q{A gem to access the Mailarchiva API}
22
+ gem.email = "dj@dbjohn.com"
23
+ gem.authors = ["David John"]
24
+ # dependencies defined in Gemfile
25
+ gem.add_dependency 'savon', '~> 2.10'
26
+ gem.add_dependency 'mail', '~> 2.6'
27
+ end
28
+ Jeweler::RubygemsDotOrgTasks.new
29
+
30
+ require 'rake/testtask'
31
+ Rake::TestTask.new(:test) do |test|
32
+ test.libs << 'lib' << 'test'
33
+ test.pattern = 'test/**/test_*.rb'
34
+ test.verbose = true
35
+ end
36
+
37
+ desc "Code coverage detail"
38
+ task :simplecov do
39
+ ENV['COVERAGE'] = "true"
40
+ Rake::Task['test'].execute
41
+ end
42
+
43
+ task :default => :test
44
+
45
+ require 'rdoc/task'
46
+ Rake::RDocTask.new do |rdoc|
47
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
48
+
49
+ rdoc.rdoc_dir = 'rdoc'
50
+ rdoc.title = "mailarchiva #{version}"
51
+ rdoc.rdoc_files.include('README*')
52
+ rdoc.rdoc_files.include('lib/**/*.rb')
53
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.0
@@ -0,0 +1,32 @@
1
+ # https://www.mailarchiva.com/help/display/MAIL/Web+Services+API
2
+
3
+ require 'mailarchiva/rest_client'
4
+ require 'mailarchiva/soap_client'
5
+
6
+ module Mailarchiva
7
+
8
+ class Client
9
+
10
+ attr_accessor :client
11
+
12
+ def initialize(args)
13
+ args.reverse_merge!({client: :soap, ssl: false, port: 8090, app_name: 'ROOT'})
14
+ @client = args[:client] == :rest ? RestClient.new(args) : SoapClient.new(args)
15
+ end
16
+
17
+ # blob_category 'email'
18
+ # query 'subject:test'
19
+ # sort_field 'sentdate' | 'archivedate' | 'receiveddate'
20
+ # sort_order 'sentdate' | 'archivedate' | 'receiveddate'
21
+ # date_type 'sentdate' | 'archivedate' | 'receiveddate'
22
+ # sent_before "2015-06-20T14:57:27" | Time object
23
+ # sent_after "2015-06-20T14:57:27" | Time object
24
+ # max_results 1000
25
+ def search_by_subject(subject, params={})
26
+ params.reverse_merge!({query: "subject:#{subject}"})
27
+ @client.search(params)
28
+ end
29
+
30
+ end
31
+
32
+ end
@@ -0,0 +1,17 @@
1
+ require "base64"
2
+ require "mail"
3
+
4
+ module Mailarchiva
5
+
6
+ class Base
7
+
8
+ attr_accessor :host, :user, :pass, :ssl, :port, :app_name, :client
9
+
10
+ def initialize(args)
11
+ args.each do |k,v|
12
+ instance_variable_set("@#{k}", v) unless v.nil?
13
+ end
14
+ end
15
+ end
16
+
17
+ end
@@ -0,0 +1,26 @@
1
+ module Mailarchiva
2
+
3
+ class Message
4
+
5
+ attr_accessor :blob_id, :volume_id, :size, :sentdate, :receiveddate, :archivedate, :from, :to, :subject, :cc, :bcc, :deliveredto, :messageid, :rcptto, :mailfrom
6
+
7
+ def initialize(field_values)
8
+ field_values[:field_values].each do |field|
9
+ key = field[:field]
10
+ value = field[:value]
11
+ case key
12
+ when /date/
13
+ value = DateTime.parse(value) if value
14
+ when /size/
15
+ value = value.to_i if value
16
+ else
17
+ value
18
+ end
19
+ instance_variable_set("@#{key}", value) if respond_to?(key.to_sym)
20
+ end
21
+ @blob_id = field_values[:id][:blob_id]
22
+ @volume_id = field_values[:id][:volume_id]
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,39 @@
1
+ require 'mailarchiva/base'
2
+
3
+ module Mailarchiva
4
+
5
+ class RestClient < Base
6
+
7
+ def initialize(args)
8
+ super(args)
9
+ raise "RestClient is not supported yet b/c it does not work on Mailarchiva as of 4.5.8"
10
+ end
11
+
12
+ def search(params={})
13
+ response = @client.get api, params
14
+ parsed_response = JSON.parse(response.body, symbolize_names: true)
15
+ parsed_response[:results]
16
+ parsed_response.map{|field_values| Message.new(field_values)}
17
+ end
18
+
19
+ def api
20
+ "/archiva3/api/blob"
21
+ end
22
+
23
+ def self.client(host, user, pass, ssl, port, app_name)
24
+ connection = Faraday.new(url: url(ssl, host, port))
25
+ connection.headers = {'Authorization' => basic_auth(app_name, user, pass), 'Accept' => 'application/json'}
26
+ connection
27
+ end
28
+
29
+ def self.basic_auth(app_name, user, pass)
30
+ Base64.strict_encode64("#{app_name}:#{user}:#{pass}")
31
+ end
32
+
33
+ def self.url(ssl, host, port)
34
+ "%s://%s:%s" % [ssl ? 'https' : 'http', host, port]
35
+ end
36
+
37
+ end
38
+
39
+ end
@@ -0,0 +1,73 @@
1
+ require 'mailarchiva/base'
2
+ require 'mailarchiva/message'
3
+ require 'savon'
4
+
5
+ module Mailarchiva
6
+
7
+ class SoapClient < Base
8
+
9
+ HTTPI.adapter = :net_http
10
+
11
+ attr_accessor :soap_client
12
+
13
+ def initialize(args)
14
+ super(args)
15
+ end
16
+
17
+ def search(params={})
18
+ params.reverse_merge!({blob_category: 'email', max_results: 1000})
19
+ params[:sent_before] = params[:sent_before].strftime("%Y-%m-%dT%T") if params.has_key?(:sent_before) && params[:sent_before].is_a?(Time)
20
+ params[:sent_after] = params[:sent_after].strftime("%Y-%m-%dT%T") if params.has_key?(:sent_after) && params[:sent_after].is_a?(Time)
21
+ search_response = soap_client.call(:search, message: params)
22
+ search_results = search_results_from_response(search_response)
23
+ logout
24
+ search_results
25
+ end
26
+
27
+ def search_results_from_response(response)
28
+ return [] if search_result_size == 0
29
+ search_results_response = soap_client.call(:get_search_results, message: { blob_category: 'email', start: 1, end: search_result_size })
30
+ search_results = search_results_response.body[:get_search_results_response][:return]
31
+ search_results.map{|field_values| Message.new(field_values)}
32
+ end
33
+
34
+ def search_result_size
35
+ search_result_size_response = soap_client.call(:get_search_result_size)
36
+ search_result_size_response.body[:get_search_result_size_response][:return].to_i
37
+ end
38
+
39
+ def get_message(blob_id, volume_id)
40
+ blob_response = soap_client.call(:get_blob, message: { 'blobID' =>{ 'blobID' => blob_id, 'volumeID' => volume_id } })
41
+ encoded_message = blob_response.body[:get_blob_response][:return][:blob]
42
+ decoded_message = Base64.decode64(encoded_message)
43
+ Mail.new(decoded_message)
44
+ end
45
+
46
+ def wsdl
47
+ "%s://%s:%s/services/search?wsdl" % [ssl ? 'https' : 'http', host, port]
48
+ end
49
+
50
+ def soap_client
51
+ @soap_client ||= begin
52
+ auth_cookies = login(Savon.client(wsdl: wsdl))
53
+ Savon.client(wsdl: wsdl, headers: { 'Cookie' => auth_cookies.to_s})
54
+ end
55
+ end
56
+
57
+ def login(client)
58
+ response = client.call(:login, message: { applicationname: @app_name, username: @user, password: @pass })
59
+ response.http.cookies.first.name_and_value
60
+ end
61
+
62
+ def logged_in?
63
+ @session_id.nil? ? false : soap_client.call(:is_logged_in).body[:is_logged_in_response][:return]
64
+ end
65
+
66
+ def logout
67
+ soap_client.call(:logout, message: {})
68
+ @soap_client = nil
69
+ end
70
+
71
+ end
72
+
73
+ end
@@ -0,0 +1,10 @@
1
+ class Mailarchiva
2
+ module Version
3
+ MAJOR = 0
4
+ MINOR = 0
5
+ PATCH = 0
6
+ BUILD = ''
7
+
8
+ STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
9
+ end
10
+ end
@@ -0,0 +1,73 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+ # stub: mailarchiva 0.0.0 ruby lib
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "mailarchiva"
9
+ s.version = "0.0.0"
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib"]
13
+ s.authors = ["David John"]
14
+ s.date = "2015-06-22"
15
+ s.description = "A gem to access the Mailarchiva API"
16
+ s.email = "dj@dbjohn.com"
17
+ s.extra_rdoc_files = [
18
+ "LICENSE.txt",
19
+ "README.md"
20
+ ]
21
+ s.files = [
22
+ ".document",
23
+ "Gemfile",
24
+ "LICENSE.txt",
25
+ "README.md",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "lib/mailarchiva.rb",
29
+ "lib/mailarchiva/base.rb",
30
+ "lib/mailarchiva/message.rb",
31
+ "lib/mailarchiva/rest_client.rb",
32
+ "lib/mailarchiva/soap_client.rb",
33
+ "lib/mailarchiva/version.rb",
34
+ "mailarchiva.gemspec",
35
+ "test/helper.rb",
36
+ "test/test_mailarchiva.rb"
37
+ ]
38
+ s.homepage = "http://github.com/billguy/mailarchiva"
39
+ s.licenses = ["MIT"]
40
+ s.rubygems_version = "2.4.2"
41
+ s.summary = "Access the Mailarchiva API"
42
+
43
+ if s.respond_to? :specification_version then
44
+ s.specification_version = 4
45
+
46
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
47
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
48
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
49
+ s.add_development_dependency(%q<bundler>, ["~> 1.0"])
50
+ s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
51
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
52
+ s.add_runtime_dependency(%q<savon>, ["~> 2.10"])
53
+ s.add_runtime_dependency(%q<mail>, ["~> 2.6"])
54
+ else
55
+ s.add_dependency(%q<shoulda>, [">= 0"])
56
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
57
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
58
+ s.add_dependency(%q<jeweler>, ["~> 2.0"])
59
+ s.add_dependency(%q<simplecov>, [">= 0"])
60
+ s.add_dependency(%q<savon>, ["~> 2.10"])
61
+ s.add_dependency(%q<mail>, ["~> 2.6"])
62
+ end
63
+ else
64
+ s.add_dependency(%q<shoulda>, [">= 0"])
65
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
66
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
67
+ s.add_dependency(%q<jeweler>, ["~> 2.0"])
68
+ s.add_dependency(%q<simplecov>, [">= 0"])
69
+ s.add_dependency(%q<savon>, ["~> 2.10"])
70
+ s.add_dependency(%q<mail>, ["~> 2.6"])
71
+ end
72
+ end
73
+
@@ -0,0 +1,34 @@
1
+ require 'simplecov'
2
+
3
+ module SimpleCov::Configuration
4
+ def clean_filters
5
+ @filters = []
6
+ end
7
+ end
8
+
9
+ SimpleCov.configure do
10
+ clean_filters
11
+ load_adapter 'test_frameworks'
12
+ end
13
+
14
+ ENV["COVERAGE"] && SimpleCov.start do
15
+ add_filter "/.rvm/"
16
+ end
17
+ require 'rubygems'
18
+ require 'bundler'
19
+ begin
20
+ Bundler.setup(:default, :development)
21
+ rescue Bundler::BundlerError => e
22
+ $stderr.puts e.message
23
+ $stderr.puts "Run `bundle install` to install missing gems"
24
+ exit e.status_code
25
+ end
26
+ require 'test/unit'
27
+ require 'shoulda'
28
+
29
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
30
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
31
+ require 'mailarchiva'
32
+
33
+ class Test::Unit::TestCase
34
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestMailarchiva < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,158 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mailarchiva
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - David John
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-06-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: shoulda
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rdoc
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.12'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.12'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: jeweler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: savon
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.10'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.10'
97
+ - !ruby/object:Gem::Dependency
98
+ name: mail
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '2.6'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '2.6'
111
+ description: A gem to access the Mailarchiva API
112
+ email: dj@dbjohn.com
113
+ executables: []
114
+ extensions: []
115
+ extra_rdoc_files:
116
+ - LICENSE.txt
117
+ - README.md
118
+ files:
119
+ - ".document"
120
+ - Gemfile
121
+ - LICENSE.txt
122
+ - README.md
123
+ - Rakefile
124
+ - VERSION
125
+ - lib/mailarchiva.rb
126
+ - lib/mailarchiva/base.rb
127
+ - lib/mailarchiva/message.rb
128
+ - lib/mailarchiva/rest_client.rb
129
+ - lib/mailarchiva/soap_client.rb
130
+ - lib/mailarchiva/version.rb
131
+ - mailarchiva.gemspec
132
+ - test/helper.rb
133
+ - test/test_mailarchiva.rb
134
+ homepage: http://github.com/billguy/mailarchiva
135
+ licenses:
136
+ - MIT
137
+ metadata: {}
138
+ post_install_message:
139
+ rdoc_options: []
140
+ require_paths:
141
+ - lib
142
+ required_ruby_version: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ required_rubygems_version: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ requirements: []
153
+ rubyforge_project:
154
+ rubygems_version: 2.4.2
155
+ signing_key:
156
+ specification_version: 4
157
+ summary: Access the Mailarchiva API
158
+ test_files: []