diff options
author | pdp8 <pdp8@pdp8.info> | 2023-06-30 16:23:49 +0200 |
---|---|---|
committer | pdp8 <pdp8@pdp8.info> | 2023-06-30 16:23:49 +0200 |
commit | 6b22983ad4fdc5d868755a05c305562f618b9603 (patch) | |
tree | 75fd1cdc8c37075bfba53e5055fcb3e321a55014 /server.rb | |
parent | 9d95a49ecd7e2f3e49b3462a281f2b86b406cf41 (diff) |
rubocop formatting for server.rb
Diffstat (limited to 'server.rb')
-rw-r--r-- | server.rb | 117 |
1 files changed, 59 insertions, 58 deletions
@@ -1,51 +1,56 @@ +# frozen_string_literal: true + before '/inbox' do request.body.rewind # in case someone already read it @body = request.body.read @activity = JSON.parse @body @object = @activity['object'] - @object = fetch(@object) if @object.is_a? String and @object.match(/^http/) + @object = fetch(@object) if @object.is_a?(String) && @object.match(/^http/) end # client-server post '/outbox' do protected! - #send_signed @activity + # send_signed @activity end # server-server -post "/inbox" do +post '/inbox' do verify! type = @activity['type'].downcase.to_sym - respond_to?(type) ? send(type) : p("Unknown activity: #{type}") + respond_to?(type) ? send(type) : p("Unknown activity: #{type}") end # public -get "/.well-known/webfinger" do - request["resource"] == "acct:#{ACCOUNT}" ? send_file("./public/webfinger", :type => "application/jrd+json") : halt(404) +get '/.well-known/webfinger' do + if request['resource'] == "acct:#{ACCOUNT}" + send_file('./public/webfinger', + type: 'application/jrd+json') + else + halt(404) + end end -["/outbox","/following","/followers"].each do |path| - get path do - ordered_collection(File.join(PUBLIC_DIR,path)).to_json +['/outbox', '/following', '/followers'].each do |path| + get path do + ordered_collection(File.join(PUBLIC_DIR, path)).to_json end end get '/tags/:tag' do |tag| - ordered_collection(File.join(TAGS,tag)).to_json + ordered_collection(File.join(TAGS, tag)).to_json end helpers do - # https://github.com/mastodon/mastodon/blob/main/app/controllers/concerns/signature_verification.rb def verify! - # verify digest - sha256 = OpenSSL::Digest::SHA256.new - digest = "SHA-256=" + sha256.base64digest(@body) - halt 403 unless digest == request.env["HTTP_DIGEST"] + sha256 = OpenSSL::Digest.new('SHA256') + digest = "SHA-256=#{sha256.base64digest(@body)}" + halt 403 unless digest == request.env['HTTP_DIGEST'] signature_params = {} - request.env["HTTP_SIGNATURE"].split(',').each do |pair| + request.env['HTTP_SIGNATURE'].split(',').each do |pair| k, v = pair.split('=') signature_params[k] = v.gsub('"', '') end @@ -55,9 +60,7 @@ helpers do signature = Base64.decode64(signature_params['signature']) actor = fetch key_id - if not actor and @activity["type"] == "Delete" # deleted users do not return actors - halt 200 - end + halt 200 if !actor && (@activity['type'] == 'Delete') # deleted users do not return actors halt 403 unless actor key = OpenSSL::PKey::RSA.new(actor['publicKey']['publicKeyPem']) @@ -66,9 +69,9 @@ helpers do if signed_params_name == '(request-target)' '(request-target): post /inbox' elsif signed_params_name == 'content-type' - "#{signed_params_name}: #{request.env["CONTENT_TYPE"]}" + "#{signed_params_name}: #{request.env['CONTENT_TYPE']}" else - "#{signed_params_name}: #{request.env["HTTP_" + signed_params_name.upcase]}" + "#{signed_params_name}: #{request.env["HTTP_#{signed_params_name.upcase}"]}" end end.join("\n") @@ -76,17 +79,17 @@ helpers do end def create - unless object_exists? - File.open(object_file, "w+") { |f| f.puts @object.to_json } - if @object and @object['inReplyTo'] - @object = fetch @object['inReplyTo'] - create if @object - end - end + return if object_exists? + + File.open(object_file, 'w+') { |f| f.puts @object.to_json } + return unless @object && @object['inReplyTo'] + + @object = fetch @object['inReplyTo'] + create if @object end - def delete - Dir["inbox/*/*.json"].each do |file| + def delete + Dir['inbox/*/*.json'].each do |file| FileUtils.rm file if JSON.parse(File.read(file))['id'] == @object['id'] end end @@ -101,45 +104,44 @@ helpers do end def accept - if @object['type'] == 'Follow' - File.open(File.join(FOLLOWING, mention(@object['object'])+'.json'),'w+'){|f| f.puts @object.to_json} - end + return unless @object['type'] == 'Follow' + + File.open(File.join(FOLLOWING, "#{mention(@object['object'])}.json"), 'w+') { |f| f.puts @object.to_json } end def undo - if @object['type'] == 'Follow' - Dir[File.join(FOLLOWERS, '*.json')].each do |follower| - FileUtils.rm follower if JSON.parse(File.read(follower))["actor"] == @object["actor"] - end + return unless @object['type'] == 'Follow' + + Dir[File.join(FOLLOWERS, '*.json')].each do |follower| + FileUtils.rm follower if JSON.parse(File.read(follower))['actor'] == @object['actor'] end end def follow - File.open(File.join(FOLLOWERS, mention(@activity['actor']) + '.json'), 'w+') { |f| f.puts @body } + File.open(File.join(FOLLOWERS, "#{mention(@activity['actor'])}.json"), 'w+') { |f| f.puts @body } accept = { '@context' => 'https://www.w3.org/ns/activitystreams', - 'id' => File.join(SOCIAL_URL + '#accepts', SecureRandom.uuid), + 'id' => File.join("#{SOCIAL_URL}#accepts", SecureRandom.uuid), 'type' => 'Accept', 'actor' => ACTOR, 'object' => @activity, - 'to' => [ @activity['actor'] ] - } - send_signed accept#, @activity['actor'] + 'to' => [@activity['actor']] } + send_signed accept # , @activity['actor'] end - #when "Move" - #when "Add" - #when "Remove" - #when "Like" - #when "Block" + # when "Move" + # when "Add" + # when "Remove" + # when "Like" + # when "Block" def inbox - Dir[File.join(INBOX,'*','*.json')].collect do |file| + Dir[File.join(INBOX, '*', '*.json')].collect do |file| JSON.parse(File.read(file)) - end.sort_by { |o| o["published"] } + end.sort_by { |o| o['published'] } end def object_exists? - not inbox.select{|o| o['id'] == @object['id']}.empty? + !inbox.select { |o| o['id'] == @object['id'] }.empty? end def object_file @@ -148,15 +150,14 @@ helpers do File.join dir, "#{Time.now.strftime('%Y-%m-%dT%H:%M:%S.%N')}.json" end - def ordered_collection dir - posts = Dir[File.join(dir, "*.json")].collect { |f| JSON.parse(File.read f) }.sort_by { |o| o["published"] } + def ordered_collection(dir) + posts = Dir[File.join(dir, '*.json')].collect { |f| JSON.parse(File.read(f)) }.sort_by { |o| o['published'] } { - "@context" => "https://www.w3.org/ns/activitystreams", - "summary" => "#{USER} #{dir}", - "type" => "OrderedCollection", - "totalItems" => posts.size, - "orderedItems" => posts, + '@context' => 'https://www.w3.org/ns/activitystreams', + 'summary' => "#{USER} #{dir}", + 'type' => 'OrderedCollection', + 'totalItems' => posts.size, + 'orderedItems' => posts } end - end |