Merge branch 'next-minor' into develop
This commit is contained in:
commit
4902a35972
26 changed files with 417 additions and 214 deletions
|
|
@ -48,6 +48,9 @@ Although the chat was never enabled per default and was marked as experimental,
|
|||
|
||||
## Bug fixes
|
||||
* Ensure the log folder exists [#8287](https://github.com/diaspora/diaspora/pull/8287)
|
||||
* Limit name length in header [#8313] (https://github.com/diaspora/diaspora/pull/8313)
|
||||
* Fix fallback avatar in hovercards [#8316](https://github.com/diaspora/diaspora/pull/8316)
|
||||
* Use old person private key for export if relayable author migrated away [#8310](https://github.com/diaspora/diaspora/pull/8310)
|
||||
|
||||
## Features
|
||||
* Add tags to tumblr posts [#8244](https://github.com/diaspora/diaspora/pull/8244)
|
||||
|
|
@ -58,6 +61,8 @@ Although the chat was never enabled per default and was marked as experimental,
|
|||
* Add podmin mail address to the footer [#8242](https://github.com/diaspora/diaspora/pull/8242)
|
||||
* Add username to password-reset mail [#8037](https://github.com/diaspora/diaspora/pull/8037)
|
||||
* Resend account migration and deletion for closed recipients [#8309](https://github.com/diaspora/diaspora/pull/8309)
|
||||
* Add sharing status to hovercards [#8317](https://github.com/diaspora/diaspora/pull/8317)
|
||||
* Migrate photo URLs and cleanup old uploaded photos [#8314](https://github.com/diaspora/diaspora/pull/8314)
|
||||
|
||||
# 0.7.15.0
|
||||
|
||||
|
|
|
|||
59
Gemfile
59
Gemfile
|
|
@ -29,8 +29,8 @@ gem "yajl-ruby", "1.4.1"
|
|||
|
||||
gem "devise", "4.8.0"
|
||||
gem "devise_lastseenable", "0.0.6"
|
||||
gem "devise-two-factor", "4.0.0"
|
||||
gem "rqrcode", "2.0.0"
|
||||
gem "devise-two-factor", "4.0.1"
|
||||
gem "rqrcode", "2.1.0"
|
||||
|
||||
# Captcha
|
||||
|
||||
|
|
@ -38,8 +38,8 @@ gem "simple_captcha2", "0.5.0", require: "simple_captcha"
|
|||
|
||||
# Background processing
|
||||
|
||||
gem "redis", "4.3.1"
|
||||
gem "sidekiq", "6.2.1"
|
||||
gem "redis", "4.5.1"
|
||||
gem "sidekiq", "6.2.2"
|
||||
|
||||
# Scheduled processing
|
||||
|
||||
|
|
@ -47,12 +47,12 @@ gem "sidekiq-cron", "1.2.0"
|
|||
|
||||
# Compression
|
||||
|
||||
gem "terser", "1.1.5"
|
||||
gem "terser", "1.1.7"
|
||||
|
||||
# Configuration
|
||||
|
||||
gem "configurate", "0.5.0"
|
||||
gem "toml-rb", "2.0.1"
|
||||
gem "toml-rb", "2.1.0"
|
||||
|
||||
# Cross-origin resource sharing
|
||||
|
||||
|
|
@ -60,7 +60,7 @@ gem "rack-cors", "1.1.1", require: "rack/cors"
|
|||
|
||||
# CSS
|
||||
|
||||
gem "autoprefixer-rails", "10.2.5.1"
|
||||
gem "autoprefixer-rails", "10.3.3.0"
|
||||
gem "bootstrap-sass", "3.4.1"
|
||||
gem "bootstrap-switch-rails", "3.3.3" # 3.3.4 and 3.3.5 is broken, see https://github.com/Bttstrp/bootstrap-switch/issues/691
|
||||
gem "compass-rails", "3.1.0"
|
||||
|
|
@ -81,7 +81,7 @@ gem "activerecord-import", "1.1.0"
|
|||
# File uploading
|
||||
|
||||
gem "carrierwave", "2.2.2"
|
||||
gem "fog-aws", "3.10.0"
|
||||
gem "fog-aws", "3.12.0"
|
||||
gem "mini_magick", "4.11.0"
|
||||
|
||||
# GUID generation
|
||||
|
|
@ -96,7 +96,7 @@ gem "entypo-rails", "3.0.0"
|
|||
gem "handlebars_assets", "0.23.9"
|
||||
gem "jquery-rails", "4.4.0"
|
||||
gem "jquery-ui-rails", "5.0.5"
|
||||
gem "js-routes", "1.4.14"
|
||||
gem "js-routes", "2.1.2"
|
||||
gem "js_image_paths", "0.1.1"
|
||||
gem "sprockets-es6", "0.9.2"
|
||||
|
||||
|
|
@ -147,7 +147,7 @@ gem "leaflet-rails", "1.7.0"
|
|||
|
||||
# Parsing
|
||||
|
||||
gem "nokogiri", "1.11.7"
|
||||
gem "nokogiri", "1.12.5"
|
||||
gem "open_graph_reader", "0.7.2" # also update User-Agent in features/support/webmock.rb and open_graph_cache_spec.rb
|
||||
gem "redcarpet", "3.5.1"
|
||||
gem "ruby-oembed", "0.15.0"
|
||||
|
|
@ -159,18 +159,19 @@ gem "string-direction", "1.2.2"
|
|||
|
||||
# Security Headers
|
||||
|
||||
gem "secure_headers", "6.3.2"
|
||||
gem "secure_headers", "6.3.3"
|
||||
|
||||
# Services
|
||||
|
||||
gem "omniauth", "1.9.1"
|
||||
gem "omniauth-tumblr", "1.2"
|
||||
gem "omniauth-twitter", "1.4.0"
|
||||
gem "omniauth-wordpress", "0.2.2"
|
||||
gem "twitter", "7.0.0"
|
||||
gem "omniauth", "2.0.4"
|
||||
gem "omniauth-rails_csrf_protection", "1.0.0"
|
||||
gem "omniauth-tumblr", "1.2"
|
||||
gem "omniauth-twitter", "1.4.0"
|
||||
gem "omniauth-wordpress", "0.2.2"
|
||||
gem "twitter", "7.0.0"
|
||||
|
||||
# OpenID Connect
|
||||
gem "openid_connect", "1.2.0"
|
||||
gem "openid_connect", "1.3.0"
|
||||
|
||||
# Serializers
|
||||
|
||||
|
|
@ -182,19 +183,19 @@ gem "acts-as-taggable-on", "8.1.0"
|
|||
|
||||
# URIs and HTTP
|
||||
|
||||
gem "addressable", "2.7.0", require: "addressable/uri"
|
||||
gem "addressable", "2.8.0", require: "addressable/uri"
|
||||
gem "faraday", "0.17.4"
|
||||
gem "faraday_middleware", "0.13.1"
|
||||
gem "faraday-cookie_jar", "0.0.6"
|
||||
gem "faraday-cookie_jar", "0.0.7"
|
||||
gem "faraday_middleware", "0.14.0"
|
||||
gem "typhoeus", "1.4.0"
|
||||
|
||||
# Views
|
||||
|
||||
gem "gon", "6.4.0"
|
||||
gem "hamlit", "2.15.0"
|
||||
gem "hamlit", "2.15.1"
|
||||
gem "mobile-fu", "1.4.0"
|
||||
gem "rails-timeago", "2.19.1"
|
||||
gem "will_paginate", "3.3.0"
|
||||
gem "will_paginate", "3.3.1"
|
||||
|
||||
# Logging
|
||||
|
||||
|
|
@ -202,7 +203,7 @@ gem "logging-rails", "0.6.0", require: "logging/rails"
|
|||
|
||||
# Reading and writing zip files
|
||||
|
||||
gem "rubyzip", "2.3.0", require: "zip"
|
||||
gem "rubyzip", "2.3.2", require: "zip"
|
||||
|
||||
# Prevent occasions where minitest is not bundled in
|
||||
# packaged versions of ruby. See following issues/prs:
|
||||
|
|
@ -237,7 +238,7 @@ group :production do # we don"t install these on travis to speed up test runs
|
|||
|
||||
# Third party asset hosting
|
||||
|
||||
gem "asset_sync", "2.14.2", require: false
|
||||
gem "asset_sync", "2.15.0", require: false
|
||||
end
|
||||
|
||||
group :development do
|
||||
|
|
@ -275,7 +276,7 @@ group :test do
|
|||
|
||||
gem "apparition", "0.6.0"
|
||||
gem "capybara", "3.35.3"
|
||||
gem "database_cleaner-active_record", "1.8.0"
|
||||
gem "database_cleaner-active_record", "2.0.1"
|
||||
|
||||
gem "cucumber-api-steps", "0.14", require: false
|
||||
|
||||
|
|
@ -284,21 +285,21 @@ group :test do
|
|||
gem "factory_bot_rails", "6.1.0"
|
||||
gem "shoulda-matchers", "4.5.1"
|
||||
gem "timecop", "0.9.4"
|
||||
gem "webmock", "3.13.0", require: false
|
||||
gem "webmock", "3.14.0", require: false
|
||||
|
||||
gem "diaspora_federation-test", "0.2.7"
|
||||
end
|
||||
|
||||
group :development, :test do
|
||||
# RSpec (unit tests, some integration tests)
|
||||
gem "rspec-rails", "5.0.1"
|
||||
gem "rspec-rails", "5.0.2"
|
||||
|
||||
# Cucumber (integration tests)
|
||||
gem "cucumber-rails", "2.3.0", require: false
|
||||
gem "cucumber-rails", "2.4.0", require: false
|
||||
|
||||
# Jasmine (client side application tests (JS))
|
||||
gem "chrome_remote", "0.3.0"
|
||||
gem "jasmine", "3.7.0"
|
||||
gem "jasmine", "3.10.0"
|
||||
gem "jasmine-jquery-rails", "2.0.3"
|
||||
gem "rails-assets-jasmine-ajax", "4.0.0", source: "https://gems.diasporafoundation.org"
|
||||
gem "sinon-rails", "1.15.0"
|
||||
|
|
|
|||
257
Gemfile.lock
257
Gemfile.lock
|
|
@ -54,14 +54,14 @@ GEM
|
|||
activemodel (>= 3.0.0)
|
||||
activesupport (>= 3.0.0)
|
||||
rack (>= 1.1.0)
|
||||
addressable (2.7.0)
|
||||
addressable (2.8.0)
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
aes_key_wrap (1.1.0)
|
||||
apparition (0.6.0)
|
||||
capybara (~> 3.13, < 4)
|
||||
websocket-driver (>= 0.6.5)
|
||||
arel (9.0.0)
|
||||
asset_sync (2.14.2)
|
||||
asset_sync (2.15.0)
|
||||
activemodel (>= 4.1.0)
|
||||
fog-core
|
||||
mime-types (>= 2.99)
|
||||
|
|
@ -70,8 +70,8 @@ GEM
|
|||
attr_encrypted (3.1.0)
|
||||
encryptor (~> 3.0.0)
|
||||
attr_required (1.0.1)
|
||||
autoprefixer-rails (10.2.5.1)
|
||||
execjs (> 0)
|
||||
autoprefixer-rails (10.3.3.0)
|
||||
execjs (~> 2)
|
||||
babel-source (5.8.35)
|
||||
babel-transpiler (0.7.0)
|
||||
babel-source (>= 4.0, < 6)
|
||||
|
|
@ -149,57 +149,59 @@ GEM
|
|||
crack (0.4.5)
|
||||
rexml
|
||||
crass (1.0.6)
|
||||
cucumber (5.3.0)
|
||||
cucumber (7.1.0)
|
||||
builder (~> 3.2, >= 3.2.4)
|
||||
cucumber-core (~> 8.0, >= 8.0.1)
|
||||
cucumber-create-meta (~> 2.0, >= 2.0.2)
|
||||
cucumber-cucumber-expressions (~> 10.3, >= 10.3.0)
|
||||
cucumber-gherkin (~> 15.0, >= 15.0.2)
|
||||
cucumber-html-formatter (~> 9.0, >= 9.0.0)
|
||||
cucumber-messages (~> 13.1, >= 13.1.0)
|
||||
cucumber-wire (~> 4.0, >= 4.0.1)
|
||||
cucumber-core (~> 10.1, >= 10.1.0)
|
||||
cucumber-create-meta (~> 6.0, >= 6.0.1)
|
||||
cucumber-cucumber-expressions (~> 14.0, >= 14.0.0)
|
||||
cucumber-gherkin (~> 22.0, >= 22.0.0)
|
||||
cucumber-html-formatter (~> 17.0, >= 17.0.0)
|
||||
cucumber-messages (~> 17.1, >= 17.1.1)
|
||||
cucumber-wire (~> 6.2, >= 6.2.0)
|
||||
diff-lcs (~> 1.4, >= 1.4.4)
|
||||
mime-types (~> 3.3, >= 3.3.1)
|
||||
multi_test (~> 0.1, >= 0.1.2)
|
||||
sys-uname (~> 1.2, >= 1.2.1)
|
||||
sys-uname (~> 1.2, >= 1.2.2)
|
||||
cucumber-api-steps (0.14.0)
|
||||
cucumber (>= 2.0.2)
|
||||
jsonpath (>= 0.1.2)
|
||||
cucumber-core (8.0.1)
|
||||
cucumber-gherkin (~> 15.0, >= 15.0.2)
|
||||
cucumber-messages (~> 13.0, >= 13.0.1)
|
||||
cucumber-tag-expressions (~> 2.0, >= 2.0.4)
|
||||
cucumber-create-meta (2.0.4)
|
||||
cucumber-messages (~> 13.1, >= 13.1.0)
|
||||
sys-uname (~> 1.2, >= 1.2.1)
|
||||
cucumber-cucumber-expressions (10.3.0)
|
||||
cucumber-gherkin (15.0.2)
|
||||
cucumber-messages (~> 13.0, >= 13.0.1)
|
||||
cucumber-html-formatter (9.0.0)
|
||||
cucumber-messages (~> 13.0, >= 13.0.1)
|
||||
cucumber-messages (13.2.1)
|
||||
protobuf-cucumber (~> 3.10, >= 3.10.8)
|
||||
cucumber-rails (2.3.0)
|
||||
cucumber-core (10.1.0)
|
||||
cucumber-gherkin (~> 22.0, >= 22.0.0)
|
||||
cucumber-messages (~> 17.1, >= 17.1.1)
|
||||
cucumber-tag-expressions (~> 4.0, >= 4.0.2)
|
||||
cucumber-create-meta (6.0.2)
|
||||
cucumber-messages (~> 17.1, >= 17.1.1)
|
||||
sys-uname (~> 1.2, >= 1.2.2)
|
||||
cucumber-cucumber-expressions (14.0.0)
|
||||
cucumber-gherkin (22.0.0)
|
||||
cucumber-messages (~> 17.1, >= 17.1.1)
|
||||
cucumber-html-formatter (17.0.0)
|
||||
cucumber-messages (~> 17.1, >= 17.1.0)
|
||||
cucumber-messages (17.1.1)
|
||||
cucumber-rails (2.4.0)
|
||||
capybara (>= 2.18, < 4)
|
||||
cucumber (>= 3.0.2, < 6)
|
||||
mime-types (~> 3.2)
|
||||
nokogiri (~> 1.8)
|
||||
cucumber (>= 3.2, < 8)
|
||||
mime-types (~> 3.3)
|
||||
nokogiri (~> 1.10)
|
||||
railties (>= 5.0, < 7)
|
||||
cucumber-tag-expressions (2.0.4)
|
||||
cucumber-wire (4.0.1)
|
||||
cucumber-core (~> 8.0, >= 8.0.1)
|
||||
cucumber-cucumber-expressions (~> 10.3, >= 10.3.0)
|
||||
cucumber-messages (~> 13.0, >= 13.0.1)
|
||||
database_cleaner (1.8.5)
|
||||
database_cleaner-active_record (1.8.0)
|
||||
activerecord
|
||||
database_cleaner (~> 1.8.0)
|
||||
rexml (~> 3.0)
|
||||
webrick (~> 1.7)
|
||||
cucumber-tag-expressions (4.1.0)
|
||||
cucumber-wire (6.2.0)
|
||||
cucumber-core (~> 10.1, >= 10.1.0)
|
||||
cucumber-cucumber-expressions (~> 14.0, >= 14.0.0)
|
||||
cucumber-messages (~> 17.1, >= 17.1.1)
|
||||
database_cleaner-active_record (2.0.1)
|
||||
activerecord (>= 5.a)
|
||||
database_cleaner-core (~> 2.0.0)
|
||||
database_cleaner-core (2.0.1)
|
||||
devise (4.8.0)
|
||||
bcrypt (~> 3.0)
|
||||
orm_adapter (~> 0.1)
|
||||
railties (>= 4.1.0)
|
||||
responders
|
||||
warden (~> 1.2.3)
|
||||
devise-two-factor (4.0.0)
|
||||
devise-two-factor (4.0.1)
|
||||
activesupport (< 6.2)
|
||||
attr_encrypted (>= 1.3, < 4, != 2)
|
||||
devise (~> 4.0)
|
||||
|
|
@ -235,11 +237,11 @@ GEM
|
|||
execjs
|
||||
multi_json (>= 1.3)
|
||||
rake
|
||||
et-orbi (1.2.4)
|
||||
et-orbi (1.2.6)
|
||||
tzinfo
|
||||
ethon (0.15.0)
|
||||
ffi (>= 1.15.0)
|
||||
excon (0.82.0)
|
||||
excon (0.88.0)
|
||||
execjs (2.8.1)
|
||||
eye (0.10.0)
|
||||
celluloid (~> 0.17.3)
|
||||
|
|
@ -255,10 +257,10 @@ GEM
|
|||
railties (>= 5.0.0)
|
||||
faraday (0.17.4)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
faraday-cookie_jar (0.0.6)
|
||||
faraday (>= 0.7.4)
|
||||
faraday-cookie_jar (0.0.7)
|
||||
faraday (>= 0.8.0)
|
||||
http-cookie (~> 1.0.0)
|
||||
faraday_middleware (0.13.1)
|
||||
faraday_middleware (0.14.0)
|
||||
faraday (>= 0.7.4, < 1.0)
|
||||
ffi (1.15.4)
|
||||
ffi-compiler (1.0.1)
|
||||
|
|
@ -268,7 +270,7 @@ GEM
|
|||
activerecord (>= 2)
|
||||
activesupport (>= 2)
|
||||
hashdiff
|
||||
fog-aws (3.10.0)
|
||||
fog-aws (3.12.0)
|
||||
fog-core (~> 2.1)
|
||||
fog-json (~> 1.1)
|
||||
fog-xml (~> 0.1)
|
||||
|
|
@ -281,11 +283,11 @@ GEM
|
|||
fog-json (1.2.0)
|
||||
fog-core
|
||||
multi_json (~> 1.10)
|
||||
fog-xml (0.1.3)
|
||||
fog-xml (0.1.4)
|
||||
fog-core
|
||||
nokogiri (>= 1.5.11, < 2.0.0)
|
||||
formatador (0.3.0)
|
||||
fugit (1.5.0)
|
||||
fugit (1.5.2)
|
||||
et-orbi (~> 1.1, >= 1.1.8)
|
||||
raabro (~> 1.4)
|
||||
fuubar (2.5.1)
|
||||
|
|
@ -296,14 +298,14 @@ GEM
|
|||
gitlab (4.17.0)
|
||||
httparty (~> 0.18)
|
||||
terminal-table (~> 1.5, >= 1.5.1)
|
||||
globalid (0.4.2)
|
||||
activesupport (>= 4.2.0)
|
||||
globalid (0.5.2)
|
||||
activesupport (>= 5.0)
|
||||
gon (6.4.0)
|
||||
actionpack (>= 3.0.20)
|
||||
i18n (>= 0.7)
|
||||
multi_json
|
||||
request_store (>= 1.0)
|
||||
haml (5.2.1)
|
||||
haml (5.2.2)
|
||||
temple (>= 0.8.0)
|
||||
tilt
|
||||
haml_lint (0.37.1)
|
||||
|
|
@ -312,7 +314,7 @@ GEM
|
|||
rainbow
|
||||
rubocop (>= 0.50.0)
|
||||
sysexits (~> 1.1)
|
||||
hamlit (2.15.0)
|
||||
hamlit (2.15.1)
|
||||
temple (>= 0.8.2)
|
||||
thor
|
||||
tilt
|
||||
|
|
@ -334,11 +336,11 @@ GEM
|
|||
ffi-compiler (>= 1.0, < 2.0)
|
||||
http_accept_language (2.1.1)
|
||||
http_parser.rb (0.6.0)
|
||||
httparty (0.18.1)
|
||||
httparty (0.20.0)
|
||||
mime-types (~> 3.0)
|
||||
multi_xml (>= 0.5.2)
|
||||
httpclient (2.8.3)
|
||||
i18n (1.8.10)
|
||||
i18n (1.8.11)
|
||||
concurrent-ruby (~> 1.0)
|
||||
i18n-inflector (2.6.7)
|
||||
i18n (>= 0.4.1)
|
||||
|
|
@ -351,12 +353,13 @@ GEM
|
|||
mini_magick (>= 4.9.5, < 5)
|
||||
ruby-vips (>= 2.0.17, < 3)
|
||||
ipaddress (0.8.3)
|
||||
jasmine (3.7.0)
|
||||
jasmine-core (~> 3.7.0)
|
||||
jasmine (3.10.0)
|
||||
jasmine-core (~> 3.10.0)
|
||||
phantomjs
|
||||
rack (>= 1.2.1)
|
||||
rack (>= 2.1.4)
|
||||
rake
|
||||
jasmine-core (3.7.1)
|
||||
webrick
|
||||
jasmine-core (3.10.1)
|
||||
jasmine-jquery-rails (2.0.3)
|
||||
jquery-rails (4.4.0)
|
||||
rails-dom-testing (>= 1, < 3)
|
||||
|
|
@ -364,7 +367,7 @@ GEM
|
|||
thor (>= 0.14, < 2.0)
|
||||
jquery-ui-rails (5.0.5)
|
||||
railties (>= 3.2.16)
|
||||
js-routes (1.4.14)
|
||||
js-routes (2.1.2)
|
||||
railties (>= 4)
|
||||
js_image_paths (0.1.1)
|
||||
rails (>= 4.0, < 6.0)
|
||||
|
|
@ -381,9 +384,9 @@ GEM
|
|||
rspec
|
||||
jsonpath (1.1.0)
|
||||
multi_json
|
||||
jwt (2.2.3)
|
||||
jwt (2.3.0)
|
||||
kgio (2.11.4)
|
||||
kostya-sigar (2.0.8)
|
||||
kostya-sigar (2.0.10)
|
||||
leaflet-rails (1.7.0)
|
||||
rails (>= 4.2.0)
|
||||
listen (3.5.1)
|
||||
|
|
@ -402,19 +405,18 @@ GEM
|
|||
systemu (~> 2.6.5)
|
||||
mail (2.7.1)
|
||||
mini_mime (>= 0.1.1)
|
||||
marcel (1.0.1)
|
||||
marcel (1.0.2)
|
||||
markdown-it-html5-embed (1.0.0)
|
||||
markerb (1.1.0)
|
||||
memoizable (0.4.2)
|
||||
thread_safe (~> 0.3, >= 0.3.1)
|
||||
method_source (1.0.0)
|
||||
middleware (0.1.0)
|
||||
mime-types (3.3.1)
|
||||
mime-types-data (~> 3.2015)
|
||||
mime-types-data (3.2021.0225)
|
||||
mime-types-data (3.2021.0901)
|
||||
mini_magick (4.11.0)
|
||||
mini_mime (1.1.0)
|
||||
mini_portile2 (2.5.3)
|
||||
mini_mime (1.1.2)
|
||||
mini_portile2 (2.6.1)
|
||||
minitest (5.14.4)
|
||||
mobile-fu (1.4.0)
|
||||
rack-mobile-detect
|
||||
|
|
@ -425,11 +427,11 @@ GEM
|
|||
multipart-post (2.1.1)
|
||||
mysql2 (0.5.3)
|
||||
naught (1.1.0)
|
||||
nio4r (2.5.7)
|
||||
nokogiri (1.11.7)
|
||||
mini_portile2 (~> 2.5.0)
|
||||
nio4r (2.5.8)
|
||||
nokogiri (1.12.5)
|
||||
mini_portile2 (~> 2.6.1)
|
||||
racc (~> 1.4)
|
||||
oauth (0.5.6)
|
||||
oauth (0.5.7)
|
||||
oauth2 (1.4.7)
|
||||
faraday (>= 0.8, < 2.0)
|
||||
jwt (>= 1.0, < 3.0)
|
||||
|
|
@ -439,15 +441,19 @@ GEM
|
|||
octokit (4.21.0)
|
||||
faraday (>= 0.9)
|
||||
sawyer (~> 0.8.0, >= 0.5.3)
|
||||
omniauth (1.9.1)
|
||||
omniauth (2.0.4)
|
||||
hashie (>= 3.4.6)
|
||||
rack (>= 1.6.2, < 3)
|
||||
rack-protection
|
||||
omniauth-oauth (1.2.0)
|
||||
oauth
|
||||
omniauth (>= 1.0, < 3)
|
||||
omniauth-oauth2 (1.7.1)
|
||||
omniauth-oauth2 (1.7.2)
|
||||
oauth2 (~> 1.4)
|
||||
omniauth (>= 1.9, < 3)
|
||||
omniauth-rails_csrf_protection (1.0.0)
|
||||
actionpack (>= 4.2)
|
||||
omniauth (~> 2.0)
|
||||
omniauth-tumblr (1.2)
|
||||
multi_json
|
||||
omniauth-oauth (~> 1.0)
|
||||
|
|
@ -459,7 +465,7 @@ GEM
|
|||
open_graph_reader (0.7.2)
|
||||
faraday (>= 0.9.0)
|
||||
nokogiri (~> 1.6)
|
||||
openid_connect (1.2.0)
|
||||
openid_connect (1.3.0)
|
||||
activemodel
|
||||
attr_required (>= 1.0.0)
|
||||
json-jwt (>= 1.5.0)
|
||||
|
|
@ -470,8 +476,8 @@ GEM
|
|||
validate_url
|
||||
webfinger (>= 1.0.1)
|
||||
orm_adapter (0.5.0)
|
||||
parallel (1.20.1)
|
||||
parser (3.0.1.1)
|
||||
parallel (1.21.0)
|
||||
parser (3.0.2.0)
|
||||
ast (~> 2.4.1)
|
||||
pg (1.2.3)
|
||||
phantomjs (2.1.1.0)
|
||||
|
|
@ -496,11 +502,6 @@ GEM
|
|||
pronto-scss (0.11.0)
|
||||
pronto (~> 0.11.0)
|
||||
scss_lint (~> 0.43, >= 0.43.0)
|
||||
protobuf-cucumber (3.10.8)
|
||||
activesupport (>= 3.2)
|
||||
middleware
|
||||
thor
|
||||
thread_safe
|
||||
pry (0.14.1)
|
||||
coderay (~> 1.1)
|
||||
method_source (~> 1.0)
|
||||
|
|
@ -518,13 +519,15 @@ GEM
|
|||
activesupport
|
||||
rack-mobile-detect (0.4.0)
|
||||
rack
|
||||
rack-oauth2 (1.17.0)
|
||||
rack-oauth2 (1.19.0)
|
||||
activesupport
|
||||
attr_required
|
||||
httpclient
|
||||
json-jwt (>= 1.11.0)
|
||||
rack (>= 2.1.0)
|
||||
rack-piwik (0.3.0)
|
||||
rack-protection (2.1.0)
|
||||
rack
|
||||
rack-rewrite (1.5.1)
|
||||
rack-ssl (1.4.1)
|
||||
rack
|
||||
|
|
@ -601,11 +604,11 @@ GEM
|
|||
rainbow (3.0.0)
|
||||
raindrops (0.19.2)
|
||||
rake (12.3.3)
|
||||
rb-fsevent (0.10.4)
|
||||
rb-fsevent (0.11.0)
|
||||
rb-inotify (0.10.1)
|
||||
ffi (~> 1.0)
|
||||
redcarpet (3.5.1)
|
||||
redis (4.3.1)
|
||||
redis (4.5.1)
|
||||
regexp_parser (2.1.1)
|
||||
request_store (1.5.0)
|
||||
rack (>= 1.4)
|
||||
|
|
@ -614,10 +617,10 @@ GEM
|
|||
railties (>= 5.0)
|
||||
rexml (3.2.5)
|
||||
rotp (6.2.0)
|
||||
rqrcode (2.0.0)
|
||||
rqrcode (2.1.0)
|
||||
chunky_png (~> 1.0)
|
||||
rqrcode_core (~> 1.0)
|
||||
rqrcode_core (1.0.0)
|
||||
rqrcode_core (1.2.0)
|
||||
rspec (3.10.0)
|
||||
rspec-core (~> 3.10.0)
|
||||
rspec-expectations (~> 3.10.0)
|
||||
|
|
@ -631,7 +634,7 @@ GEM
|
|||
rspec-mocks (3.10.2)
|
||||
diff-lcs (>= 1.2.0, < 2.0)
|
||||
rspec-support (~> 3.10.0)
|
||||
rspec-rails (5.0.1)
|
||||
rspec-rails (5.0.2)
|
||||
actionpack (>= 5.2)
|
||||
activesupport (>= 5.2)
|
||||
railties (>= 5.2)
|
||||
|
|
@ -639,7 +642,7 @@ GEM
|
|||
rspec-expectations (~> 3.10)
|
||||
rspec-mocks (~> 3.10)
|
||||
rspec-support (~> 3.10)
|
||||
rspec-support (3.10.2)
|
||||
rspec-support (3.10.3)
|
||||
rubocop (0.93.1)
|
||||
parallel (~> 1.10)
|
||||
parser (>= 2.7.1.5)
|
||||
|
|
@ -657,9 +660,9 @@ GEM
|
|||
rubocop (>= 0.90.0, < 2.0)
|
||||
ruby-oembed (0.15.0)
|
||||
ruby-progressbar (1.11.0)
|
||||
ruby-vips (2.1.2)
|
||||
ruby-vips (2.1.3)
|
||||
ffi (~> 1.12)
|
||||
rubyzip (2.3.0)
|
||||
rubyzip (2.3.2)
|
||||
rugged (1.0.1)
|
||||
sass (3.4.25)
|
||||
sass-rails (5.0.7)
|
||||
|
|
@ -676,10 +679,10 @@ GEM
|
|||
scss_lint (0.55.0)
|
||||
rake (>= 0.9, < 13)
|
||||
sass (~> 3.4.20)
|
||||
secure_headers (6.3.2)
|
||||
secure_headers (6.3.3)
|
||||
shoulda-matchers (4.5.1)
|
||||
activesupport (>= 4.2.0)
|
||||
sidekiq (6.2.1)
|
||||
sidekiq (6.2.2)
|
||||
connection_pool (>= 2.2.2)
|
||||
rack (~> 2.0)
|
||||
redis (>= 4.2.0)
|
||||
|
|
@ -711,7 +714,7 @@ GEM
|
|||
ssrf_filter (1.0.7)
|
||||
state_machines (0.5.0)
|
||||
string-direction (1.2.2)
|
||||
swd (1.2.0)
|
||||
swd (1.3.0)
|
||||
activesupport (>= 3)
|
||||
attr_required (>= 0.0.5)
|
||||
httpclient (>= 2.4)
|
||||
|
|
@ -722,14 +725,14 @@ GEM
|
|||
temple (0.8.2)
|
||||
terminal-table (1.8.0)
|
||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||
terser (1.1.5)
|
||||
terser (1.1.7)
|
||||
execjs (>= 0.3.0, < 3)
|
||||
thor (1.1.0)
|
||||
thread_safe (0.3.6)
|
||||
tilt (2.0.10)
|
||||
timecop (0.9.4)
|
||||
timers (4.3.3)
|
||||
toml-rb (2.0.1)
|
||||
toml-rb (2.1.0)
|
||||
citrus (~> 3.0, > 3.0)
|
||||
turbo_dev_assets (0.0.2)
|
||||
twitter (7.0.0)
|
||||
|
|
@ -752,8 +755,8 @@ GEM
|
|||
thread_safe (~> 0.1)
|
||||
unf (0.1.4)
|
||||
unf_ext
|
||||
unf_ext (0.0.7.7)
|
||||
unicode-display_width (1.7.0)
|
||||
unf_ext (0.0.8)
|
||||
unicode-display_width (1.8.0)
|
||||
unicorn (6.0.0)
|
||||
kgio (~> 2.6)
|
||||
raindrops (~> 0.7)
|
||||
|
|
@ -775,17 +778,18 @@ GEM
|
|||
yard (~> 0.9.20)
|
||||
warden (1.2.9)
|
||||
rack (>= 2.0.9)
|
||||
webfinger (1.1.0)
|
||||
webfinger (1.2.0)
|
||||
activesupport
|
||||
httpclient (>= 2.4)
|
||||
webmock (3.13.0)
|
||||
addressable (>= 2.3.6)
|
||||
webmock (3.14.0)
|
||||
addressable (>= 2.8.0)
|
||||
crack (>= 0.3.2)
|
||||
hashdiff (>= 0.4.0, < 2.0.0)
|
||||
webrick (1.7.0)
|
||||
websocket-driver (0.7.5)
|
||||
websocket-extensions (>= 0.1.0)
|
||||
websocket-extensions (0.1.5)
|
||||
will_paginate (3.3.0)
|
||||
will_paginate (3.3.1)
|
||||
xpath (3.2.0)
|
||||
nokogiri (~> 1.8)
|
||||
yajl-ruby (1.4.1)
|
||||
|
|
@ -799,10 +803,10 @@ DEPENDENCIES
|
|||
activerecord-import (= 1.1.0)
|
||||
acts-as-taggable-on (= 8.1.0)
|
||||
acts_as_api (= 1.0.1)
|
||||
addressable (= 2.7.0)
|
||||
addressable (= 2.8.0)
|
||||
apparition (= 0.6.0)
|
||||
asset_sync (= 2.14.2)
|
||||
autoprefixer-rails (= 10.2.5.1)
|
||||
asset_sync (= 2.15.0)
|
||||
autoprefixer-rails (= 10.3.3.0)
|
||||
bootstrap-sass (= 3.4.1)
|
||||
bootstrap-switch-rails (= 3.3.3)
|
||||
capybara (= 3.35.3)
|
||||
|
|
@ -811,10 +815,10 @@ DEPENDENCIES
|
|||
compass-rails (= 3.1.0)
|
||||
configurate (= 0.5.0)
|
||||
cucumber-api-steps (= 0.14)
|
||||
cucumber-rails (= 2.3.0)
|
||||
database_cleaner-active_record (= 1.8.0)
|
||||
cucumber-rails (= 2.4.0)
|
||||
database_cleaner-active_record (= 2.0.1)
|
||||
devise (= 4.8.0)
|
||||
devise-two-factor (= 4.0.0)
|
||||
devise-two-factor (= 4.0.1)
|
||||
devise_lastseenable (= 0.0.6)
|
||||
diaspora_federation-json_schema (= 0.2.7)
|
||||
diaspora_federation-rails (= 0.2.7)
|
||||
|
|
@ -823,22 +827,22 @@ DEPENDENCIES
|
|||
eye (= 0.10.0)
|
||||
factory_bot_rails (= 6.1.0)
|
||||
faraday (= 0.17.4)
|
||||
faraday-cookie_jar (= 0.0.6)
|
||||
faraday_middleware (= 0.13.1)
|
||||
faraday-cookie_jar (= 0.0.7)
|
||||
faraday_middleware (= 0.14.0)
|
||||
fixture_builder (= 0.5.2)
|
||||
fog-aws (= 3.10.0)
|
||||
fog-aws (= 3.12.0)
|
||||
fuubar (= 2.5.1)
|
||||
gon (= 6.4.0)
|
||||
haml_lint (= 0.37.1)
|
||||
hamlit (= 2.15.0)
|
||||
hamlit (= 2.15.1)
|
||||
handlebars_assets (= 0.23.9)
|
||||
http_accept_language (= 2.1.1)
|
||||
i18n-inflector-rails (= 1.0.7)
|
||||
jasmine (= 3.7.0)
|
||||
jasmine (= 3.10.0)
|
||||
jasmine-jquery-rails (= 2.0.3)
|
||||
jquery-rails (= 4.4.0)
|
||||
jquery-ui-rails (= 5.0.5)
|
||||
js-routes (= 1.4.14)
|
||||
js-routes (= 2.1.2)
|
||||
js_image_paths (= 0.1.1)
|
||||
json (= 2.3.0)
|
||||
json-schema (= 2.8.1)
|
||||
|
|
@ -852,13 +856,14 @@ DEPENDENCIES
|
|||
minitest
|
||||
mobile-fu (= 1.4.0)
|
||||
mysql2 (= 0.5.3)
|
||||
nokogiri (= 1.11.7)
|
||||
omniauth (= 1.9.1)
|
||||
nokogiri (= 1.12.5)
|
||||
omniauth (= 2.0.4)
|
||||
omniauth-rails_csrf_protection (= 1.0.0)
|
||||
omniauth-tumblr (= 1.2)
|
||||
omniauth-twitter (= 1.4.0)
|
||||
omniauth-wordpress (= 0.2.2)
|
||||
open_graph_reader (= 0.7.2)
|
||||
openid_connect (= 1.2.0)
|
||||
openid_connect (= 1.3.0)
|
||||
pg (= 1.2.3)
|
||||
pronto (= 0.11.0)
|
||||
pronto-eslint (= 0.11.0)
|
||||
|
|
@ -900,19 +905,19 @@ DEPENDENCIES
|
|||
rails-i18n (= 5.1.3)
|
||||
rails-timeago (= 2.19.1)
|
||||
redcarpet (= 3.5.1)
|
||||
redis (= 4.3.1)
|
||||
redis (= 4.5.1)
|
||||
responders (= 3.0.1)
|
||||
rqrcode (= 2.0.0)
|
||||
rqrcode (= 2.1.0)
|
||||
rspec-json_expectations (~> 2.1)
|
||||
rspec-rails (= 5.0.1)
|
||||
rspec-rails (= 5.0.2)
|
||||
rubocop (= 0.93.1)
|
||||
rubocop-rails (= 2.9.1)
|
||||
ruby-oembed (= 0.15.0)
|
||||
rubyzip (= 2.3.0)
|
||||
rubyzip (= 2.3.2)
|
||||
sass-rails (= 5.0.7)
|
||||
secure_headers (= 6.3.2)
|
||||
secure_headers (= 6.3.3)
|
||||
shoulda-matchers (= 4.5.1)
|
||||
sidekiq (= 6.2.1)
|
||||
sidekiq (= 6.2.2)
|
||||
sidekiq-cron (= 1.2.0)
|
||||
simple_captcha2 (= 0.5.0)
|
||||
simplecov (= 0.21.2)
|
||||
|
|
@ -920,9 +925,9 @@ DEPENDENCIES
|
|||
sprockets-es6 (= 0.9.2)
|
||||
sprockets-rails (= 3.2.2)
|
||||
string-direction (= 1.2.2)
|
||||
terser (= 1.1.5)
|
||||
terser (= 1.1.7)
|
||||
timecop (= 0.9.4)
|
||||
toml-rb (= 2.0.1)
|
||||
toml-rb (= 2.1.0)
|
||||
turbo_dev_assets (= 0.0.2)
|
||||
twitter (= 7.0.0)
|
||||
twitter-text (= 3.1.0)
|
||||
|
|
@ -931,8 +936,8 @@ DEPENDENCIES
|
|||
unicorn-worker-killer (= 0.4.5)
|
||||
uuid (= 2.3.9)
|
||||
versionist (= 2.0.1)
|
||||
webmock (= 3.13.0)
|
||||
will_paginate (= 3.3.0)
|
||||
webmock (= 3.14.0)
|
||||
will_paginate (= 3.3.1)
|
||||
yajl-ruby (= 1.4.1)
|
||||
|
||||
BUNDLED WITH
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ Handlebars.registerHelper('linkToPerson', function(context, block) {
|
|||
// relationship indicator for profile page
|
||||
Handlebars.registerHelper("sharingMessage", function(person) {
|
||||
var i18nScope = "people.helper.is_not_sharing";
|
||||
var icon = "circle";
|
||||
var icon = "entypo-record";
|
||||
if( person.is_sharing ) {
|
||||
i18nScope = "people.helper.is_sharing";
|
||||
icon = "entypo-check";
|
||||
|
|
|
|||
|
|
@ -19,10 +19,15 @@ app.views.Hovercard = app.views.Base.extend({
|
|||
|
||||
this.showMe = false;
|
||||
this.parent = null; // current 'hovercardable' element that caused HC to appear
|
||||
|
||||
this.active = true;
|
||||
},
|
||||
|
||||
presenter: function() {
|
||||
return _.extend({}, this.defaultPresenter(), {
|
||||
person: this.person
|
||||
});
|
||||
},
|
||||
|
||||
postRenderTemplate: function() {
|
||||
this.$el.appendTo($("body"));
|
||||
|
||||
|
|
@ -102,14 +107,14 @@ app.views.Hovercard = app.views.Base.extend({
|
|||
if( !person || person.length === 0 ) {
|
||||
throw new Error("received data is not a person object");
|
||||
}
|
||||
|
||||
var personModel = new app.models.Person(person);
|
||||
person.is_sharing = personModel.isSharing();
|
||||
self.person = person;
|
||||
if (app.currentUser.authenticated()) {
|
||||
self.aspectMembershipDropdown = new app.views.AspectMembership({person: new app.models.Person(person)});
|
||||
self.aspectMembershipDropdown = new app.views.AspectMembership({person: personModel});
|
||||
}
|
||||
|
||||
self.render();
|
||||
|
||||
self._populateHovercardWith(person);
|
||||
if( !self.showMe ) {
|
||||
// mouse has left element
|
||||
return;
|
||||
|
|
@ -118,23 +123,6 @@ app.views.Hovercard = app.views.Base.extend({
|
|||
});
|
||||
},
|
||||
|
||||
_populateHovercardWith: function(person) {
|
||||
this.avatarLink.attr("href", this.href());
|
||||
this.personLink.attr("href", this.href());
|
||||
this.personLink.text(person.name);
|
||||
this.personID.text(person.diaspora_id);
|
||||
|
||||
if (person.profile) {
|
||||
this.avatar.attr("src", person.profile.avatar);
|
||||
|
||||
// set hashtags
|
||||
this.hashtags.empty();
|
||||
this.hashtags.html($(_.map(person.profile.tags, function(tag) {
|
||||
return $("<a></a>", {href: Routes.tag(tag)}).text("#" + tag)[0];
|
||||
})));
|
||||
}
|
||||
},
|
||||
|
||||
_positionHovercard: function() {
|
||||
var p_pos = this.parent.offset();
|
||||
var p_height = this.parent.height();
|
||||
|
|
|
|||
|
|
@ -55,8 +55,8 @@ body {
|
|||
|
||||
.tag:hover { background-color: desaturate(darken($link-color, 35%), 20%); }
|
||||
|
||||
#profile_container .profile_header {
|
||||
#author_info #sharing_message.entypo-check { color: lighten($green, 10%); }
|
||||
#sharing_message.entypo-check {
|
||||
color: lighten($green, 10%);
|
||||
}
|
||||
|
||||
#invitationsModal #email_invitation { border-top: 1px dashed $gray-light; }
|
||||
|
|
|
|||
|
|
@ -119,6 +119,19 @@
|
|||
}
|
||||
}
|
||||
|
||||
.dropdown-toggle {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
|
||||
.user-name {
|
||||
margin-right: 3px;
|
||||
max-width: 250px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
|
||||
.user-menu-dropdown {
|
||||
padding: 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,6 +33,12 @@
|
|||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.status-container {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
#hovercard_dropdown_container {
|
||||
overflow: visible !important; /* otherwise the aspect dropdown is cropped */
|
||||
}
|
||||
|
|
@ -53,10 +59,7 @@
|
|||
|
||||
.handle {
|
||||
color: $text-grey;
|
||||
line-height: 18px;
|
||||
padding-top: 0px;
|
||||
margin-top: 0px;
|
||||
margin-bottom: 5px;
|
||||
margin-right: 2px;
|
||||
}
|
||||
|
||||
.btn-group.aspect-membership-dropdown { margin: 0 !important; }
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
}
|
||||
.invitations-button { padding-left: 0; }
|
||||
}
|
||||
|
||||
#people-stream {
|
||||
.media, .media-body {
|
||||
overflow: visible;
|
||||
|
|
@ -28,6 +29,7 @@
|
|||
.info { font-size: $font-size-small; }
|
||||
}
|
||||
}
|
||||
|
||||
#blocked_people {
|
||||
.blocked-person {
|
||||
border-bottom: 1px solid $border-grey;
|
||||
|
|
@ -45,3 +47,13 @@
|
|||
.btn-danger { margin-top: 9px; }
|
||||
}
|
||||
}
|
||||
|
||||
#sharing_message {
|
||||
&.entypo-check {
|
||||
color: darken($brand-success, 20%);
|
||||
}
|
||||
|
||||
&.entypo-record {
|
||||
color: $text-grey;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,11 +28,6 @@
|
|||
#sharing_message {
|
||||
cursor: default;
|
||||
font-size: 20px;
|
||||
&.circle {
|
||||
color: $text-grey;
|
||||
&:before { content: '\26aa'; }
|
||||
}
|
||||
&.entypo-check { color: darken($brand-success,20%); }
|
||||
}
|
||||
.description {
|
||||
margin-bottom: 20px;
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@
|
|||
<ul class="nav navbar-nav navbar-right">
|
||||
<li class="dropdown user-menu" id="user-menu">
|
||||
<a href="{{urlTo "person" current_user.guid}}" class="dropdown-toggle hidden-xs hidden-sm" data-toggle="dropdown" role="button" aria-expanded="false">
|
||||
<span class="user-avatar pull-left">
|
||||
<span class="user-avatar">
|
||||
{{{personImage current_user "small"}}}
|
||||
</span>
|
||||
<span class="user-name">{{current_user.name}}</span>
|
||||
|
|
|
|||
|
|
@ -1,15 +1,22 @@
|
|||
{{#with person}}
|
||||
<div id="hovercard">
|
||||
<a class='person_avatar'>
|
||||
<img class="avatar">
|
||||
<a class="person_avatar" href="{{urlTo 'person' guid}}">
|
||||
<img class="avatar" src="{{profile.avatar}}" />
|
||||
</a>
|
||||
<h4>
|
||||
<a class="person"></a>
|
||||
<a class="person" href="{{urlTo 'person' guid}}">{{name}}</a>
|
||||
</h4>
|
||||
<div class="handle"></div>
|
||||
<div class="status-container">
|
||||
<div class="handle">{{diaspora_id}}</div>
|
||||
{{{sharingMessage this}}}
|
||||
</div>
|
||||
<div id="hovercard_dropdown_container"></div>
|
||||
<div class="card-footer">
|
||||
<div class="footer-container">
|
||||
<div class="hashtags"></div>
|
||||
<div class="hashtags">
|
||||
{{fmtTags profile.tags}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/with}}
|
||||
|
|
|
|||
|
|
@ -97,6 +97,10 @@ class AccountMigration < ApplicationRecord
|
|||
old_user && new_user
|
||||
end
|
||||
|
||||
def includes_photo_migration?
|
||||
remote_photo_path.present?
|
||||
end
|
||||
|
||||
def tombstone_old_user_and_update_all_references
|
||||
ActiveRecord::Base.transaction do
|
||||
account_deleter.tombstone_person_and_profile
|
||||
|
|
@ -146,6 +150,7 @@ class AccountMigration < ApplicationRecord
|
|||
end
|
||||
|
||||
def update_all_references
|
||||
update_remote_photo_path if remotely_initiated? && includes_photo_migration?
|
||||
update_person_references
|
||||
update_user_references if user_changed_id_locally?
|
||||
end
|
||||
|
|
@ -224,6 +229,20 @@ class AccountMigration < ApplicationRecord
|
|||
.destroy_all
|
||||
end
|
||||
|
||||
def update_remote_photo_path
|
||||
Photo.where(author: old_person)
|
||||
.update_all(remote_photo_path: remote_photo_path) # rubocop:disable Rails/SkipsModelValidations
|
||||
return unless user_left_our_pod?
|
||||
|
||||
Photo.where(author: old_person).find_in_batches do |batch|
|
||||
batch.each do |photo|
|
||||
photo.processed_image = nil
|
||||
photo.unprocessed_image = nil
|
||||
logger.warn "Error cleaning up photo #{photo.id}" unless photo.save
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def update_person_references
|
||||
logger.debug "Updating references from person id=#{old_person.id} to person id=#{newest_person.id}"
|
||||
eliminate_person_duplicates
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ class PersonPresenter < BasePresenter
|
|||
end
|
||||
|
||||
def hovercard
|
||||
base_hash_with_contact.merge(profile: ProfilePresenter.new(profile).for_hovercard)
|
||||
full_hash.merge(profile: ProfilePresenter.new(profile).for_hovercard)
|
||||
end
|
||||
|
||||
def metas_attributes
|
||||
|
|
|
|||
|
|
@ -5,11 +5,26 @@
|
|||
# are used as for federation messages generation.
|
||||
class FederationEntitySerializer < ActiveModel::Serializer
|
||||
include SerializerPostProcessing
|
||||
include Diaspora::Logging
|
||||
|
||||
private
|
||||
|
||||
def modify_serializable_object(hash)
|
||||
hash.merge(entity.to_json)
|
||||
rescue DiasporaFederation::Entities::Relayable::AuthorPrivateKeyNotFound => e
|
||||
# The author of this relayable probably migrated from this pod to a different pod,
|
||||
# and we neither have the signature nor the new private key to generate a valid signature.
|
||||
# But we can use the private key of the old user to generate the signature it had when this entity was created
|
||||
old_person = AccountMigration.joins(:old_person)
|
||||
.where("new_person_id = ? AND people.owner_id IS NOT NULL", object.author_id)
|
||||
.first.old_person
|
||||
if old_person
|
||||
logger.info "Using private key of #{old_person.diaspora_handle} to export: #{e.message}"
|
||||
object.author = old_person
|
||||
hash.merge(entity.to_json)
|
||||
else
|
||||
logger.warn "Skip entity for export because #{e.class}: #{e.message}"
|
||||
end
|
||||
end
|
||||
|
||||
def entity
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
- else
|
||||
= t("services.index.not_logged_in")
|
||||
= link_to(t("services.index.connect"), "/auth/#{provider}")
|
||||
= link_to(t("services.index.connect"), "/auth/#{provider}", method: :post)
|
||||
|
||||
- else
|
||||
.well
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@
|
|||
- if service_unconnected?(service)
|
||||
= link_to(content_tag(:div, nil,
|
||||
class: "social-media-logos-#{service.to_s.downcase}-24x24",
|
||||
title: service.to_s.titleize), "/auth/#{service}")
|
||||
title: service.to_s.titleize), "/auth/#{service}", method: :post)
|
||||
|
||||
.section.collapsed
|
||||
.title
|
||||
|
|
|
|||
|
|
@ -3,4 +3,6 @@
|
|||
JsRoutes.setup do |config|
|
||||
config.camel_case = true
|
||||
config.compact = true
|
||||
config.module_type = nil
|
||||
config.namespace = "Routes"
|
||||
end
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddRemotePhotoPathToAccountMigration < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
add_column :account_migrations, :remote_photo_path, :text
|
||||
end
|
||||
end
|
||||
|
|
@ -49,3 +49,21 @@ Feature: Hovercards
|
|||
Then I should see a hovercard
|
||||
And I should see "#first" hashtag in the hovercard
|
||||
And I should see "#second" hashtag in the hovercard
|
||||
|
||||
Scenario: Hovercards contain the aspect membership and the sharing status
|
||||
Given a user with email "alice@alice.alice" is connected with "bob@bob.bob"
|
||||
And I sign in as "alice@alice.alice"
|
||||
And I am on "bob@bob.bob"'s page
|
||||
When I activate the first hovercard
|
||||
Then I should see a hovercard
|
||||
And I should see "Besties" within ".aspect-membership-dropdown"
|
||||
And I should see a "[title='Bob Jones is sharing with you']" within ".status-container"
|
||||
And I should see a ".entypo-check" within ".sharing_message_container"
|
||||
|
||||
Scenario: Hovercards contain sharing status when not sharing
|
||||
Given I sign in as "alice@alice.alice"
|
||||
And I am on "bob@bob.bob"'s page
|
||||
When I activate the first hovercard
|
||||
Then I should see a hovercard
|
||||
And I should see a "[title='Bob Jones is not sharing with you']" within ".status-container"
|
||||
And I should see a ".entypo-record" within ".sharing_message_container"
|
||||
|
|
|
|||
|
|
@ -31,7 +31,11 @@ module Diaspora
|
|||
profile = profile(entity.profile, opts)
|
||||
return if AccountMigration.exists?(old_person: old_person, new_person: profile.person)
|
||||
|
||||
AccountMigration.create!(old_person: old_person, new_person: profile.person).tap do |migration|
|
||||
AccountMigration.create!(
|
||||
old_person: old_person,
|
||||
new_person: profile.person,
|
||||
remote_photo_path: entity.remote_photo_path
|
||||
).tap do |migration|
|
||||
migration.signature = entity.signature if old_person.local?
|
||||
migration.save!
|
||||
end
|
||||
|
|
|
|||
|
|
@ -149,9 +149,29 @@ shared_examples_for "migration scenarios initiated locally" do
|
|||
[]
|
||||
end
|
||||
|
||||
inlined_jobs do
|
||||
run_migration
|
||||
end
|
||||
inlined_jobs { run_migration }
|
||||
end
|
||||
|
||||
it "does not change the remote paths" do
|
||||
photo = FactoryBot.create(:photo, author: old_person)
|
||||
remote_photo_path = photo.remote_photo_path
|
||||
|
||||
run_migration
|
||||
|
||||
expect(photo.reload.remote_photo_path).to eq(remote_photo_path)
|
||||
end
|
||||
end
|
||||
|
||||
shared_examples_for "remote photo migration" do
|
||||
it "changes the remote paths of photos of the old person" do
|
||||
old_photo = FactoryBot.create(:photo, author: old_person)
|
||||
new_photo = FactoryBot.create(:photo, author: new_person)
|
||||
new_remote_photo_path = old_photo.remote_photo_path
|
||||
|
||||
run_migration
|
||||
|
||||
expect(old_photo.reload.remote_photo_path).to eq("https://diaspora.example.tld/uploads/images/")
|
||||
expect(new_photo.reload.remote_photo_path).to eq(new_remote_photo_path)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -210,6 +230,8 @@ describe "account migration" do
|
|||
|
||||
include_examples "migration scenarios initiated remotely"
|
||||
|
||||
include_examples "remote photo migration"
|
||||
|
||||
context "when new person has been migrated before" do
|
||||
let(:intermidiate_person) { create_remote_user("remote-d.net").person }
|
||||
|
||||
|
|
@ -238,6 +260,8 @@ describe "account migration" do
|
|||
|
||||
include_examples "migration scenarios initiated remotely"
|
||||
|
||||
include_examples "remote photo migration"
|
||||
|
||||
it_behaves_like "migration scenarios with local old user"
|
||||
|
||||
it_behaves_like "deletes all of the user data" do
|
||||
|
|
@ -287,9 +311,10 @@ describe "account migration" do
|
|||
|
||||
def run_migration
|
||||
AccountMigration.create!(
|
||||
old_person: old_user.person,
|
||||
new_person: new_user.person,
|
||||
old_private_key: old_user.serialized_private_key
|
||||
old_person: old_user.person,
|
||||
new_person: new_user.person,
|
||||
old_private_key: old_user.serialized_private_key,
|
||||
remote_photo_path: "https://diaspora.example.tld/uploads/images/"
|
||||
).perform!
|
||||
end
|
||||
|
||||
|
|
@ -326,7 +351,9 @@ describe "account migration" do
|
|||
let(:new_person) { new_user.person }
|
||||
|
||||
def run_migration
|
||||
AccountMigration.create!(old_person: old_person, new_person: new_person).perform!
|
||||
AccountMigration.create!(old_person: old_person,
|
||||
new_person: new_person,
|
||||
remote_photo_path: "https://diaspora.example.tld/uploads/images/").perform!
|
||||
end
|
||||
|
||||
include_examples "every migration scenario"
|
||||
|
|
|
|||
|
|
@ -55,7 +55,9 @@ describe "Receive federation messages feature" do
|
|||
it "receives account migration correctly" do
|
||||
run_migration
|
||||
expect(AccountMigration.where(old_person: sender.person, new_person: new_user.person)).to exist
|
||||
expect(AccountMigration.find_by(old_person: sender.person, new_person: new_user.person)).to be_performed
|
||||
account_migration = AccountMigration.find_by(old_person: sender.person, new_person: new_user.person)
|
||||
expect(account_migration).to be_performed
|
||||
expect(account_migration.remote_photo_path).to eq("https://diaspora.example.tld/uploads/images/")
|
||||
end
|
||||
|
||||
it "doesn't run the same migration for the second time" do
|
||||
|
|
|
|||
|
|
@ -16,7 +16,11 @@ describe("app.views.Hovercard", function() {
|
|||
this.view._populateHovercard();
|
||||
jasmine.Ajax.requests.mostRecent().respondWith({
|
||||
status: 200,
|
||||
responseText: JSON.stringify({id: 1337})
|
||||
responseText: JSON.stringify({
|
||||
id: 1337,
|
||||
guid: "ba64fce01b04013aa8db34c93d7886ce",
|
||||
name: "Edward Snowden"
|
||||
})
|
||||
});
|
||||
expect(this.view.aspectMembershipDropdown).toEqual(undefined);
|
||||
});
|
||||
|
|
@ -56,7 +60,11 @@ describe("app.views.Hovercard", function() {
|
|||
this.view._populateHovercard();
|
||||
jasmine.Ajax.requests.mostRecent().respondWith({
|
||||
status: 200,
|
||||
responseText: JSON.stringify({id: 1337})
|
||||
responseText: JSON.stringify({
|
||||
id: 1337,
|
||||
guid: "ba64fce01b04013aa8db34c93d7886ce",
|
||||
name: "Edward Snowden"
|
||||
})
|
||||
});
|
||||
expect(this.view.aspectMembershipDropdown).not.toEqual(undefined);
|
||||
});
|
||||
|
|
@ -65,7 +73,14 @@ describe("app.views.Hovercard", function() {
|
|||
this.view._populateHovercard();
|
||||
jasmine.Ajax.requests.mostRecent().respondWith({
|
||||
status: 200,
|
||||
responseText: JSON.stringify({id: 1337, profile: {tags: ["first", "second"]}})
|
||||
responseText: JSON.stringify({
|
||||
id: 1337,
|
||||
guid: "ba64fce01b04013aa8db34c93d7886ce",
|
||||
name: "Edward Snowden",
|
||||
profile: {
|
||||
tags: ["first", "second"]
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
var first = this.view.hashtags.find("a:contains('#first')");
|
||||
|
|
@ -75,6 +90,36 @@ describe("app.views.Hovercard", function() {
|
|||
expect(first.first()[0].href).toContain(Routes.tag("first"));
|
||||
expect(second.first()[0].href).toContain(Routes.tag("second"));
|
||||
});
|
||||
|
||||
it("indicates when the user is sharing with me", function() {
|
||||
this.view._populateHovercard();
|
||||
jasmine.Ajax.requests.mostRecent().respondWith({
|
||||
status: 200,
|
||||
responseText: JSON.stringify({
|
||||
id: 1337,
|
||||
guid: "ba64fce01b04013aa8db34c93d7886ce",
|
||||
name: "Edward Snowden",
|
||||
relationship: "sharing"
|
||||
})
|
||||
});
|
||||
var message = this.view.$el.find("#sharing_message");
|
||||
expect(message).toHaveClass("entypo-check");
|
||||
});
|
||||
|
||||
it("indicates when the user is not sharing with me", function() {
|
||||
this.view._populateHovercard();
|
||||
jasmine.Ajax.requests.mostRecent().respondWith({
|
||||
status: 200,
|
||||
responseText: JSON.stringify({
|
||||
id: 1337,
|
||||
guid: "ba64fce01b04013aa8db34c93d7886ce",
|
||||
name: "Edward Snowden",
|
||||
relationship: "receiving"
|
||||
})
|
||||
});
|
||||
var message = this.view.$el.find("#sharing_message");
|
||||
expect(message).toHaveClass("entypo-record");
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -17,7 +17,9 @@ describe AccountMigration, type: :model do
|
|||
let(:old_person) { FactoryBot.create(:person) }
|
||||
let(:new_person) { FactoryBot.create(:person) }
|
||||
let(:account_migration) {
|
||||
AccountMigration.create!(old_person: old_person, new_person: new_person)
|
||||
AccountMigration.create!(old_person: old_person,
|
||||
new_person: new_person,
|
||||
remote_photo_path: "https://diaspora.example.tld/uploads/images/")
|
||||
}
|
||||
|
||||
describe "receive" do
|
||||
|
|
@ -129,6 +131,34 @@ describe AccountMigration, type: :model do
|
|||
expect(Diaspora::Federation::Dispatcher).to receive(:defer_dispatch).with(contact.user, contact)
|
||||
account_migration.perform!
|
||||
end
|
||||
|
||||
it "cleans up old local photos" do
|
||||
photo = FactoryBot.create(:photo, author: old_person)
|
||||
photo.processed_image.store!(photo.unprocessed_image)
|
||||
photo.save!
|
||||
|
||||
account_migration.perform!
|
||||
|
||||
updated_photo = photo.reload
|
||||
expect(updated_photo.remote_photo_path).to eq("https://diaspora.example.tld/uploads/images/")
|
||||
expect(updated_photo.processed_image.path).to be_nil
|
||||
expect(updated_photo.unprocessed_image.path).to be_nil
|
||||
end
|
||||
|
||||
it "does nothing if migration doesn't contain a new remote_photo_path" do
|
||||
photo = FactoryBot.create(:photo, author: old_person)
|
||||
photo.processed_image.store!(photo.unprocessed_image)
|
||||
photo.save!
|
||||
|
||||
remote_photo_path = photo.remote_photo_path
|
||||
|
||||
AccountMigration.create!(old_person: old_person, new_person: new_person).perform!
|
||||
|
||||
updated_photo = photo.reload
|
||||
expect(updated_photo.remote_photo_path).to eq(remote_photo_path)
|
||||
expect(updated_photo.processed_image.path).not_to be_nil
|
||||
expect(updated_photo.unprocessed_image.path).not_to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
context "with local new and remote old users" do
|
||||
|
|
|
|||
|
|
@ -13,9 +13,14 @@ describe Export::OthersDataSerializer do
|
|||
serializer.associations
|
||||
end
|
||||
|
||||
context "with user's activity" do
|
||||
before do
|
||||
DataGenerator.new(user).activity
|
||||
it "uses old local user private key if the author was migrated away from the pod" do
|
||||
post = DataGenerator.new(user).status_message_with_activity
|
||||
|
||||
old_comment_author = post.comments.first.author
|
||||
AccountMigration.create!(old_person: old_comment_author, new_person: FactoryBot.create(:person)).perform!
|
||||
|
||||
serializer.associations[:relayables].select {|r| r[:entity_type] == "comment" }.each do |comment|
|
||||
expect(comment[:entity_data][:author]).to eq(old_comment_author.diaspora_handle)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Reference in a new issue