Class: URI::IMAP
- Inherits:
-
Generic
- Object
- Generic
- URI::IMAP
- Defined in:
- lib/uri/imap.rb,
lib/uri/imap/version.rb
Overview
Class that adds imap(s)-scheme to the standard URI-module.
Defined Under Namespace
Classes: Error
Constant Summary collapse
- VERSION =
"0.2.0"
Class Method Summary collapse
-
.parse(uri) ⇒ URI::imap
Parse
uri
and instantiate instance of URI::imap.
Instance Method Summary collapse
-
#auth ⇒ String?
Return mechanism of authentication (default
"plain"
). -
#decoded_userinfo(format: :string) ⇒ String, ...
Decoded userinfo formatted as String, Array or Hash.
-
#host_local? ⇒ Boolean
Whether or not
host
is considered local. - #idle_timeout ⇒ Integer
-
#insecure? ⇒ Boolean
Whether or not the scheme indicates to skip STARTTLS.
- #open_timeout ⇒ Integer
-
#parsed_query ⇒ Hash
query
as Hash with valuesstarttls
,idle_timeout
andopen_timeout
coerced. - #port ⇒ Integer
-
#starttls ⇒ false, ...
Whether or not to use
STARTTLS
. -
#tls ⇒ Boolean
(also: #tls?)
Whether or not
scheme
starts with"imaps"
. -
#to_h ⇒ Hash
Return Hash representing the URI.
Class Method Details
Instance Method Details
#auth ⇒ String?
Return mechanism of authentication (default "plain"
).
Only returns value when imap#userinfo is provided and authentication is not "none"
.
Authentication can be provided via scheme (e.g. "imap+login://..."
) or via
query-params (e.g. "imap://foo.org?auth=cram-md5"
). The latter takes precedence when both are provided.
A provided value of "none"
results in nil
. Other values are returned as is.
46 47 48 49 50 51 52 53 54 55 |
# File 'lib/uri/imap.rb', line 46 def auth # net-imap: passing authtype without user/pw raises error return nil unless userinfo return nil if parsed_query["auth"] == "none" return parsed_query["auth"] if parsed_query.has_key?("auth") return nil if scheme_auth == "none" return scheme_auth if scheme_auth "plain" end |
#decoded_userinfo(format: :string) ⇒ String, ...
Decoded userinfo formatted as String, Array or Hash.
NOTE not provided user or password result in nil
(format: :array) or absent keys (format: :hash).
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/uri/imap.rb', line 80 def decoded_userinfo(format: :string) return if userinfo.nil? case format when :string [decoded_user, decoded_password].join(":") when :array [string_presence(decoded_user), string_presence(decoded_password)] when :hash { user: string_presence(decoded_user), password: string_presence(decoded_password) }.delete_if { |_k, v| v.nil? } else raise ArgumentError, "Unknown format #{format.inspect}. Should be one of #{%i[string array hash].inspect}." end end |
#host_local? ⇒ Boolean
Whether or not host
is considered local.
Hostnames that are considered local have certain defaults (i.e. port 25
and no STARTTLS
).
161 162 163 |
# File 'lib/uri/imap.rb', line 161 def host_local? %w[127.0.0.1 localhost].include?(host) end |
#idle_timeout ⇒ Integer
100 101 102 |
# File 'lib/uri/imap.rb', line 100 def idle_timeout parsed_query["idle_timeout"] end |
#insecure? ⇒ Boolean
Whether or not the scheme indicates to skip STARTTLS.
148 149 150 |
# File 'lib/uri/imap.rb', line 148 def insecure? scheme.start_with?("imap+insecure") end |
#open_timeout ⇒ Integer
105 106 107 |
# File 'lib/uri/imap.rb', line 105 def open_timeout parsed_query["open_timeout"] end |
#parsed_query ⇒ Hash
query
as Hash with values starttls
, idle_timeout
and open_timeout
coerced.
167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
# File 'lib/uri/imap.rb', line 167 def parsed_query @parsed_query ||= URI.decode_www_form(query.to_s).to_h .delete_if { |_k, v| !string_presence(v) } .tap do _1["idle_timeout"] &&= _1["idle_timeout"].to_i _1["open_timeout"] &&= _1["open_timeout"].to_i _1["starttls"] &&= case _1["starttls"] when "always", "auto" then _1["starttls"].to_sym when "false" then false else :always end end end |
#port ⇒ Integer
13 14 15 16 17 18 |
# File 'lib/uri/imap.rb', line 13 def port return @port if @port return 993 if tls? 143 end |
#starttls ⇒ false, ...
Whether or not to use STARTTLS
.
The possible return values (i.e. :always
, :auto
and false
) map to what net-imap uses:
:always
useSTARTTLS
or disconnect when server does not support it.:auto
useSTARTTLS
when supported, otherwise continue unencrypted.false
don't useSTARTTLS
.
121 122 123 124 125 126 127 128 |
# File 'lib/uri/imap.rb', line 121 def starttls return false if tls? return parsed_query["starttls"] if parsed_query.has_key?("starttls") return false if host_local? return false if insecure? :always end |
#tls ⇒ Boolean Also known as: tls?
Returns whether or not scheme
starts with "imaps"
.
131 132 133 |
# File 'lib/uri/imap.rb', line 131 def tls !!scheme[/^imaps/] end |
#to_h ⇒ Hash
Return Hash representing the URI.
format
should be one of: nil
or :action_mailer
(or :am
).
Format :action_mailer
matches how ActionMailer should be configured and works around some quirks in Mail v2.8.1.
NOTE keys with nil-values are stripped.
201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 |
# File 'lib/uri/imap.rb', line 201 def to_h { auth:, host:, idle_timeout:, open_timeout:, port:, scheme:, starttls:, tls: }.tap do unless _1[:auth].nil? _1[:user] = decoded_user _1[:password] = decoded_password end end.delete_if { |_k, v| v.nil? } end |