WIP
This commit is contained in:
parent
a2db4e3cdd
commit
1ef6d4e6ce
|
@ -23,7 +23,6 @@ module Pigeon
|
|||
# the key should be derived
|
||||
def initialize(seed = SecureRandom.random_bytes(Ed25519::KEY_SIZE))
|
||||
@seed = seed
|
||||
@raw_key = Ed25519::SigningKey.new(seed)
|
||||
end
|
||||
|
||||
def private_key
|
||||
|
@ -31,14 +30,26 @@ module Pigeon
|
|||
end
|
||||
|
||||
def public_key
|
||||
bytes = @raw_key.verify_key.to_bytes
|
||||
bytes = raw_key.verify_key.to_bytes
|
||||
b64 = Base64.urlsafe_encode64(bytes)
|
||||
|
||||
@public_key ||= KeyPair.add_headers(b64)
|
||||
end
|
||||
|
||||
def sign(string)
|
||||
hex = raw_key.sign(string)
|
||||
b64 = Base64.urlsafe_encode64(hex)
|
||||
return b64 + ".sig.ed25519"
|
||||
end
|
||||
|
||||
def save!
|
||||
Pigeon::Storage.current.set_config(SEED_CONFIG_KEY, @seed)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def raw_key
|
||||
@raw_key ||= Ed25519::SigningKey.new(@seed)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
require "digest"
|
||||
|
||||
module Pigeon
|
||||
class Message
|
||||
NAME_OF_DRAFT = "HEAD.draft"
|
||||
|
@ -36,27 +38,36 @@ module Pigeon
|
|||
end
|
||||
|
||||
def calculate_signature
|
||||
puts "========== TODO"
|
||||
"FIX_ASAP_!"
|
||||
string = Template.new(self).render_without_signature
|
||||
KeyPair.current.sign(string)
|
||||
end
|
||||
|
||||
def path_to_message_numbe(n)
|
||||
def path_to_message_number(n)
|
||||
File.join(".pigeon", "user", "#{n.to_s.rjust(7, "0")}.pigeon")
|
||||
end
|
||||
|
||||
def previous_message
|
||||
raise "Could not load @depth" unless @depth
|
||||
if (@depth == 1)
|
||||
return nil
|
||||
else
|
||||
Marshal.load(File.read(path_to_message_number(@depth - 1)))
|
||||
end
|
||||
end
|
||||
|
||||
def calculate_depth
|
||||
Dir[OUTBOX_PATH].count
|
||||
end
|
||||
|
||||
def sign
|
||||
# Set @depth
|
||||
@depth = (Dir[OUTBOX_PATH].count - 1)
|
||||
@depth = calculate_depth
|
||||
@prev = previous_message ? previous_message.signature : "".inspect
|
||||
@signature = calculate_signature
|
||||
|
||||
# Create a file in ".pigeon/user/#{ @depth.rjust(7, "0") }".pigeon
|
||||
file_path = path_to_message_numbe(@depth)
|
||||
binding.pry
|
||||
# calculate prev
|
||||
@prev = "HOW WILL I DO THIS?"
|
||||
# Store to disk
|
||||
self.save
|
||||
# return self
|
||||
file_path = path_to_message_number(@depth)
|
||||
self.freeze
|
||||
File.write(file_path, Marshal.dump(self))
|
||||
self
|
||||
end
|
||||
|
||||
def save
|
||||
|
|
|
@ -6,9 +6,9 @@ module Pigeon
|
|||
class Template
|
||||
TPL_DIR = "views"
|
||||
|
||||
HEADER_TPL = File.read(File.join(TPL_DIR, "1_header.erb"))
|
||||
BODY_TPL = File.read(File.join(TPL_DIR, "2_body.erb"))
|
||||
FOOTER_TPL = File.read(File.join(TPL_DIR, "3_footer.erb"))
|
||||
HEADER_TPL = File.read(File.join(TPL_DIR, "1_header.erb")).sub("\n", "")
|
||||
BODY_TPL = File.read(File.join(TPL_DIR, "2_body.erb")).sub("\n", "")
|
||||
FOOTER_TPL = File.read(File.join(TPL_DIR, "3_footer.erb")).sub("\n", "")
|
||||
|
||||
COMPLETE_TPL = [HEADER_TPL, BODY_TPL, FOOTER_TPL].join("")
|
||||
|
||||
|
@ -19,6 +19,16 @@ module Pigeon
|
|||
end
|
||||
|
||||
def render
|
||||
do_render(COMPLETE_TPL)
|
||||
end
|
||||
|
||||
def render_without_signature
|
||||
do_render([HEADER_TPL, BODY_TPL].join(""))
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def do_render(template)
|
||||
author = message.author
|
||||
body = message.body
|
||||
kind = message.kind
|
||||
|
|
|
@ -1 +1,2 @@
|
|||
<% body.to_a.each do |k, v| %><%= k %>:<%= v %><%= "\n" %><% end %>
|
||||
|
||||
|
|
Loading…
Reference in New Issue