Exception: SPF::Result
- Inherits:
-
Exception
- Object
- Exception
- SPF::Result
show all
- Defined in:
- lib/spf/result.rb
Defined Under Namespace
Classes: Error, Fail, Neutral, NeutralByDefault, None, Pass, PermError, SoftFail, TempError
Constant Summary
collapse
- RESULT_CLASSES =
{
:pass => SPF::Result::Pass,
:fail => SPF::Result::Fail,
:softfail => SPF::Result::SoftFail,
:neutral => SPF::Result::Neutral,
:neutral_by_default => SPF::Result::NeutralByDefault,
:none => SPF::Result::None,
:error => SPF::Result::Error,
:permerror => SPF::Result::PermError,
:temperror => SPF::Result::TempError
}
'Received-SPF'
{
:helo => 'helo',
:mfrom => 'envelope-from',
:pra => 'pra'
}
{
:helo => 'helo',
:mfrom => 'envelope-from',
:pra => 'pra'
}
- ATEXT_PATTERN =
/[[:alnum:]!#\$%&'*+\-\/=?^_`{|}~]/
- DOT_ATOM_PATTERN =
/
(#{ATEXT_PATTERN})+ ( \. (#{ATEXT_PATTERN})+ )*
/x
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(args = []) ⇒ Result
Returns a new instance of Result.
124
125
126
127
128
129
130
131
132
133
134
|
# File 'lib/spf/result.rb', line 124
def initialize(args = [])
@server = args.shift if args.any?
unless self.instance_variable_defined?(:@server)
raise SPF::OptionRequiredError.new('SPF server object required')
end
@request = args.shift if args.any?
unless self.instance_variable_defined?(:@request)
raise SPF::OptionRequiredError.new('Request object required')
end
@result_text = args.shift if args.any?
end
|
Instance Attribute Details
#request ⇒ Object
Returns the value of attribute request.
7
8
9
|
# File 'lib/spf/result.rb', line 7
def request
@request
end
|
#result_text ⇒ Object
Returns the value of attribute result_text.
7
8
9
|
# File 'lib/spf/result.rb', line 7
def result_text
@result_text
end
|
#server ⇒ Object
Returns the value of attribute server.
7
8
9
|
# File 'lib/spf/result.rb', line 7
def server
@server
end
|
Instance Method Details
#is_code(code) ⇒ Object
155
156
157
|
# File 'lib/spf/result.rb', line 155
def is_code(code)
return self.isa_by_name(code.downcase)
end
|
#isa_by_name(name) ⇒ Object
149
150
151
152
153
|
# File 'lib/spf/result.rb', line 149
def isa_by_name(name)
suspect_class = self.klass(name.downcase)
return false unless suspect_class
return suspect_class === self
end
|
#klass(name = nil) ⇒ Object
140
141
142
143
144
145
146
147
|
# File 'lib/spf/result.rb', line 140
def klass(name=nil)
if name
name = name.to_sym if String === name
return RESULT_CLASSES[name]
else
return name
end
end
|
#local_explanation ⇒ Object
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
|
# File 'lib/spf/result.rb', line 163
def local_explanation
return @local_explanation if self.instance_variable_defined?(:@local_explanation)
request = self.request
local_explanation = request.state(:local_explanation)
if local_explanation
local_explanation = sprintf('%s (%s)', local_explanation.expand, @text)
else
local_explanation = @text
end
root_request = request.root_request
local_explanation = (request == root_request or not root_request) ?
sprintf('%s: %s', request.authority_domain, local_explanation) :
sprintf('%s ... %s: %s', root_request.authority_domain, request.authority_domain, local_explanation)
return @local_explanation = SPF::Util.sanitize_string(local_explanation)
end
|
#name ⇒ Object
136
137
138
|
# File 'lib/spf/result.rb', line 136
def name
return self.code
end
|
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
|
# File 'lib/spf/result.rb', line 184
def
return @received_spf_header if self.instance_variable_defined?(:@received_spf_header)
scope_name = self.[@request.scope]
identify_key_name = self.[@request.scope]
info_pairs = [
:receiver => @server.hostname || 'unknown',
:identity => scope_name,
identity_key_name.to_sym => @request.identity,
:client_ip => SPF::Util.ip_address_to_string(@request.ip_address)
]
if @request.scope != :helo and @request.helo_identity
info_pairs[:helo] = @request.helo_identity
end
info_string = ''
while info_pairs.any?
key = info_pairs.shift
value = info_pairs.shift
info_string += '; ' unless info_string.blank?
if value !~ /^#{DOT_ATOM_PATTERN}$/o
value.gsub!(/(["\\])/, "\\#{$1}") value = "\"#{value}\"" end
info_string += "#{key}=#{value}"
end
return @received_spf_header = sprintf(
'%s: %s (%s) %s',
@received_spf_header_name,
self.code,
self.local_explanation,
info_string
)
end
|
#to_s ⇒ Object
159
160
161
|
# File 'lib/spf/result.rb', line 159
def to_s
return sprintf('%s (%s)', self.name, SPF::Util.sanitize_string(super.to_s))
end
|