From 6f108c43eede76a767517283f60750a049035d8b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Apr 2023 06:00:53 +0000 Subject: [PATCH 01/25] Bump nokogiri from 1.13.10 to 1.14.3 Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.13.10 to 1.14.3. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.13.10...v1.14.3) --- updated-dependencies: - dependency-name: nokogiri dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 539127bf..8bcc6a4b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -187,7 +187,7 @@ GEM net-protocol netrc (0.11.0) nio4r (2.5.8) - nokogiri (1.13.10-x86_64-linux) + nokogiri (1.14.3-x86_64-linux) racc (~> 1.4) ox (2.14.11) paypal-recurring (1.1.0) From acf54a0eb539e748cd629f97d5b90a0714610218 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Apr 2023 20:28:37 +0000 Subject: [PATCH 02/25] Bump sidekiq from 5.2.10 to 7.0.8 Bumps [sidekiq](https://github.com/sidekiq/sidekiq) from 5.2.10 to 7.0.8. - [Release notes](https://github.com/sidekiq/sidekiq/releases) - [Changelog](https://github.com/sidekiq/sidekiq/blob/main/Changes.md) - [Commits](https://github.com/sidekiq/sidekiq/compare/v5.2.10...v7.0.8) --- updated-dependencies: - dependency-name: sidekiq dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Gemfile | 2 +- Gemfile.lock | 16 +++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Gemfile b/Gemfile index 3f23fef6..99544a19 100644 --- a/Gemfile +++ b/Gemfile @@ -8,7 +8,7 @@ gem 'bcrypt' gem 'sinatra-flash', require: 'sinatra/flash' gem 'sinatra-xsendfile', require: 'sinatra/xsendfile' gem 'puma', '5.6.5', require: nil -gem 'sidekiq', '~> 5.2.0' +gem 'sidekiq', '~> 7.0.8' gem 'mail' gem 'net-smtp' gem 'tilt' diff --git a/Gemfile.lock b/Gemfile.lock index 539127bf..c2737a05 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -49,7 +49,7 @@ GEM climate_control (0.2.0) coderay (1.1.3) concurrent-ruby (1.2.2) - connection_pool (2.3.0) + connection_pool (2.4.0) coveralls_reborn (0.25.0) simplecov (>= 0.18.1, < 0.22.0) term-ansicolor (~> 1.6) @@ -215,6 +215,8 @@ GEM rb-inotify (0.10.1) ffi (~> 1.0) redis (4.5.1) + redis-client (0.14.1) + connection_pool redis-namespace (1.9.0) redis (>= 4) regexp_parser (2.6.0) @@ -245,11 +247,11 @@ GEM sequel (>= 4.38.0) shotgun (0.9.2) rack (>= 1.0) - sidekiq (5.2.10) - connection_pool (~> 2.2, >= 2.2.2) - rack (~> 2.0) - rack-protection (>= 1.5.0) - redis (~> 4.5, < 4.6.0) + sidekiq (7.0.8) + concurrent-ruby (< 2) + connection_pool (>= 2.3.0) + rack (>= 2.2.4) + redis-client (>= 0.11.0) simplecov (0.21.2) docile (~> 1.1) simplecov-html (~> 0.11) @@ -370,7 +372,7 @@ DEPENDENCIES sequel sequel_pg shotgun - sidekiq (~> 5.2.0) + sidekiq (~> 7.0.8) simplecov simpleidn sinatra From 5a77fcb519467aeb379fddc4a7ddcd7af4a752d6 Mon Sep 17 00:00:00 2001 From: Kyle Drake Date: Fri, 28 Apr 2023 10:19:57 -0500 Subject: [PATCH 03/25] switch to ajax call to disable mystery caching that's popped up for some reason --- views/site_files/text_editor.erb | 67 +++++++++++++++++--------------- 1 file changed, 36 insertions(+), 31 deletions(-) diff --git a/views/site_files/text_editor.erb b/views/site_files/text_editor.erb index 9a5f7a79..f60a22af 100644 --- a/views/site_files/text_editor.erb +++ b/views/site_files/text_editor.erb @@ -163,42 +163,47 @@ var editor = {} + $(document).ready(function() { - $.get("/site_files/download/<%= Addressable::URI.parse(@filename).normalized_path.to_s %>", function(resp) { - editor = ace.edit("editor") - setTheme() - <% if @ace_mode %> - editor.getSession().setMode("ace/mode/<%= @ace_mode %>") - <% end %> - editor.getSession().setTabSize(2) - editor.getSession().setUseWrapMode(true) - editor.setFontSize(14) - editor.setShowPrintMargin(false) - editor.setOptions({ - maxLines: Infinity, - autoScrollEditorIntoView: true - }) + $.ajax({ + url: "/site_files/download/<%= Addressable::URI.parse(@filename).normalized_path.to_s %>", + cache: false, + success: function(resp) { + editor = ace.edit("editor") + setTheme() + <% if @ace_mode %> + editor.getSession().setMode("ace/mode/<%= @ace_mode %>") + <% end %> + editor.getSession().setTabSize(2) + editor.getSession().setUseWrapMode(true) + editor.setFontSize(14) + editor.setShowPrintMargin(false) + editor.setOptions({ + maxLines: Infinity, + autoScrollEditorIntoView: true + }) - // Disable autocomplete - editor.setBehavioursEnabled(false) + // Disable autocomplete + editor.setBehavioursEnabled(false) - editor.setValue(resp, -1) - editor.getSession().setUndoManager(new ace.UndoManager()) + editor.setValue(resp, -1) + editor.getSession().setUndoManager(new ace.UndoManager()) - editor.on('change', function(obj) { - $('a#saveButton,a#saveAndExitButton').css('opacity', 1) - unsavedChanges = true - }) + editor.on('change', function(obj) { + $('a#saveButton,a#saveAndExitButton').css('opacity', 1) + unsavedChanges = true + }) - editor.commands.addCommand({ - name: 'saveCommand', - bindKey: {win: 'Ctrl-S', mac: 'Command-S'}, - exec: function(editor) { - saveTextFile(false) - } - }) - }) - }) + editor.commands.addCommand({ + name: 'saveCommand', + bindKey: {win: 'Ctrl-S', mac: 'Command-S'}, + exec: function(editor) { + saveTextFile(false) + } + }) + } + }); + }); window.onbeforeunload = function() { if(unsavedChanges == true) From 454e4162ce874278926c2fcc0e4804cb2a1d3734 Mon Sep 17 00:00:00 2001 From: Kyle Drake Date: Fri, 28 Apr 2023 15:21:43 +0000 Subject: [PATCH 04/25] near lossless for screenshots --- workers/screenshot_worker.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workers/screenshot_worker.rb b/workers/screenshot_worker.rb index 84f2d682..af79a672 100644 --- a/workers/screenshot_worker.rb +++ b/workers/screenshot_worker.rb @@ -59,7 +59,7 @@ class ScreenshotWorker full_screenshot_path = File.join(user_screenshots_path, "#{path_for_screenshot}.#{res}.webp") - opts = {quality: 90, resize_w: width, resize_h: height} + opts = {resize_w: width, resize_h: height, near_lossless: 0} if width == height opts.merge! crop_x: 160, crop_y: 0, crop_w: 960, crop_h: 960 From 788755366699887a18926cc4ae19a2030b356c5a Mon Sep 17 00:00:00 2001 From: Andrew Shu Date: Sun, 30 Apr 2023 08:02:38 -0700 Subject: [PATCH 05/25] Fix dependencies installation on Vagrant --- vagrant/webapp.sh | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/vagrant/webapp.sh b/vagrant/webapp.sh index f0fb1228..fbddae89 100644 --- a/vagrant/webapp.sh +++ b/vagrant/webapp.sh @@ -4,7 +4,28 @@ DEBIAN_FRONTEND=noninteractive . /vagrant/vagrant/redis.sh -apt-get install -y git curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev libffi-dev libpq-dev libmagickwand-dev imagemagick libmagickwand-dev libmagic-dev file clamav-daemon +apt-get install -y \ + build-essential \ + clamav-daemon \ + curl \ + file \ + git \ + imagemagick \ + libcurl4-openssl-dev \ + libffi-dev \ + libimlib2-dev \ + libmagic-dev \ + libmagickwand-dev \ + libpq-dev \ + libreadline-dev \ + libsqlite3-dev \ + libssl-dev \ + libwebp-dev \ + libxml2-dev \ + libxslt1-dev \ + libyaml-dev \ + sqlite3 \ + zlib1g-dev sed -i 's|[#]*DetectPUA false|DetectPUA true|g' /etc/clamav/clamd.conf From beafd2daf8d9ea4aae93bbc3e8dae9d614971e8e Mon Sep 17 00:00:00 2001 From: Andrew Shu Date: Sun, 30 Apr 2023 11:25:29 -0700 Subject: [PATCH 06/25] Fix validating education class tag whitelist --- app/create.rb | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/app/create.rb b/app/create.rb index 101633bd..3506d43c 100644 --- a/app/create.rb +++ b/app/create.rb @@ -1,7 +1,12 @@ CREATE_MATCH_REGEX = /^username$|^password$|^email$|^new_tags_string$|^is_education$/ +def education_whitelist_required? + return true if params[:is_education] == 'true' && $config['education_tag_whitelist'] + false +end + def education_whitelisted? - return true if params[:is_education] == 'true' && $config['education_tag_whitelist'] && !$config['education_tag_whitelist'].select {|t| params[:new_tags_string].match(t)}.empty? + return true if education_whitelist_required? && !$config['education_tag_whitelist'].select {|t| params[:new_tags_string].match(t)}.empty? false end @@ -63,8 +68,13 @@ post '/create' do ga_adgroupid: session[:ga_adgroupid] ) - if education_whitelisted? - @site.email_confirmed = true + if education_whitelist_required? + if education_whitelisted? + @site.email_confirmed = true + else + flash[:error] = 'The class tag is invalid.' + return {result: 'error'}.to_json + end else if !hcaptcha_valid? flash[:error] = 'The captcha was not valid, please try again.' From 243eda9321a689337048f90c9e897dccdc03649f Mon Sep 17 00:00:00 2001 From: Kyle Drake Date: Sun, 30 Apr 2023 17:33:47 -0500 Subject: [PATCH 07/25] add resolveHandle to whitelist --- models/site.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/models/site.rb b/models/site.rb index 9e3927c3..886b43ed 100644 --- a/models/site.rb +++ b/models/site.rb @@ -43,11 +43,11 @@ class Site < Sequel::Model } VALID_EXTENSIONS = %w{ - html htm txt text css js jpg jpeg png gif svg md markdown eot ttf woff woff2 json geojson csv tsv mf ico pdf asc key pgp xml mid midi manifest otf webapp less sass rss kml dae obj mtl scss webp xcf epub gltf bin webmanifest knowl atom opml rdf map gpg + html htm txt text css js jpg jpeg png gif svg md markdown eot ttf woff woff2 json geojson csv tsv mf ico pdf asc key pgp xml mid midi manifest otf webapp less sass rss kml dae obj mtl scss webp xcf epub gltf bin webmanifest knowl atom opml rdf map gpg resolveHandle } VALID_EDITABLE_EXTENSIONS = %w{ - html htm txt js css scss md manifest less webmanifest xml json opml rdf svg gpg pgp + html htm txt js css scss md manifest less webmanifest xml json opml rdf svg gpg pgp resolveHandle } MINIMUM_PASSWORD_LENGTH = 5 From e901f599c2a860ca58547d42525f148921cf9c8d Mon Sep 17 00:00:00 2001 From: Andrew Shu Date: Sun, 30 Apr 2023 14:16:44 -0700 Subject: [PATCH 08/25] Fix suggestions test being off by one sometimes Delete the leftover Site model in an unrelated test to fix the race condition --- tests/acceptance/site_tests.rb | 47 ++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/tests/acceptance/site_tests.rb b/tests/acceptance/site_tests.rb index 1656ddb4..5ab20e76 100644 --- a/tests/acceptance/site_tests.rb +++ b/tests/acceptance/site_tests.rb @@ -64,36 +64,45 @@ describe 'site page' do end - it 'allows site blocking and unblocking' do - tag = SecureRandom.hex 10 - blocked_site = Fabricate :site, new_tags_string: tag, created_at: 2.weeks.ago, site_changed: true, views: Site::BROWSE_MINIMUM_FOLLOWER_VIEWS+1 - site = Fabricate :site + describe 'blocking' do + before do + @tag = SecureRandom.hex 10 + @blocked_site = Fabricate :site, new_tags_string: @tag, created_at: 2.weeks.ago, site_changed: true, views: Site::BROWSE_MINIMUM_FOLLOWER_VIEWS+1 + end - page.set_rack_session id: site.id + after do + @blocked_site.destroy + end - visit "/browse?tag=#{tag}" + it 'allows site blocking and unblocking' do + site = Fabricate :site - _(page.find('.website-Gallery .username a')['href']).must_match /\/site\/#{blocked_site.username}/ + page.set_rack_session id: site.id - visit "/site/#{blocked_site.username}" + visit "/browse?tag=#{@tag}" - click_link 'Block' - click_button 'Block Site' + _(page.find('.website-Gallery .username a')['href']).must_match /\/site\/#{@blocked_site.username}/ - visit "/browse?tag=#{tag}" + visit "/site/#{@blocked_site.username}" - _(page).must_have_content /no active sites found/i + click_link 'Block' + click_button 'Block Site' - site.reload - _(site.blockings.length).must_equal 1 - _(site.blockings.first.site_id).must_equal blocked_site.id + visit "/browse?tag=#{@tag}" - visit "/site/#{blocked_site.username}" + _(page).must_have_content /no active sites found/i - click_link 'Unblock' + site.reload + _(site.blockings.length).must_equal 1 + _(site.blockings.first.site_id).must_equal @blocked_site.id - visit "/browse?tag=#{tag}" - _(page.find('.website-Gallery .username a')['href']).must_match /\/site\/#{blocked_site.username}/ + visit "/site/#{@blocked_site.username}" + + click_link 'Unblock' + + visit "/browse?tag=#{@tag}" + _(page.find('.website-Gallery .username a')['href']).must_match /\/site\/#{@blocked_site.username}/ + end end it '404s if site is banned' do From 6a045685d0cf37bec3bbe31b2c10c0d85fe1596c Mon Sep 17 00:00:00 2001 From: Kyle Drake Date: Mon, 1 May 2023 16:17:50 -0500 Subject: [PATCH 09/25] bluesky did/handle integration --- app/settings.rb | 21 +++++++++++++++++++++ views/settings/site.erb | 12 ++++++++++-- views/settings/site/bluesky.erb | 24 ++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 views/settings/site/bluesky.erb diff --git a/app/settings.rb b/app/settings.rb index 27b8b6cd..a92c9358 100644 --- a/app/settings.rb +++ b/app/settings.rb @@ -20,6 +20,9 @@ get '/settings/:username/?' do |username| pass if Site.select(:id).where(username: username).first.nil? require_login require_ownership_for_settings + + @bluesky_did = $redis_proxy.hget "dns-_atproto.#{@site.username}.neocities.org", 'TXT' + @title = "Site settings for #{username}" erb :'settings/site' end @@ -174,6 +177,24 @@ post '/settings/:username/custom_domain' do end end +post '/settings/:username/bluesky_set_did' do + require_login + require_ownership_for_settings + redirect '/settings' if !@site.domain.empty? + + # todo standards based validation + if params[:did].length > 50 + flash[:error] = 'DID provided was too long' + elsif !params[:did].match(/^did=did:plc:([a-z|0-9)]+)$/) + flash[:error] = 'DID was invalid' + else + $redis_proxy.hset "dns-_atproto.#{@site.username}.neocities.org", 'TXT', params[:did] + flash[:success] = 'DID set! You can now verify the domain on the Bluesky app.' + end + + redirect "/settings/#{@site.username}#bluesky" +end + post '/settings/:username/generate_api_key' do require_login require_ownership_for_settings diff --git a/views/settings/site.erb b/views/settings/site.erb index bf34f3ae..09b732d9 100644 --- a/views/settings/site.erb +++ b/views/settings/site.erb @@ -26,15 +26,19 @@
  • Profile
  • Custom Domain
  • -
  • Change Site Name
  • +
  • Rename
  • Tipping
  • -
  • API Key
  • +
  • API
  • <% if @site.admin_nsfw != true %>
  • 18+
  • <% end %> + <% if @site.domain.empty? %> +
  • Bluesky
  • + <% end %> +
  • Delete
  • @@ -64,6 +68,10 @@
    <% end %> +
    + <%== erb :'settings/site/bluesky' %> +
    +
    <%== erb :'settings/site/delete' %>
    diff --git a/views/settings/site/bluesky.erb b/views/settings/site/bluesky.erb new file mode 100644 index 00000000..f066b39b --- /dev/null +++ b/views/settings/site/bluesky.erb @@ -0,0 +1,24 @@ +

    Bluesky Integration (beta)

    + +

    + You can now verify control of your site on Neocities to create a handle on Bluesky. +

    + +

    + Bluesky App "Settings" "Change my handle" "I have my own domain" +

    + +

    + Domain: @<%= @site.username %>.neocities.org +

    + +

    +TXT value: +

    + +
    + <%== csrf_token_input_html %> + +
    + +
    \ No newline at end of file From 10f40c8f5ced3d07c9332762d4683467baf7eabb Mon Sep 17 00:00:00 2001 From: Kyle Drake Date: Fri, 5 May 2023 16:25:02 -0500 Subject: [PATCH 10/25] disable showing follows for now, getting incredibly spammy. will add feature to highlight follows soon --- models/event.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/models/event.rb b/models/event.rb index cdb25fd2..e012d6a9 100644 --- a/models/event.rb +++ b/models/event.rb @@ -35,6 +35,7 @@ class Event < Sequel::Model ds = select_all(:events). order(:created_at.desc). join_table(:inner, :sites, id: :site_id). + where(follow_id: nil) exclude(Sequel.qualify(:sites, :is_deleted) => true). exclude(Sequel.qualify(:events, :is_deleted) => true). exclude(is_banned: true) From 8bcd1232065682fbd457655c9fd94338f996c7ef Mon Sep 17 00:00:00 2001 From: Kyle Drake Date: Fri, 5 May 2023 17:26:20 -0500 Subject: [PATCH 11/25] cap number of displayed follows on profiles, add see more link --- models/site.rb | 5 +++-- views/_follows.erb | 19 ++++++++++++------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/models/site.rb b/models/site.rb index 886b43ed..5c9df0f9 100644 --- a/models/site.rb +++ b/models/site.rb @@ -166,6 +166,7 @@ class Site < Sequel::Model MAX_COMMENTS_PER_DAY = 5 SANDBOX_TIME = 14.days BLACK_BOX_WAIT_TIME = 10.seconds + MAX_DISPLAY_FOLLOWS = 56*3 many_to_many :tags @@ -568,8 +569,8 @@ class Site < Sequel::Model follows_dataset.all end - def profile_follows_actioning_ids - follows_dataset.select(:actioning_site_id).exclude(:sites__site_changed => false).all + def profile_follows_actioning_ids(limit=nil) + follows_dataset.select(:actioning_site_id).exclude(:sites__site_changed => false).limit(limit).all end =begin diff --git a/views/_follows.erb b/views/_follows.erb index d9e1a6aa..851257e7 100644 --- a/views/_follows.erb +++ b/views/_follows.erb @@ -1,8 +1,8 @@ -<% site_followings = site.followings %> -<% if (!is_current_site && !site_followings.empty?) || is_current_site %> +<% site_followings = site.followings_dataset.count %> +<% if (!is_current_site && site_followings > 0) || is_current_site %>

    <%= is_current_site ? 'Sites you follow' : 'This site follows' %>

    - <% if site_followings.empty? %> + <% if site_followings == 0 %>

    You are not following any sites yet. Add some by browsing sites or looking at your tags. <% else %> <% site.followings_dataset.select(:site_id).all.each do |following| %> @@ -12,17 +12,22 @@

    <% end %> -<% site_follows = site.follows %> -<% if (!is_current_site && !site_follows.empty?) || is_current_site %> +<% site_follows = site.follows_dataset.count %> +<% if (!is_current_site && site_follows > 0) || is_current_site %>

    Followers

    - <% if site_follows.empty? %> + <% if site_follows == 0 %> No followers yet. <% else %> - <% site.profile_follows_actioning_ids.each do |follow| %> + <% site_profile_follows_actioning_ids = site.profile_follows_actioning_ids %> + <% site_profile_follows_actioning_ids[0...Site::MAX_DISPLAY_FOLLOWS].each do |follow| %> <% follow_actioning_site = follow.actioning_site_dataset.select(:username).first %> <% end %> + + <% if Site::MAX_DISPLAY_FOLLOWS < site_profile_follows_actioning_ids.count %> + see more + <% end %> <% end %>
    <% end %> From e908bab348c1a8c9d850102bbc7f5d9c4cafd706 Mon Sep 17 00:00:00 2001 From: Kyle Drake Date: Sun, 7 May 2023 10:50:37 -0500 Subject: [PATCH 12/25] fix a very stupid events bug where missing period prevented additional filters for deleted, banned, etc --- models/event.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/event.rb b/models/event.rb index e012d6a9..88122284 100644 --- a/models/event.rb +++ b/models/event.rb @@ -35,7 +35,7 @@ class Event < Sequel::Model ds = select_all(:events). order(:created_at.desc). join_table(:inner, :sites, id: :site_id). - where(follow_id: nil) + where(follow_id: nil). exclude(Sequel.qualify(:sites, :is_deleted) => true). exclude(Sequel.qualify(:events, :is_deleted) => true). exclude(is_banned: true) From d1f60254a6960ca527d477fc5391b21f12d8cc1a Mon Sep 17 00:00:00 2001 From: Kyle Drake Date: Thu, 11 May 2023 13:23:22 -0500 Subject: [PATCH 13/25] add new followers from last month to site profiles --- models/site.rb | 4 ++++ views/_news.erb | 19 ++++++++++++++++++- views/site.erb | 4 ++-- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/models/site.rb b/models/site.rb index 5c9df0f9..35714c26 100644 --- a/models/site.rb +++ b/models/site.rb @@ -1448,6 +1448,10 @@ class Site < Sequel::Model paginate(current_page, limit) end + def newest_follows + follows_dataset.where(:follows__created_at => (1.month.ago..Time.now)).all + end + def host !domain.empty? ? domain : "#{username}.neocities.org" end diff --git a/views/_news.erb b/views/_news.erb index 15631481..1f6815ed 100644 --- a/views/_news.erb +++ b/views/_news.erb @@ -10,6 +10,23 @@ +<% follow_events = site.newest_follows %> +<% unless follow_events.empty? %> + +<% end %> + <% events.each do |event| %> <% if event.profile_comment_id %>
    @@ -39,7 +56,7 @@ <% end %> sent a <%= tip.amount_string %> tip to - +site/actioning_site.username <% if current_site && event_site.id == current_site.id %> you! <% else %> diff --git a/views/site.erb b/views/site.erb index b8df7627..bbbd2c35 100644 --- a/views/site.erb +++ b/views/site.erb @@ -74,9 +74,9 @@

    <% end %>
    - <%== erb :'_news', layout: false, locals: {site: @site, events: @latest_events} %> + <%== erb :'_news', layout: false, locals: {site: site, events: @latest_events} %> <% else %> -
    <%== erb :'_news', layout: false, locals: {site: @site, events: @latest_events} %>
    +
    <%== erb :'_news', layout: false, locals: {site: site, events: @latest_events} %>
    <% end %> From 8b8791212c90d7133305a956e74a10072fc011fa Mon Sep 17 00:00:00 2001 From: Kyle Drake Date: Thu, 11 May 2023 13:43:53 -0500 Subject: [PATCH 14/25] newest followers ordered by created date --- models/site.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/site.rb b/models/site.rb index 35714c26..4724a458 100644 --- a/models/site.rb +++ b/models/site.rb @@ -1449,7 +1449,7 @@ class Site < Sequel::Model end def newest_follows - follows_dataset.where(:follows__created_at => (1.month.ago..Time.now)).all + follows_dataset.where(:follows__created_at => (1.month.ago..Time.now)).order(:follows__created_at.desc).all end def host From 10a6e1634f7619fa2d3b8c99631bdf282a98c5e4 Mon Sep 17 00:00:00 2001 From: Kyle Drake Date: Thu, 11 May 2023 15:55:30 -0500 Subject: [PATCH 15/25] fix for api key generation --- app/settings.rb | 6 ++--- tests/acceptance/settings/site_tests.rb | 29 +++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/app/settings.rb b/app/settings.rb index a92c9358..e343582f 100644 --- a/app/settings.rb +++ b/app/settings.rb @@ -198,12 +198,12 @@ end post '/settings/:username/generate_api_key' do require_login require_ownership_for_settings - is_new = current_site.api_key.nil? - current_site.generate_api_key! + is_new = @site.api_key.nil? + @site.generate_api_key! msg = is_new ? "New API key has been generated." : "API key has been regenerated." flash[:success] = msg - redirect "/settings/#{current_site.username}#api_key" + redirect "/settings/#{@site.username}#api_key" end post '/settings/change_password' do diff --git a/tests/acceptance/settings/site_tests.rb b/tests/acceptance/settings/site_tests.rb index 5a9b4c27..387aad27 100644 --- a/tests/acceptance/settings/site_tests.rb +++ b/tests/acceptance/settings/site_tests.rb @@ -145,6 +145,35 @@ describe 'site/settings' do end end +describe 'api key' do + include Capybara::DSL + + before do + Capybara.reset_sessions! + @site = Fabricate :site + @child_site = Fabricate :site, parent_site_id: @site.id + page.set_rack_session id: @site.id + end + + it 'sets api key' do + visit "/settings/#{@child_site[:username]}#api_key" + _(@site.api_key).must_be_nil + _(@child_site.api_key).must_be_nil + click_button 'Generate API Key' + _(@site.reload.api_key).must_be_nil + _(@child_site.reload.api_key).wont_be_nil + _(page.body).must_match @child_site.api_key + end + + it 'regenerates api key for child site' do + visit "/settings/#{@child_site[:username]}#api_key" + @child_site.generate_api_key! + api_key = @child_site.api_key + click_button 'Generate API Key' + _(@child_site.reload.api_key).wont_equal api_key + end +end + describe 'delete' do include Capybara::DSL From 2bd0d8d35b273bb3548117a658340552bbc8c9f2 Mon Sep 17 00:00:00 2001 From: Kyle Drake Date: Sun, 21 May 2023 10:19:03 -0500 Subject: [PATCH 16/25] fix for global activity --- views/_news.erb | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/views/_news.erb b/views/_news.erb index 1f6815ed..fa6900f4 100644 --- a/views/_news.erb +++ b/views/_news.erb @@ -10,21 +10,23 @@ -<% follow_events = site.newest_follows %> -<% unless follow_events.empty? %> -