summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client.rb79
-rw-r--r--helpers.rb81
-rw-r--r--views/item.erb26
3 files changed, 94 insertions, 92 deletions
diff --git a/client.rb b/client.rb
index 759fdec..5b2aced 100644
--- a/client.rb
+++ b/client.rb
@@ -14,7 +14,6 @@ post "/outbox" do
recipients.delete ACTOR
recipients.uniq!
- p params
create = {
"@context" => "https://www.w3.org/ns/activitystreams",
"id" => File.join(SOCIAL_URL, outbox_path),
@@ -44,7 +43,7 @@ post "/outbox" do
#create["object"]["to"] += recipients
#create["to"] += recipients
#p params["to"]
- p create
+ #p create
File.open(outbox_path, "w+") { |f| f.puts create.to_json }
File.open(object_path, "w+") { |f| f.puts create["object"].to_json }
@@ -131,4 +130,80 @@ helpers do
redirect("/login.html") unless session['client']
end
+ def items
+ nr = 0
+ files = Dir[File.join(@dir, '*.json')] + Dir['public/objects/*.json']
+ @items = files.sort.collect do |file|
+ item = JSON.parse(File.read(file))
+ mention = mention(item['attributedTo'])
+ following_path = File.join('public', 'following', mention + '.json')
+ File.exists?(following_path) ? follow = 'unfollow' : follow = 'follow'
+ nr += 1
+ { :id => item['id'],
+ :nr => nr,
+ :parent => item['inReplyTo'],
+ :file => file,
+ :actor_url => item['attributedTo'],
+ :mention => mention,
+ :follow => follow,
+ :content => item['content'],
+ :attachment => item['attachment'],
+ :indent => 2,
+ :replies => []
+ }
+ end.compact
+ @items.last[:nr] = @items.last[:nr] - 2 unless @items.empty?
+ end
+
+ def threads
+ items
+ @threads = []
+ @items.each do |i|
+ if i[:parent].nil? or @items.select{|it| it[:id] == i[:parent] }.empty?
+ @threads << i
+ else
+ @items.select{|it| it[:id] == i[:parent] }.each do |it|
+ i[:indent] = it[:indent] + 2
+ it[:replies] << i
+ end
+ end
+ end
+ end
+
+ def html item
+ @item = item
+ erb :item
+ end
+
+ def people
+ File.read('cache/people.tsv').split("\n").collect {|l| l.chomp.split("\t")}
+ end
+
+ def mention actor
+ person = people.select{|p| p[1] == actor}
+ if person.empty?
+ mention = "#{fetch(actor)["preferredUsername"]}@#{URI(actor).host}"
+ File.open('cache/people.tsv','a'){|f| f.puts "#{mention}\t#{actor}"}
+ mention
+ else
+ person[0][0]
+ end
+ end
+
+ def actor mention
+ mention = mention.sub(/^@/, '').chomp
+ actors = people.select{|p| p[0] == mention}
+ if actors.empty?
+ user, server = mention.split("@")
+ actor = fetch("https://#{server}/.well-known/webfinger?resource=acct:#{mention}",
+ "application/jrd+json")["links"].select { |l|
+ l["rel"] == "self"
+ }[0]["href"]
+ File.open('cache/people.tsv','a'){|f| f.puts "#{mention}\t#{actor}"}
+ actor
+ else
+ actors[0][1]
+ end
+ end
+
end
diff --git a/helpers.rb b/helpers.rb
index 50a2b24..66dca3d 100644
--- a/helpers.rb
+++ b/helpers.rb
@@ -1,80 +1,5 @@
helpers do
- def items
- nr = 0
- @items = Dir[File.join(@dir, '*.json')].sort.collect do |file|
- item = JSON.parse(File.read(file))
- mention = mention(item['attributedTo'])
- following_path = File.join('public', 'following', mention + '.json')
- File.exists?(following_path) ? follow = 'unfollow' : follow = 'follow'
- nr += 1
- { :id => item['id'],
- :nr => nr,
- :parent => item['inReplyTo'],
- :file => file,
- :actor_url => item['attributedTo'],
- :mention => mention,
- :follow => follow,
- :content => item['content'],
- :attachment => item['attachment'],
- :indent => 2,
- :replies => []
- }
- end.compact
- @items.last[:nr] = @items.last[:nr] - 2 unless @items.empty?
- end
-
- def threads
- items
- @threads = []
- @items.each do |i|
- if i[:parent].nil? or @items.select{|it| it[:id] == i[:parent] }.empty?
- @threads << i
- else
- @items.select{|it| it[:id] == i[:parent] }.each do |it|
- i[:indent] = it[:indent] + 2
- it[:replies] << i
- end
- end
- end
- end
-
- def html item
- @item = item
- erb :item
- end
-
- def people
- File.read('cache/people.tsv').split("\n").collect {|l| l.chomp.split("\t")}
- end
-
- def mention actor
- person = people.select{|p| p[1] == actor}
- if person.empty?
- mention = "#{fetch(actor)["preferredUsername"]}@#{URI(actor).host}"
- File.open('cache/people.tsv','a'){|f| f.puts "#{mention}\t#{actor}"}
- mention
- else
- person[0][0]
- end
- end
-
- def actor mention
- mention = mention.sub(/^@/, '').chomp
- actors = people.select{|p| p[0] == mention}
- if actors.empty?
- user, server = mention.split("@")
- actor = fetch("https://#{server}/.well-known/webfinger?resource=acct:#{mention}",
- "application/jrd+json")["links"].select { |l|
- l["rel"] == "self"
- }[0]["href"]
- File.open('cache/people.tsv','a'){|f| f.puts "#{mention}\t#{actor}"}
- actor
- else
- actors[0][1]
- end
- end
-
def fetch url, accept = 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'
p url
response = `/run/current-system/sw/bin/curl --fail-with-body -sSL -H 'Accept: #{accept}' #{url}`
@@ -98,9 +23,9 @@ helpers do
signature = Base64.strict_encode64(keypair.sign(OpenSSL::Digest.new('SHA256'), signed_string))
signed_header = 'keyId="' + ACTOR + '#main-key",algorithm="rsa-sha256",headers="(request-target) host date digest content-type",signature="' + signature + '"'
- p url
- #puts `/run/current-system/sw/bin/curl --fail-with-body -sSL -X POST -H 'Content-Type: application/activity+json' -H 'Host: #{host}' -H 'Date: #{date}' -H 'Digest: #{digest}' -H 'Signature: #{signed_header}' -d '#{body}' #{inbox}`
- puts `/run/current-system/sw/bin/curl -iL -X POST -H 'Content-Type: application/activity+json' -H 'Host: #{host}' -H 'Date: #{date}' -H 'Digest: #{digest}' -H 'Signature: #{signed_header}' -d '#{body}' #{inbox}`
+ #p url
+ puts `/run/current-system/sw/bin/curl --fail-with-body -sSL -X POST -H 'Content-Type: application/activity+json' -H 'Host: #{host}' -H 'Date: #{date}' -H 'Digest: #{digest}' -H 'Signature: #{signed_header}' -d '#{body}' #{inbox}`
+ #puts `/run/current-system/sw/bin/curl -iL -X POST -H 'Content-Type: application/activity+json' -H 'Host: #{host}' -H 'Date: #{date}' -H 'Digest: #{digest}' -H 'Signature: #{signed_header}' -d '#{body}' #{inbox}`
end
end
diff --git a/views/item.erb b/views/item.erb
index 933fe71..287054e 100644
--- a/views/item.erb
+++ b/views/item.erb
@@ -1,21 +1,23 @@
<div style='margin-left:<%= @item[:indent] %>em' id='<%= @item[:nr] %>'>
<b><a href='<%= @item[:actor_url] %>', target='_blank'><%= @item[:mention] %></a></b>&nbsp;
- <form action='<%= File.join @item[:follow], @item[:mention] %>' method='post'>
- <button><%= @item[:follow].capitalize %></button>
- </form>
- &nbsp;
- <form action='/delete' method='post'>
- <input type='hidden' name='file' value='<%= @item[:file] %>' />
- <input type='hidden' name='redirect' value='/<%= @dir.sub('inbox','') %>#<%= @item[:nr] %>' />
- <button>Delete</button>
- </form>
- <% if @dir == 'inbox' %>
+ <% if @item[:mention] != ACCOUNT %>
+ <form action='<%= File.join @item[:follow], @item[:mention] %>' method='post'>
+ <button><%= @item[:follow].capitalize %></button>
+ </form>
&nbsp;
- <form action='/archive' method='post'>
+ <form action='/delete' method='post'>
<input type='hidden' name='file' value='<%= @item[:file] %>' />
<input type='hidden' name='redirect' value='/<%= @dir.sub('inbox','') %>#<%= @item[:nr] %>' />
- <button>Archive</button>
+ <button>Delete</button>
</form>
+ <% if @dir == 'inbox' %>
+ &nbsp;
+ <form action='/archive' method='post'>
+ <input type='hidden' name='file' value='<%= @item[:file] %>' />
+ <input type='hidden' name='redirect' value='/<%= @dir.sub('inbox','') %>#<%= @item[:nr] %>' />
+ <button>Archive</button>
+ </form>
+ <% end %>
<% end %>
<%= @item[:content] %>
<% if @item[:attachment]