app
assets
channels
controllers
admin
api
auth
concerns
oauth
settings
about_controller.rb
accounts_controller.rb
api_controller.rb
application_controller.rb
authorize_follow_controller.rb
home_controller.rb
media_controller.rb
remote_follow_controller.rb
stream_entries_controller.rb
tags_controller.rb
xrd_controller.rb
helpers
lib
mailers
models
services
views
workers
bin
config
db
lib
log
public
spec
storybook
vendor
.babelrc
.codeclimate.yml
.dockerignore
.env.production.sample
.env.test
.eslintrc
.gitignore
.nvmrc
.rspec
.rubocop.yml
.ruby-version
.travis.yml
Dockerfile
Gemfile
Gemfile.lock
LICENSE
README.md
Rakefile
Vagrantfile
config.ru
docker-compose.yml
package.json
yarn.lock
Filters out hidden stream entries from Atom feed Blocks now generate hidden stream entries, can be used to federate blocks Private statuses cannot be reblogged (generates generic 422 error for now) POST /api/v1/statuses now takes visibility=(public|unlisted|private) param instead of unlisted boolean Statuses JSON now contains visibility=(public|unlisted|private) field
60 lines
1.8 KiB
Ruby
60 lines
1.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class AccountsController < ApplicationController
|
|
layout 'public'
|
|
|
|
before_action :set_account
|
|
before_action :set_link_headers
|
|
before_action :authenticate_user!, only: [:follow, :unfollow]
|
|
before_action :check_account_suspension
|
|
|
|
def show
|
|
respond_to do |format|
|
|
format.html do
|
|
@statuses = @account.statuses.permitted_for(@account, current_account).order('id desc').paginate_by_max_id(20, params[:max_id], params[:since_id])
|
|
@statuses = cache_collection(@statuses, Status)
|
|
end
|
|
|
|
format.atom do
|
|
@entries = @account.stream_entries.order('id desc').where(hidden: false).with_includes.paginate_by_max_id(20, params[:max_id], params[:since_id])
|
|
end
|
|
end
|
|
end
|
|
|
|
def follow
|
|
FollowService.new.call(current_user.account, @account.acct)
|
|
redirect_to account_path(@account)
|
|
end
|
|
|
|
def unfollow
|
|
UnfollowService.new.call(current_user.account, @account)
|
|
redirect_to account_path(@account)
|
|
end
|
|
|
|
def followers
|
|
@followers = @account.followers.order('follows.created_at desc').paginate(page: params[:page], per_page: 12)
|
|
end
|
|
|
|
def following
|
|
@following = @account.following.order('follows.created_at desc').paginate(page: params[:page], per_page: 12)
|
|
end
|
|
|
|
private
|
|
|
|
def set_account
|
|
@account = Account.find_local!(params[:username])
|
|
end
|
|
|
|
def set_link_headers
|
|
response.headers['Link'] = LinkHeader.new([[webfinger_account_url, [%w(rel lrdd), %w(type application/xrd+xml)]], [account_url(@account, format: 'atom'), [%w(rel alternate), %w(type application/atom+xml)]]])
|
|
end
|
|
|
|
def webfinger_account_url
|
|
webfinger_url(resource: "acct:#{@account.acct}@#{Rails.configuration.x.local_domain}")
|
|
end
|
|
|
|
def check_account_suspension
|
|
head 410 if @account.suspended?
|
|
end
|
|
end
|