Add shareable wrapstodon links (#37047)

This commit is contained in:
Claire
2025-12-03 12:00:41 +01:00
committed by GitHub
parent 954f397743
commit 5d84957117
9 changed files with 54 additions and 5 deletions

View File

@@ -0,0 +1,23 @@
# frozen_string_literal: true
class WrapstodonController < ApplicationController
include WebAppControllerConcern
include Authorization
include AccountOwnedConcern
vary_by 'Accept, Accept-Language, Cookie'
before_action :set_generated_annual_report
skip_before_action :require_functional!, only: :show, unless: :limited_federation_mode?
def show
expires_in 10.seconds, public: true if current_account.nil?
end
private
def set_generated_annual_report
@generated_annual_report = GeneratedAnnualReport.find_by!(account: @account, year: params[:year], share_key: params[:share_key])
end
end

View File

@@ -43,7 +43,8 @@ class AnnualReport
account: @account,
year: @year,
schema_version: SCHEMA,
data: data
data: data,
share_key: SecureRandom.hex(8)
)
end

View File

@@ -5,13 +5,14 @@
# Table name: generated_annual_reports
#
# id :bigint(8) not null, primary key
# account_id :bigint(8) not null
# year :integer not null
# data :jsonb not null
# schema_version :integer not null
# share_key :string
# viewed_at :datetime
# year :integer not null
# created_at :datetime not null
# updated_at :datetime not null
# account_id :bigint(8) not null
#
class GeneratedAnnualReport < ApplicationRecord

View File

@@ -1,5 +1,9 @@
# frozen_string_literal: true
class REST::AnnualReportSerializer < ActiveModel::Serializer
attributes :year, :data, :schema_version
attributes :year, :data, :schema_version, :share_url
def share_url
public_wrapstodon_url(object.account, object.year, object.share_key) if object.share_key.present?
end
end

View File

@@ -0,0 +1,9 @@
- content_for :page_title, t('wrapstodon.title', name: display_name(@account), year: @generated_annual_report.year)
- content_for :header_tags do
%meta{ name: 'robots', content: 'noindex, noarchive' }/
= opengraph 'og:site_name', site_title
= opengraph 'profile:username', acct(@account)[1..]
= render 'shared/web_app'

View File

@@ -2186,3 +2186,5 @@ en:
not_supported: This browser doesn't support security keys
otp_required: To use security keys please enable two-factor authentication first.
registered_on: Registered on %{date}
wrapstodon:
title: Wrapstodon %{year} for %{name}

View File

@@ -163,6 +163,7 @@ Rails.application.routes.draw do
get '/@:account_username/followers', to: 'follower_accounts#index'
get '/@:account_username/:id', to: 'statuses#show', as: :short_account_status
get '/@:account_username/:id/embed', to: 'statuses#embed', as: :embed_short_account_status
get '/@:account_username/wrapstodon/:year/:share_key', to: 'wrapstodon#show', as: :public_wrapstodon
end
get '/@:username_with_domain/(*any)', to: 'home#index', constraints: { username_with_domain: %r{([^/])+?} }, as: :account_with_domain, format: false

View File

@@ -0,0 +1,7 @@
# frozen_string_literal: true
class AddShareKeyToGeneratedAnnualReports < ActiveRecord::Migration[8.0]
def change
add_column :generated_annual_reports, :share_key, :string
end
end

View File

@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[8.0].define(version: 2025_12_01_155054) do
ActiveRecord::Schema[8.0].define(version: 2025_12_02_140424) do
# These are extensions that must be enabled in order to support this database
enable_extension "pg_catalog.plpgsql"
@@ -616,6 +616,7 @@ ActiveRecord::Schema[8.0].define(version: 2025_12_01_155054) do
t.datetime "viewed_at"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "share_key"
t.index ["account_id", "year"], name: "index_generated_annual_reports_on_account_id_and_year", unique: true
end