uri-smtp 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/uri/smtp/version.rb +1 -1
- data/lib/uri/smtp.rb +116 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 49438452c14eb40d2d16d01c4f709e2ee1d40bfb664899befcd95099a7db451a
|
4
|
+
data.tar.gz: e98c9f37a0aa540895a32e428ca8d54277ff07a272349e438d8679113d679ca2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 46b9d9c3af1a9125c4eb6bfaa6b6d64d7f8b43c50dbecb6d4c077b577c94d04c110814b32cf2edaac085481c6cae80ef22336aa3dda56a4f0ac05681ed50fa1c
|
7
|
+
data.tar.gz: 6f291f3faacc6b8b01a87b6789b7b04308613b863b61f6343287c0c23583a8e8e3a65ce065f83a6d8a5214ac8d10cda7875f417ea905bd938bb0027596dece84
|
data/lib/uri/smtp/version.rb
CHANGED
data/lib/uri/smtp.rb
CHANGED
@@ -6,8 +6,124 @@ require_relative "smtp/version"
|
|
6
6
|
module URI
|
7
7
|
class SMTP < URI::Generic
|
8
8
|
class Error < StandardError; end
|
9
|
+
|
10
|
+
def initialize(scheme,
|
11
|
+
userinfo, host, port, registry,
|
12
|
+
path, opaque,
|
13
|
+
query,
|
14
|
+
fragment,
|
15
|
+
parser = DEFAULT_PARSER,
|
16
|
+
arg_check = false)
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
def port
|
21
|
+
return @port if @port
|
22
|
+
return 25 if host_local?
|
23
|
+
return 465 if tls?
|
24
|
+
587
|
25
|
+
end
|
26
|
+
|
27
|
+
def auth
|
28
|
+
# net-smtp: passing authtype without user/pw raises error
|
29
|
+
return nil unless userinfo
|
30
|
+
return parsed_query["auth"] if parsed_query.has_key?("auth")
|
31
|
+
return nil if scheme_auth == "none"
|
32
|
+
return scheme_auth if scheme_auth
|
33
|
+
"plain"
|
34
|
+
end
|
35
|
+
|
36
|
+
def domain
|
37
|
+
parsed_query["domain"]
|
38
|
+
end
|
39
|
+
|
40
|
+
def scheme_auth
|
41
|
+
scheme[/.*(?:\+(.+))/, 1]
|
42
|
+
end
|
43
|
+
|
44
|
+
def starttls
|
45
|
+
return false if tls?
|
46
|
+
return parsed_query["starttls"] if parsed_query.has_key?("starttls")
|
47
|
+
return false if host_local?
|
48
|
+
return false if insecure?
|
49
|
+
:always
|
50
|
+
end
|
51
|
+
alias_method :starttls?, :starttls
|
52
|
+
|
53
|
+
def tls
|
54
|
+
scheme == "smtps"
|
55
|
+
end
|
56
|
+
alias_method :tls?, :tls
|
57
|
+
|
58
|
+
def insecure?
|
59
|
+
scheme == "smtp+insecure"
|
60
|
+
end
|
61
|
+
|
62
|
+
def host_local?
|
63
|
+
%w[127.0.0.1 localhost].include?(host)
|
64
|
+
end
|
65
|
+
|
66
|
+
def parsed_query
|
67
|
+
@parsed_query ||= URI.decode_www_form(query.to_s).to_h.tap do
|
68
|
+
_1["starttls"] &&= case _1["starttls"]
|
69
|
+
when "always", "auto" then _1["starttls"].to_sym
|
70
|
+
when "false" then false
|
71
|
+
else
|
72
|
+
:always
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def to_h(format: nil)
|
78
|
+
case format
|
79
|
+
when :am, :action_mailer
|
80
|
+
{
|
81
|
+
address: host,
|
82
|
+
authentication: auth,
|
83
|
+
domain:,
|
84
|
+
enable_starttls: starttls,
|
85
|
+
port:
|
86
|
+
}.tap do
|
87
|
+
unless _1[:authentication].nil?
|
88
|
+
_1[:user_name] = decoded_user
|
89
|
+
_1[:password] = decoded_password
|
90
|
+
end
|
91
|
+
end.delete_if { |_k, v| v.nil? }
|
92
|
+
else
|
93
|
+
{
|
94
|
+
auth:,
|
95
|
+
domain:,
|
96
|
+
host:,
|
97
|
+
port:,
|
98
|
+
scheme:,
|
99
|
+
starttls:,
|
100
|
+
tls:
|
101
|
+
}.tap do
|
102
|
+
unless _1[:auth].nil?
|
103
|
+
_1[:user] = decoded_user
|
104
|
+
_1[:password] = decoded_password
|
105
|
+
end
|
106
|
+
end.delete_if { |_k, v| v.nil? }
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def self.parse(uri)
|
111
|
+
new(*URI.split(uri))
|
112
|
+
end
|
9
113
|
end
|
10
114
|
|
11
115
|
register_scheme "SMTP", SMTP
|
12
116
|
register_scheme "SMTPS", SMTP
|
13
117
|
end
|
118
|
+
|
119
|
+
module UriSmtpExtensions
|
120
|
+
def parse(uri)
|
121
|
+
if uri.start_with?("smtp")
|
122
|
+
return URI::SMTP.parse(uri)
|
123
|
+
end
|
124
|
+
|
125
|
+
super
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
URI.singleton_class.prepend(UriSmtpExtensions)
|