Skip to content
Snippets Groups Projects
Commit 2bc48e90 authored by Eugen Rochko's avatar Eugen Rochko
Browse files

Individual atom entries

parent 1dad72bf
No related branches found
No related tags found
No related merge requests found
......@@ -5,6 +5,10 @@ class AtomController < ApplicationController
@account = Account.find_by!(id: params[:id], domain: nil)
end
def entry
@entry = StreamEntry.find(params[:id])
end
private
def set_format
......
......@@ -37,6 +37,14 @@ class Account < ActiveRecord::Base
:person
end
def title
self.username
end
def summary
self.note
end
def subscribed?
!(self.secret.blank? || self.verify_token.blank?)
end
......
......@@ -3,7 +3,7 @@ class ProcessInteractionService
body = salmon.unpack(envelope)
xml = Nokogiri::XML(body)
return if xml.at_xpath('//author/name').nil? || xml.at_xpath('//author/uri').nil?
return if !involves_target_account(xml, target_account) || xml.at_xpath('//author/name').nil? || xml.at_xpath('//author/uri').nil?
username = xml.at_xpath('//author/name').content
url = xml.at_xpath('//author/uri').content
......@@ -28,6 +28,9 @@ class ProcessInteractionService
private
def involves_target_account(target_account)
end
def salmon
OStatus2::Salmon.new
end
......
Nokogiri::XML::Builder.new do |xml|
xml.entry(xmlns: 'http://www.w3.org/2005/Atom', 'xmlns:thr': 'http://purl.org/syndication/thread/1.0', 'xmlns:activity': 'http://activitystrea.ms/spec/1.0/', 'xmlns:poco': 'http://portablecontacts.net/spec/1.0') do
xml.id_ unique_tag(@entry.created_at, @entry.activity_id, @entry.activity_type)
xml.published @entry.activity.created_at.iso8601
xml.updated @entry.activity.updated_at.iso8601
xml.title @entry.title
xml.content({ type: 'html' }, @entry.content)
xml['activity'].send('verb', "http://activitystrea.ms/schema/1.0/#{@entry.verb}")
xml.author do
xml['activity'].send('object-type', 'http://activitystrea.ms/schema/1.0/person')
xml.uri profile_url(name: @entry.account.username)
xml.name @entry.account.username
xml.summary @entry.account.note
xml.link(rel: 'alternate', type: 'text/html', href: profile_url(name: @entry.account.username))
xml['poco'].preferredUsername @entry.account.username
xml['poco'].displayName @entry.account.display_name
xml['poco'].note @entry.account.note
end
if @entry.targeted?
xml['activity'].send('object') do
xml['activity'].send('object-type', "http://activitystrea.ms/schema/1.0/#{@entry.target.object_type}")
xml.id_ @entry.target.uri
xml.title @entry.target.title
xml.summary @entry.target.summary
xml.link(rel: 'alternate', type: 'text/html', href: @entry.target.uri)
end
else
xml['activity'].send('object-type', "http://activitystrea.ms/schema/1.0/#{@entry.object_type}")
end
xml.link(rel: 'self', type: 'application/atom+xml', href: atom_entry_url(id: @entry.id))
end
end.to_xml
Nokogiri::XML::Builder.new do |xml|
xml.feed(xmlns: 'http://www.w3.org/2005/Atom', 'xmlns:thr': 'http://purl.org/syndication/thread/1.0', 'xmlns:activity': 'http://activitystrea.ms/spec/1.0/') do
xml.feed(xmlns: 'http://www.w3.org/2005/Atom', 'xmlns:thr': 'http://purl.org/syndication/thread/1.0', 'xmlns:activity': 'http://activitystrea.ms/spec/1.0/', 'xmlns:poco': 'http://portablecontacts.net/spec/1.0') do
xml.id_ atom_user_stream_url(id: @account.id)
xml.title @account.display_name
xml.subtitle @account.note
......@@ -12,6 +12,10 @@ Nokogiri::XML::Builder.new do |xml|
xml.summary @account.note
xml.link(rel: 'alternate', type: 'text/html', href: profile_url(name: @account.username))
xml['poco'].preferredUsername @account.username
xml['poco'].displayName @account.display_name
xml['poco'].note @account.note
end
xml.link(rel: 'alternate', type: 'text/html', href: profile_url(name: @account.username))
......@@ -19,7 +23,7 @@ Nokogiri::XML::Builder.new do |xml|
xml.link(rel: 'salmon', href: salmon_url(@account))
xml.link(rel: 'self', type: 'application/atom+xml', href: atom_user_stream_url(id: @account.id))
@account.stream_entries.each do |stream_entry|
@account.stream_entries.order('id desc').each do |stream_entry|
xml.entry do
xml.id_ unique_tag(stream_entry.created_at, stream_entry.activity_id, stream_entry.activity_type)
......@@ -34,10 +38,15 @@ Nokogiri::XML::Builder.new do |xml|
xml['activity'].send('object') do
xml['activity'].send('object-type', "http://activitystrea.ms/schema/1.0/#{stream_entry.target.object_type}")
xml.id_ stream_entry.target.uri
xml.title stream_entry.target.title
xml.summary stream_entry.target.summary
xml.link(rel: 'alternate', type: 'text/html', href: stream_entry.target.uri)
end
else
xml['activity'].send('object-type', "http://activitystrea.ms/schema/1.0/#{stream_entry.object_type}")
end
xml.link(rel: 'self', type: 'application/atom+xml', href: atom_entry_url(id: stream_entry.id))
end
end
end
......
......@@ -2,8 +2,9 @@ Rails.application.routes.draw do
get '.well-known/host-meta', to: 'xrd#host_meta', as: :host_meta
get '.well-known/webfinger', to: 'xrd#webfinger', as: :webfinger
get 'atom/:id', to: 'atom#user_stream', as: :atom_user_stream
get 'user/:name', to: 'profile#show', as: :profile
get 'atom/entry/:id', to: 'atom#entry', as: :atom_entry
get 'atom/user/:id', to: 'atom#user_stream', as: :atom_user_stream
get 'user/:name', to: 'profile#show', as: :profile
mount Mastodon::API => '/api/'
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment