c.add :alternate_patina_color, Ncurses::COLOR_BLACK, Ncurses::COLOR_BLUE
c.add :missing_message_color, Ncurses::COLOR_BLACK, Ncurses::COLOR_RED
c.add :attachment_color, Ncurses::COLOR_CYAN, Ncurses::COLOR_BLACK
- c.add :valid_cryptosig_color, Ncurses::COLOR_YELLOW, Ncurses::COLOR_BLACK, Ncurses::A_BOLD
- c.add :invalid_cryptosig_color, Ncurses::COLOR_YELLOW, Ncurses::COLOR_RED, Ncurses::A_BOLD
+ c.add :cryptosig_valid_color, Ncurses::COLOR_YELLOW, Ncurses::COLOR_BLACK, Ncurses::A_BOLD
+ c.add :cryptosig_unknown_color, Ncurses::COLOR_CYAN, Ncurses::COLOR_BLACK
+ c.add :cryptosig_invalid_color, Ncurses::COLOR_YELLOW, Ncurses::COLOR_RED, Ncurses::A_BOLD
c.add :quote_patina_color, Ncurses::COLOR_YELLOW, Ncurses::COLOR_BLACK
c.add :sig_patina_color, Ncurses::COLOR_YELLOW, Ncurses::COLOR_BLACK
c.add :quote_color, Ncurses::COLOR_YELLOW, Ncurses::COLOR_BLACK
@lines = []
end
- def valid?; status == :valid end
-
def status
- return @status if @status
+ @status, @description = verify unless @status
+ @status
+ end
+
+ def description
+ @status, @description = verify unless @status
+ @description
+ end
+
+private
+
+ def verify
payload = Tempfile.new "redwood.payload"
signature = Tempfile.new "redwood.signature"
#Redwood::log "got output: #{gpg_output.inspect}"
@lines = gpg_output.split(/\n/)
- @description =
- if gpg_output =~ /^gpg: (.* signature from .*$)/
- $1
- else
- "Unable to determine validity of cryptographic signature"
- end
-
- @status = ($? == 0 ? :valid : :invalid)
+ if gpg_output =~ /^gpg: (.* signature from .*$)/
+ $? == 0 ? [:valid, $1] : [:invalid, $1]
+ else
+ [:unknown, "Unable to determine validity of cryptographic signature"]
+ end
end
end
[[[:sig_patina_color, "#{prefix}- (#{chunk.lines.length}-line signature)"]]] + chunk.lines.map { |line| [[:sig_color, "#{prefix}#{line}"]] }
end
when Message::CryptoSignature
- color = chunk.valid? ? :valid_cryptosig_color : :invalid_cryptosig_color
+ color =
+ case chunk.status
+ when :valid: :cryptosig_valid_color
+ when :invalid: :cryptosig_invalid_color
+ else :cryptosig_unknown_color
+ end
case state
when :closed
[[[color, "#{prefix}+ #{chunk.description}"]]]