Merge branch 'develop' into api

This commit is contained in:
Jonne Haß 2020-01-14 11:59:56 +01:00
commit 39c863ead9
250 changed files with 2476 additions and 1272 deletions

View file

@ -16,7 +16,6 @@
"Handlebars": false,
"HandlebarsTemplates": false,
"ImagePaths": false,
"jsxc": false,
"L": false,
"OSM": false,
"PerfectScrollbar": false,

5
.gitignore vendored
View file

@ -1,8 +1,3 @@
# XMPP certificates, keys and user data
config/certs/*.crt
config/certs/*.key
config/prosody.cfg.lua
# Trademark sillyness
app/views/home/_show.*
app/views/terms/terms.*

View file

@ -1,3 +1,5 @@
require: rubocop-rails
AllCops:
TargetRubyVersion: 2.3
Exclude:
@ -5,9 +7,6 @@ AllCops:
- "db/schema.rb"
- "config/locales/cldr/plurals.rb"
Rails:
Enabled: true
# Disable for rails 4
Rails/HttpPositionalArguments:
Enabled: false

View file

@ -17,6 +17,16 @@ cache:
- app/assets/images
- tmp/cache/assets
addons:
apt:
packages:
- libidn11-dev
- ghostscript
services:
- postgresql
- mysql
branches:
only:
- 'master'

View file

@ -1,9 +1,17 @@
# 0.8.0.0
## The chat integration has been removed
After [a discussion with our community on Discourse](https://discourse.diasporafoundation.org/t/2718), we decided to remove the pieces of XMPP chat integration that were put in place a while ago. When we first added the chat support, we merged the implementation in an unfinished state in the hopes that the open issues will be addressed eventually, and the implementation would end up more polished. This ended up not being the case. After careful consideration and discussion, we did not manage to come up with clear reasons why we need a chat implementation, so we decided that the best way forward would be to remove it.
Although the chat was never enabled per default and was marked as experimental, some production pods did set up the integration and offered an XMPP service to their users. After this release, diaspora\* will no longer contain a chat applet, so users will no longer be able to use the webchat inside diaspora\*. The existing module that is used to enable users to authenticate to Prosody using their diaspora\* credentials will continue to work, but contact list synchronization might not work without further changes to the Prosody module, which is developed independently from this project.
## Refactor
* Add bootstrapping for using ECMAScript 6 with automatic transpiling for compatibility [#7581](https://github.com/diaspora/diaspora/pull/7581)
* Remove backporting of mention syntax [#7788](https://github.com/diaspora/diaspora/pull/7788)
* Enable Content-Security-Policy header by default [#7781](https://github.com/diaspora/diaspora/pull/7781)
* Do not show getting started after account import [#8036](https://github.com/diaspora/diaspora/pull/8036)
* Remove the JSXC/Prosody integration [#8069](https://github.com/diaspora/diaspora/pull/8069)
## Bug fixes
* Fix multiple photos upload progress bar [#7655](https://github.com/diaspora/diaspora/pull/7655)
@ -13,14 +21,43 @@
* Add client-site rescaling of post images if they exceed the maximum possible size [#7734](https://github.com/diaspora/diaspora/pull/7734)
* Add backend for archive import [#7660](https://github.com/diaspora/diaspora/pull/7660)
# 0.7.13.0
## Refactor
* Set better example values for unicorn stdout/stderr log settings [#8058](https://github.com/diaspora/diaspora/pull/8058)
## Bug fixes
* Fix error while trying to fetch some sites with invalid OpenGraph data [#8049](https://github.com/diaspora/diaspora/pull/8049)
## Features
* Add cronjob to cleanup pending photos which were never posted [#8041](https://github.com/diaspora/diaspora/pull/8041)
# 0.7.12.0
## Refactor
* Harmonize markdown titles sizes [#8029](https://github.com/diaspora/diaspora/pull/8029)
## Bug fixes
* Improve handling of mixed case hostnames while fetching OpenGraph data [#8021](https://github.com/diaspora/diaspora/pull/8021)
* Fix "remember me" with two factor authentication enabled [#8031](https://github.com/diaspora/diaspora/pull/8031)
## Features
* Add line mentioning diaspora\* on the splash page [#7966](https://github.com/diaspora/diaspora/pull/7966)
* Improve communication about signing up on closed pods [#7896](https://github.com/diaspora/diaspora/pull/7896)
# 0.7.11.0
## Refactor
* Enable paranoid mode for devise [#8003](https://github.com/diaspora/diaspora/pull/8003)
* Refactor likes cucumber test [#8002](https://github.com/diaspora/diaspora/pull/8002)
## Bug fixes
* Fix old photos without remote url for export [#8012](https://github.com/diaspora/diaspora/pull/8012)
## Features
* Add a manifest.json file as a first step to make diaspora* a Progressive Web App [#7998](https://github.com/diaspora/diaspora/pull/7998)
* Add a manifest.json file as a first step to make diaspora\* a Progressive Web App [#7998](https://github.com/diaspora/diaspora/pull/7998)
* Allow `web+diaspora://` links to link to a profile with only the diaspora ID [#8000](https://github.com/diaspora/diaspora/pull/8000)
* Support TOTP two factor authentication [#7751](https://github.com/diaspora/diaspora/pull/7751)
# 0.7.10.0

75
Gemfile
View file

@ -2,7 +2,7 @@
source "https://rubygems.org"
gem "rails", "5.1.6.2"
gem "rails", "5.1.7"
# Legacy Rails features, remove me!
# responders (class level)
@ -10,13 +10,13 @@ gem "responders", "2.4.1"
# Appserver
gem "unicorn", "5.5.0", require: false
gem "unicorn", "5.5.1", require: false
gem "unicorn-worker-killer", "0.4.4"
# Federation
gem "diaspora_federation-json_schema", "0.2.5"
gem "diaspora_federation-rails", "0.2.5"
gem "diaspora_federation-json_schema", "0.2.6"
gem "diaspora_federation-rails", "0.2.6"
# API and JSON
@ -28,7 +28,9 @@ gem "yajl-ruby", "1.4.1"
# Authentication
gem "devise", "4.6.1"
gem "devise-two-factor", "3.0.3"
gem "devise_lastseenable", "0.0.6"
gem "rqrcode", "0.10.1"
# Captcha
@ -37,7 +39,7 @@ gem "simple_captcha2", "0.4.3", require: "simple_captcha"
# Background processing
gem "redis", "3.3.5" # Pinned to 3.3.x because of https://github.com/antirez/redis/issues/4272
gem "sidekiq", "5.2.5"
gem "sidekiq", "5.2.7"
# Scheduled processing
@ -53,7 +55,7 @@ gem "configurate", "0.3.1"
# Cross-origin resource sharing
gem "rack-cors", "1.0.2", require: "rack/cors"
gem "rack-cors", "1.0.3", require: "rack/cors"
# CSS
@ -74,12 +76,12 @@ group :postgresql, optional: true do
end
gem "activerecord-import", "1.0.1"
gem "activerecord-import", "1.0.2"
# File uploading
gem "carrierwave", "1.3.1"
gem "fog-aws", "3.4.0"
gem "fog-aws", "3.5.1"
gem "mini_magick", "4.9.3"
# GUID generation
@ -91,14 +93,14 @@ gem "entypo-rails", "3.0.0"
# JavaScript
gem "handlebars_assets", "0.23.3"
gem "jquery-rails", "4.3.3"
gem "js-routes", "1.4.4"
gem "handlebars_assets", "0.23.4"
gem "jquery-rails", "4.3.5"
gem "js-routes", "1.4.7"
gem "js_image_paths", "0.1.1"
gem "sprockets-es6", "0.9.2"
source "https://rails-assets.org" do
gem "rails-assets-jquery", "3.3.1" # Should be kept in sync with jquery-rails
gem "rails-assets-jquery", "3.4.1" # Should be kept in sync with jquery-rails
gem "rails-assets-jquery.ui", "1.11.4"
gem "rails-assets-highlightjs", "9.12.0"
@ -140,12 +142,12 @@ gem "rails-i18n", "5.1.3"
gem "markerb", "1.1.0"
# Map
gem "leaflet-rails", "1.3.1"
gem "leaflet-rails", "1.5.1"
# Parsing
gem "nokogiri", "1.10.1"
gem "open_graph_reader", "0.6.2" # also update User-Agent in features/support/webmock.rb
gem "nokogiri", "1.10.3"
gem "open_graph_reader", "0.7.0" # also update User-Agent in features/support/webmock.rb
gem "redcarpet", "3.4.0"
gem "ruby-oembed", "0.12.0"
gem "twitter-text", "3.0.0"
@ -156,7 +158,7 @@ gem "string-direction", "1.2.1"
# Security Headers
gem "secure_headers", "6.1.0"
gem "secure_headers", "6.1.1"
# Services
@ -167,32 +169,28 @@ gem "omniauth-wordpress", "0.2.2"
gem "twitter", "6.2.0"
# OpenID Connect
gem "openid_connect", "1.1.6"
gem "openid_connect", "1.1.8"
# Serializers
gem "active_model_serializers", "0.9.7"
# XMPP chat dependencies
gem "diaspora-prosody-config", "0.0.7"
gem "rails-assets-diaspora_jsxc", "0.1.5.develop.7", source: "https://rails-assets.org"
# Tags
gem "acts-as-taggable-on", "6.0.0"
# URIs and HTTP
gem "addressable", "2.5.2", require: "addressable/uri"
gem "addressable", "2.6.0", require: "addressable/uri"
gem "faraday", "0.15.4"
gem "faraday_middleware", "0.12.2"
gem "faraday_middleware", "0.13.1"
gem "faraday-cookie_jar", "0.0.6"
gem "typhoeus", "1.3.1"
# Views
gem "gon", "6.2.1"
gem "hamlit", "2.9.2"
gem "hamlit", "2.9.3"
gem "mobile-fu", "1.4.0"
gem "rails-timeago", "2.17.1"
gem "will_paginate", "3.1.7"
@ -212,7 +210,7 @@ gem "rubyzip", "1.2.2", require: "zip"
# https://github.com/discourse/discourse/pull/238
gem "minitest"
gem "versionist", "1.7.0"
gem "versionist", "2.0.0"
# Windows and OSX have an execjs compatible runtime built-in, Linux users should
# install Node.js or use "therubyracer".
@ -251,12 +249,13 @@ group :development do
# Linters
gem "haml_lint", "0.28.0", require: false
gem "pronto", "0.9.5", require: false
gem "pronto-eslint", "0.9.1", require: false
gem "pronto-haml", "0.9.0", require: false
gem "pronto-rubocop", "0.9.1", require: false
gem "pronto-scss", "0.9.1", require: false
gem "rubocop", "0.66.0", require: false
gem "pronto", "0.10.0", require: false
gem "pronto-eslint", "0.10.0", require: false
gem "pronto-haml", "0.10.0", require: false
gem "pronto-rubocop", "0.10.0", require: false
gem "pronto-scss", "0.10.0", require: false
gem "rubocop", "0.72.0", require: false
gem "rubocop-rails", "2.1.0", require: false
# Preloading environment
@ -278,7 +277,7 @@ group :test do
# RSpec (unit tests, some integration tests)
gem "fixture_builder", "0.5.2.rc3"
gem "fuubar", "2.3.2"
gem "fuubar", "2.4.1"
gem "json-schema-rspec", "0.0.4"
gem "rspec-json_expectations", "~> 2.1"
@ -295,12 +294,12 @@ group :test do
gem "factory_girl_rails", "4.8.0"
gem "shoulda-matchers", "4.0.1"
gem "timecop", "0.9.1"
gem "webmock", "3.5.1", require: false
gem "webmock", "3.6.0", require: false
gem "diaspora_federation-test", "0.2.5"
gem "diaspora_federation-test", "0.2.6"
# Coverage
gem "coveralls", "0.8.22", require: false
gem "coveralls", "0.8.23", require: false
end
group :development, :test do
@ -308,12 +307,12 @@ group :development, :test do
gem "rspec-rails", "3.8.2"
# Cucumber (integration tests)
gem "cucumber-rails", "1.6.0", require: false
gem "cucumber-rails", "1.7.0", require: false
# Jasmine (client side application tests (JS))
gem "jasmine", "3.3.0"
gem "jasmine", "3.4.0"
gem "jasmine-jquery-rails", "2.0.3"
gem "rails-assets-jasmine-ajax", "3.4.0", source: "https://rails-assets.org"
gem "rails-assets-jasmine-ajax", "4.0.0", source: "https://rails-assets.org"
gem "sinon-rails", "1.15.0"
# For `assigns` in controller specs

View file

@ -2,25 +2,25 @@ GEM
remote: https://rubygems.org/
remote: https://rails-assets.org/
specs:
actioncable (5.1.6.2)
actionpack (= 5.1.6.2)
actioncable (5.1.7)
actionpack (= 5.1.7)
nio4r (~> 2.0)
websocket-driver (~> 0.6.1)
actionmailer (5.1.6.2)
actionpack (= 5.1.6.2)
actionview (= 5.1.6.2)
activejob (= 5.1.6.2)
actionmailer (5.1.7)
actionpack (= 5.1.7)
actionview (= 5.1.7)
activejob (= 5.1.7)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0)
actionpack (5.1.6.2)
actionview (= 5.1.6.2)
activesupport (= 5.1.6.2)
actionpack (5.1.7)
actionview (= 5.1.7)
activesupport (= 5.1.7)
rack (~> 2.0)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
actionview (5.1.6.2)
activesupport (= 5.1.6.2)
actionview (5.1.7)
activesupport (= 5.1.7)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
@ -28,18 +28,18 @@ GEM
active_model_serializers (0.9.7)
activemodel (>= 3.2)
concurrent-ruby (~> 1.0)
activejob (5.1.6.2)
activesupport (= 5.1.6.2)
activejob (5.1.7)
activesupport (= 5.1.7)
globalid (>= 0.3.6)
activemodel (5.1.6.2)
activesupport (= 5.1.6.2)
activerecord (5.1.6.2)
activemodel (= 5.1.6.2)
activesupport (= 5.1.6.2)
activemodel (5.1.7)
activesupport (= 5.1.7)
activerecord (5.1.7)
activemodel (= 5.1.7)
activesupport (= 5.1.7)
arel (~> 8.0)
activerecord-import (1.0.1)
activerecord-import (1.0.2)
activerecord (>= 3.2)
activesupport (5.1.6.2)
activesupport (5.1.7)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
minitest (~> 5.1)
@ -50,7 +50,7 @@ GEM
activemodel (>= 3.0.0)
activesupport (>= 3.0.0)
rack (>= 1.1.0)
addressable (2.5.2)
addressable (2.6.0)
public_suffix (>= 2.0.2, < 4.0)
aes_key_wrap (1.0.1)
arel (8.0.0)
@ -60,6 +60,8 @@ GEM
mime-types (>= 2.99)
unf
ast (2.4.0)
attr_encrypted (3.1.0)
encryptor (~> 3.0.0)
attr_required (1.0.1)
autoprefixer-rails (8.6.5)
execjs
@ -67,8 +69,8 @@ GEM
babel-transpiler (0.7.0)
babel-source (>= 4.0, < 6)
execjs (~> 2.0)
backports (3.12.0)
bcrypt (3.1.12)
backports (3.15.0)
bcrypt (3.1.13)
bindata (2.4.4)
bootstrap-sass (3.4.1)
autoprefixer-rails (>= 5.2.1)
@ -132,11 +134,11 @@ GEM
concurrent-ruby (1.1.5)
configurate (0.3.1)
connection_pool (2.2.2)
coveralls (0.8.22)
coveralls (0.8.23)
json (>= 1.8, < 3)
simplecov (~> 0.16.1)
term-ansicolor (~> 1.3)
thor (~> 0.19.4)
thor (>= 0.19.4, < 2.0)
tins (~> 1.6)
crack (0.4.3)
safe_yaml (~> 1.0.0)
@ -158,12 +160,12 @@ GEM
cucumber-tag_expressions (~> 1.1.0)
gherkin (~> 5.0)
cucumber-expressions (6.0.1)
cucumber-rails (1.6.0)
capybara (>= 1.1.2, < 4)
cucumber-rails (1.7.0)
capybara (>= 2.3.0, < 4)
cucumber (>= 3.0.2, < 4)
mime-types (>= 1.17, < 4)
nokogiri (~> 1.8)
railties (>= 4, < 6)
railties (>= 4.2, < 7)
cucumber-tag_expressions (1.1.1)
cucumber-wire (0.0.1)
database_cleaner (1.7.0)
@ -173,28 +175,34 @@ GEM
railties (>= 4.1.0, < 6.0)
responders
warden (~> 1.2.3)
devise-two-factor (3.0.3)
activesupport (< 5.3)
attr_encrypted (>= 1.3, < 4, != 2)
devise (~> 4.0)
railties (< 5.3)
rotp (~> 2.0)
devise_lastseenable (0.0.6)
devise
rails (>= 3.0.4)
diaspora-prosody-config (0.0.7)
diaspora_federation (0.2.5)
diaspora_federation (0.2.6)
faraday (>= 0.9.0, < 0.16.0)
faraday_middleware (>= 0.10.0, < 0.13.0)
faraday_middleware (>= 0.10.0, < 0.14.0)
nokogiri (~> 1.6, >= 1.6.8)
typhoeus (~> 1.0)
valid (~> 1.0)
diaspora_federation-json_schema (0.2.5)
diaspora_federation-rails (0.2.5)
diaspora_federation-json_schema (0.2.6)
diaspora_federation-rails (0.2.6)
actionpack (>= 4.2, < 6)
diaspora_federation (= 0.2.5)
diaspora_federation-test (0.2.5)
diaspora_federation (= 0.2.5)
diaspora_federation (= 0.2.6)
diaspora_federation-test (0.2.6)
diaspora_federation (= 0.2.6)
fabrication (~> 2.16)
uuid (~> 2.3, >= 2.3.8)
diff-lcs (1.3)
docile (1.3.1)
docile (1.3.2)
domain_name (0.5.20180417)
unf (>= 0.0.5, < 1.0.0)
encryptor (3.0.0)
entypo-rails (3.0.0)
railties (>= 4.1, < 6)
equalizer (0.0.11)
@ -203,11 +211,11 @@ GEM
execjs
multi_json (>= 1.3)
rake
et-orbi (1.1.7)
et-orbi (1.2.1)
tzinfo
ethon (0.12.0)
ffi (>= 1.3.0)
excon (0.62.0)
excon (0.64.0)
execjs (2.7.0)
eye (0.10.0)
celluloid (~> 0.17.3)
@ -215,7 +223,7 @@ GEM
kostya-sigar (~> 2.0.0)
state_machines
thor
fabrication (2.20.1)
fabrication (2.20.2)
factory_girl (4.8.0)
activesupport (>= 3.0.0)
factory_girl_rails (4.8.0)
@ -226,14 +234,14 @@ GEM
faraday-cookie_jar (0.0.6)
faraday (>= 0.7.4)
http-cookie (~> 1.0.0)
faraday_middleware (0.12.2)
faraday_middleware (0.13.1)
faraday (>= 0.7.4, < 1.0)
ffi (1.10.0)
ffi (1.11.1)
fixture_builder (0.5.2.rc3)
activerecord (>= 2)
activesupport (>= 2)
hashdiff
fog-aws (3.4.0)
fog-aws (3.5.1)
fog-core (~> 2.1)
fog-json (~> 1.1)
fog-xml (~> 0.1)
@ -250,15 +258,15 @@ GEM
fog-core
nokogiri (>= 1.5.11, < 2.0.0)
formatador (0.2.5)
fugit (1.1.8)
et-orbi (~> 1.1, >= 1.1.7)
fugit (1.2.2)
et-orbi (~> 1.1, >= 1.1.8)
raabro (~> 1.1)
fuubar (2.3.2)
fuubar (2.4.1)
rspec-core (~> 3.0)
ruby-progressbar (~> 1.4)
get_process_mem (0.2.3)
gherkin (5.1.0)
gitlab (4.10.0)
gitlab (4.11.0)
httparty (~> 0.14, >= 0.14.0)
terminal-table (~> 1.5, >= 1.5.1)
globalid (0.4.2)
@ -293,15 +301,15 @@ GEM
rake (>= 10, < 13)
rubocop (>= 0.50.0)
sysexits (~> 1.1)
hamlit (2.9.2)
hamlit (2.9.3)
temple (>= 0.8.0)
thor
tilt
handlebars_assets (0.23.3)
handlebars_assets (0.23.4)
execjs (~> 2.0)
sprockets (>= 2.0.0)
tilt (>= 1.2)
hashdiff (0.3.8)
hashdiff (0.4.0)
hashie (3.6.0)
http (3.3.0)
addressable (~> 2.3)
@ -313,7 +321,7 @@ GEM
http-form_data (2.1.1)
http_accept_language (2.1.1)
http_parser.rb (0.6.0)
httparty (0.16.4)
httparty (0.17.0)
mime-types (~> 3.0)
multi_xml (>= 0.5.2)
httpclient (2.8.3)
@ -327,26 +335,26 @@ GEM
railties (>= 3.0.0)
idn-ruby (0.1.0)
ipaddress (0.8.3)
jaro_winkler (1.5.2)
jasmine (3.3.0)
jasmine-core (~> 3.3.0)
jaro_winkler (1.5.3)
jasmine (3.4.0)
jasmine-core (~> 3.4.0)
phantomjs
rack (>= 1.2.1)
rake
jasmine-core (3.3.0)
jasmine-core (3.4.0)
jasmine-jquery-rails (2.0.3)
jquery-rails (4.3.3)
jquery-rails (4.3.5)
rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
js-routes (1.4.4)
railties (>= 3.2)
js-routes (1.4.7)
railties (>= 4)
sprockets-rails
js_image_paths (0.1.1)
rails (>= 4.0, < 6.0)
sprockets (>= 3.0.0)
json (2.2.0)
json-jwt (1.10.0)
json-jwt (1.10.2)
activesupport (>= 4.2)
aes_key_wrap
bindata
@ -355,13 +363,13 @@ GEM
json-schema-rspec (0.0.4)
json-schema (~> 2.5)
rspec
jsonpath (1.0.1)
jsonpath (1.0.4)
multi_json
to_regexp (~> 0.2.1)
jwt (2.1.0)
jwt (2.2.1)
kgio (2.11.2)
kostya-sigar (2.0.6)
leaflet-rails (1.3.1)
leaflet-rails (1.5.1)
rails (>= 4.2.0)
listen (3.1.5)
rb-fsevent (~> 0.9, >= 0.9.4)
@ -377,8 +385,8 @@ GEM
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
lumberjack (1.0.13)
macaddr (1.7.1)
systemu (~> 2.6.2)
macaddr (1.7.2)
systemu (~> 2.6.5)
mail (2.7.1)
mini_mime (>= 0.1.1)
markdown-it-html5-embed (1.0.0)
@ -388,7 +396,7 @@ GEM
method_source (0.9.2)
mime-types (3.2.2)
mime-types-data (~> 3.2015)
mime-types-data (3.2018.0812)
mime-types-data (3.2019.0331)
mini_magick (4.9.3)
mini_mime (1.0.1)
mini_portile2 (2.4.0)
@ -399,12 +407,12 @@ GEM
multi_json (1.13.1)
multi_test (0.1.2)
multi_xml (0.6.0)
multipart-post (2.0.0)
multipart-post (2.1.1)
mysql2 (0.5.2)
naught (1.1.0)
nenv (0.3.0)
nio4r (2.3.1)
nokogiri (1.10.1)
nokogiri (1.10.3)
mini_portile2 (~> 2.4.0)
notiffany (0.1.1)
nenv (~> 0.1)
@ -416,7 +424,7 @@ GEM
multi_json (~> 1.3)
multi_xml (~> 0.5)
rack (>= 1.2, < 3)
octokit (4.13.0)
octokit (4.14.0)
sawyer (~> 0.8.0, >= 0.5.3)
omniauth (1.9.0)
hashie (>= 3.4.6, < 3.7.0)
@ -435,10 +443,10 @@ GEM
rack
omniauth-wordpress (0.2.2)
omniauth-oauth2 (>= 1.1.0)
open_graph_reader (0.6.2)
open_graph_reader (0.7.0)
faraday (>= 0.9.0)
nokogiri (~> 1.6)
openid_connect (1.1.6)
openid_connect (1.1.8)
activemodel
attr_required (>= 1.0.0)
json-jwt (>= 1.5.0)
@ -449,8 +457,8 @@ GEM
validate_url
webfinger (>= 1.0.1)
orm_adapter (0.5.0)
parallel (1.14.0)
parser (2.6.2.0)
parallel (1.17.0)
parser (2.6.3.0)
ast (~> 2.4.0)
pg (1.1.4)
phantomjs (2.1.1.0)
@ -458,24 +466,24 @@ GEM
capybara (>= 2.1, < 4)
cliver (~> 0.3.1)
websocket-driver (>= 0.2.0)
pronto (0.9.5)
pronto (0.10.0)
gitlab (~> 4.0, >= 4.0.0)
httparty (>= 0.13.7)
octokit (~> 4.7, >= 4.7.0)
rainbow (~> 2.1)
rainbow (>= 2.2, < 4.0)
rugged (~> 0.24, >= 0.23.0)
thor (~> 0.19.0)
pronto-eslint (0.9.1)
thor (~> 0.20.0)
pronto-eslint (0.10.0)
eslintrb (~> 2.0, >= 2.0.0)
pronto (~> 0.9.0)
pronto-haml (0.9.0)
pronto (~> 0.10.0)
pronto-haml (0.10.0)
haml_lint (~> 0.23)
pronto (~> 0.9.0)
pronto-rubocop (0.9.1)
pronto (~> 0.9.0)
pronto (~> 0.10.0)
pronto-rubocop (0.10.0)
pronto (~> 0.10.0)
rubocop (~> 0.50, >= 0.49.1)
pronto-scss (0.9.1)
pronto (~> 0.9.0)
pronto-scss (0.10.0)
pronto (~> 0.10.0)
scss_lint (~> 0.43, >= 0.43.0)
pry (0.12.2)
coderay (~> 1.1.0)
@ -483,17 +491,16 @@ GEM
pry-byebug (3.7.0)
byebug (~> 11.0)
pry (~> 0.10)
psych (3.1.0)
public_suffix (3.0.3)
public_suffix (3.1.1)
raabro (1.1.6)
rack (2.0.6)
rack-cors (1.0.2)
rack (2.0.7)
rack-cors (1.0.3)
rack-google-analytics (1.2.0)
actionpack
activesupport
rack-mobile-detect (0.4.0)
rack
rack-oauth2 (1.9.3)
rack-oauth2 (1.10.0)
activesupport
attr_required
httpclient
@ -507,54 +514,41 @@ GEM
rack
rack-test (1.1.0)
rack (>= 1.0, < 3)
rails (5.1.6.2)
actioncable (= 5.1.6.2)
actionmailer (= 5.1.6.2)
actionpack (= 5.1.6.2)
actionview (= 5.1.6.2)
activejob (= 5.1.6.2)
activemodel (= 5.1.6.2)
activerecord (= 5.1.6.2)
activesupport (= 5.1.6.2)
rails (5.1.7)
actioncable (= 5.1.7)
actionmailer (= 5.1.7)
actionpack (= 5.1.7)
actionview (= 5.1.7)
activejob (= 5.1.7)
activemodel (= 5.1.7)
activerecord (= 5.1.7)
activesupport (= 5.1.7)
bundler (>= 1.3.0)
railties (= 5.1.6.2)
railties (= 5.1.7)
sprockets-rails (>= 2.0.0)
rails-assets-autosize (4.0.2)
rails-assets-backbone (1.3.3)
rails-assets-underscore (>= 1.8.3)
rails-assets-blueimp-gallery (2.33.0)
rails-assets-bootstrap (3.3.7)
rails-assets-bootstrap (3.4.1)
rails-assets-jquery (>= 1.9.1, < 4)
rails-assets-bootstrap-markdown (2.10.0)
rails-assets-bootstrap (~> 3)
rails-assets-corejs-typeahead (1.2.1)
rails-assets-jquery (>= 1.11)
rails-assets-cropperjs (1.4.3)
rails-assets-diaspora_jsxc (0.1.5.develop.7)
rails-assets-emojione (~> 2.0.1)
rails-assets-favico.js (>= 0.3.10, < 0.4)
rails-assets-jquery-colorbox (~> 1.6.3)
rails-assets-jquery-fullscreen-plugin (~> 0.5.0)
rails-assets-jquery.slimscroll (~> 1.3.6)
rails-assets-jquery.ui (~> 1.11.4)
rails-assets-emojione (2.0.1)
rails-assets-favico.js (0.3.10)
rails-assets-fine-uploader (5.13.0)
rails-assets-highlightjs (9.12.0)
rails-assets-jasmine (3.3.0)
rails-assets-jasmine-ajax (3.4.0)
rails-assets-jasmine (3.4.0)
rails-assets-jasmine-ajax (4.0.0)
rails-assets-jasmine (~> 3)
rails-assets-jquery (3.3.1)
rails-assets-jquery-colorbox (1.6.4)
rails-assets-jquery (>= 1.3.2)
rails-assets-jquery-fullscreen-plugin (0.5.0)
rails-assets-jquery (3.4.1)
rails-assets-jquery-placeholder (2.3.1)
rails-assets-jquery (>= 1.6)
rails-assets-jquery-textchange (0.2.3)
rails-assets-jquery
rails-assets-jquery.are-you-sure (1.9.0)
rails-assets-jquery (>= 1.4.2)
rails-assets-jquery.slimscroll (1.3.8)
rails-assets-jquery.ui (1.11.4)
rails-assets-jquery (>= 1.6)
rails-assets-markdown-it--markdown-it-for-inline (0.1.1)
@ -582,14 +576,13 @@ GEM
rails-timeago (2.17.1)
actionpack (>= 3.1)
activesupport (>= 3.1)
railties (5.1.6.2)
actionpack (= 5.1.6.2)
activesupport (= 5.1.6.2)
railties (5.1.7)
actionpack (= 5.1.7)
activesupport (= 5.1.7)
method_source
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
rainbow (2.2.2)
rake
rainbow (3.0.0)
raindrops (0.19.0)
rake (12.3.2)
rb-fsevent (0.10.3)
@ -597,23 +590,26 @@ GEM
ffi (~> 1.0)
redcarpet (3.4.0)
redis (3.3.5)
regexp_parser (1.3.0)
regexp_parser (1.5.1)
request_store (1.4.1)
rack (>= 1.4)
responders (2.4.1)
actionpack (>= 4.2.0, < 6.0)
railties (>= 4.2.0, < 6.0)
rotp (2.1.2)
rqrcode (0.10.1)
chunky_png (~> 1.0)
rspec (3.8.0)
rspec-core (~> 3.8.0)
rspec-expectations (~> 3.8.0)
rspec-mocks (~> 3.8.0)
rspec-core (3.8.0)
rspec-core (3.8.2)
rspec-support (~> 3.8.0)
rspec-expectations (3.8.2)
rspec-expectations (3.8.4)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.8.0)
rspec-json_expectations (2.1.0)
rspec-mocks (3.8.0)
rspec-json_expectations (2.2.0)
rspec-mocks (3.8.1)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.8.0)
rspec-rails (3.8.2)
@ -624,20 +620,22 @@ GEM
rspec-expectations (~> 3.8.0)
rspec-mocks (~> 3.8.0)
rspec-support (~> 3.8.0)
rspec-support (3.8.0)
rubocop (0.66.0)
rspec-support (3.8.2)
rubocop (0.72.0)
jaro_winkler (~> 1.5.1)
parallel (~> 1.10)
parser (>= 2.5, != 2.5.1.1)
psych (>= 3.1.0)
parser (>= 2.6)
rainbow (>= 2.2.2, < 4.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 1.6)
unicode-display_width (>= 1.4.0, < 1.7)
rubocop-rails (2.1.0)
rack (>= 1.1)
rubocop (>= 0.72.0)
ruby-oembed (0.12.0)
ruby-progressbar (1.10.0)
ruby-progressbar (1.10.1)
ruby_dep (1.5.0)
rubyzip (1.2.2)
rugged (0.28.1)
rugged (0.28.2)
safe_yaml (1.0.5)
sass (3.4.25)
sass-rails (5.0.7)
@ -649,17 +647,17 @@ GEM
sassc (2.0.1)
ffi (~> 1.9)
rake
sawyer (0.8.1)
addressable (>= 2.3.5, < 2.6)
faraday (~> 0.8, < 1.0)
sawyer (0.8.2)
addressable (>= 2.3.5)
faraday (> 0.8, < 2.0)
scss_lint (0.55.0)
rake (>= 0.9, < 13)
sass (~> 3.4.20)
secure_headers (6.1.0)
secure_headers (6.1.1)
shellany (0.0.1)
shoulda-matchers (4.0.1)
activesupport (>= 4.2.0)
sidekiq (5.2.5)
sidekiq (5.2.7)
connection_pool (~> 2.2, >= 2.2.2)
rack (>= 1.5.0)
rack-protection (>= 1.5.0)
@ -707,12 +705,12 @@ GEM
tins (~> 1.0)
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
thor (0.19.4)
thor (0.20.3)
thread_safe (0.3.6)
tilt (2.0.9)
timecop (0.9.1)
timers (4.3.0)
tins (1.20.2)
tins (1.20.3)
to_regexp (0.2.1)
turbo_dev_assets (0.0.2)
twitter (6.2.0)
@ -737,9 +735,9 @@ GEM
execjs (>= 0.3.0, < 3)
unf (0.1.4)
unf_ext
unf_ext (0.0.7.5)
unicode-display_width (1.5.0)
unicorn (5.5.0)
unf_ext (0.0.7.6)
unicode-display_width (1.6.0)
unicorn (5.5.1)
kgio (~> 2.6)
raindrops (~> 0.7)
unicorn-worker-killer (0.4.4)
@ -751,10 +749,10 @@ GEM
validate_email (0.1.6)
activemodel (>= 3.0)
mail (>= 2.2.5)
validate_url (1.0.6)
validate_url (1.0.8)
activemodel (>= 3.0.0)
public_suffix
versionist (1.7.0)
versionist (2.0.0)
activesupport (>= 3)
railties (>= 3)
yard (~> 0.9.11)
@ -763,28 +761,28 @@ GEM
webfinger (1.1.0)
activesupport
httpclient (>= 2.4)
webmock (3.5.1)
webmock (3.6.0)
addressable (>= 2.3.6)
crack (>= 0.3.2)
hashdiff
hashdiff (>= 0.4.0, < 2.0.0)
websocket-driver (0.6.5)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.3)
websocket-extensions (0.1.4)
will_paginate (3.1.7)
xpath (3.2.0)
nokogiri (~> 1.8)
yajl-ruby (1.4.1)
yard (0.9.18)
yard (0.9.20)
PLATFORMS
ruby
DEPENDENCIES
active_model_serializers (= 0.9.7)
activerecord-import (= 1.0.1)
activerecord-import (= 1.0.2)
acts-as-taggable-on (= 6.0.0)
acts_as_api (= 1.0.1)
addressable (= 2.5.2)
addressable (= 2.6.0)
asset_sync (= 2.7.0)
autoprefixer-rails (= 8.6.5)
bootstrap-sass (= 3.4.1)
@ -793,43 +791,43 @@ DEPENDENCIES
carrierwave (= 1.3.1)
compass-rails (= 3.1.0)
configurate (= 0.3.1)
coveralls (= 0.8.22)
coveralls (= 0.8.23)
cucumber-api-steps (= 0.14)
cucumber-rails (= 1.6.0)
cucumber-rails (= 1.7.0)
database_cleaner (= 1.7.0)
devise (= 4.6.1)
devise-two-factor (= 3.0.3)
devise_lastseenable (= 0.0.6)
diaspora-prosody-config (= 0.0.7)
diaspora_federation-json_schema (= 0.2.5)
diaspora_federation-rails (= 0.2.5)
diaspora_federation-test (= 0.2.5)
diaspora_federation-json_schema (= 0.2.6)
diaspora_federation-rails (= 0.2.6)
diaspora_federation-test (= 0.2.6)
entypo-rails (= 3.0.0)
eye (= 0.10.0)
factory_girl_rails (= 4.8.0)
faraday (= 0.15.4)
faraday-cookie_jar (= 0.0.6)
faraday_middleware (= 0.12.2)
faraday_middleware (= 0.13.1)
fixture_builder (= 0.5.2.rc3)
fog-aws (= 3.4.0)
fuubar (= 2.3.2)
fog-aws (= 3.5.1)
fuubar (= 2.4.1)
gon (= 6.2.1)
guard (= 2.15.0)
guard-rspec (= 4.7.3)
guard-rubocop (= 1.3.0)
haml_lint (= 0.28.0)
hamlit (= 2.9.2)
handlebars_assets (= 0.23.3)
hamlit (= 2.9.3)
handlebars_assets (= 0.23.4)
http_accept_language (= 2.1.1)
i18n-inflector-rails (= 1.0.7)
jasmine (= 3.3.0)
jasmine (= 3.4.0)
jasmine-jquery-rails (= 2.0.3)
jquery-rails (= 4.3.3)
js-routes (= 1.4.4)
jquery-rails (= 4.3.5)
js-routes (= 1.4.7)
js_image_paths (= 0.1.1)
json (= 2.2.0)
json-schema (= 2.8.1)
json-schema-rspec (= 0.0.4)
leaflet-rails (= 1.3.1)
leaflet-rails (= 1.5.1)
logging-rails (= 0.6.0)
markdown-it-html5-embed (= 1.0.0)
markerb (= 1.1.0)
@ -837,39 +835,38 @@ DEPENDENCIES
minitest
mobile-fu (= 1.4.0)
mysql2 (= 0.5.2)
nokogiri (= 1.10.1)
nokogiri (= 1.10.3)
omniauth (= 1.9.0)
omniauth-tumblr (= 1.2)
omniauth-twitter (= 1.4.0)
omniauth-wordpress (= 0.2.2)
open_graph_reader (= 0.6.2)
openid_connect (= 1.1.6)
open_graph_reader (= 0.7.0)
openid_connect (= 1.1.8)
pg (= 1.1.4)
poltergeist (= 1.18.1)
pronto (= 0.9.5)
pronto-eslint (= 0.9.1)
pronto-haml (= 0.9.0)
pronto-rubocop (= 0.9.1)
pronto-scss (= 0.9.1)
pronto (= 0.10.0)
pronto-eslint (= 0.10.0)
pronto-haml (= 0.10.0)
pronto-rubocop (= 0.10.0)
pronto-scss (= 0.10.0)
pry
pry-byebug
rack-cors (= 1.0.2)
rack-cors (= 1.0.3)
rack-google-analytics (= 1.2.0)
rack-piwik (= 0.3.0)
rack-rewrite (= 1.5.1)
rack-ssl (= 1.4.1)
rails (= 5.1.6.2)
rails (= 5.1.7)
rails-assets-autosize (= 4.0.2)!
rails-assets-backbone (= 1.3.3)!
rails-assets-blueimp-gallery (= 2.33.0)!
rails-assets-bootstrap-markdown (= 2.10.0)!
rails-assets-corejs-typeahead (= 1.2.1)!
rails-assets-cropperjs (= 1.4.3)!
rails-assets-diaspora_jsxc (= 0.1.5.develop.7)!
rails-assets-fine-uploader (= 5.13.0)!
rails-assets-highlightjs (= 9.12.0)!
rails-assets-jasmine-ajax (= 3.4.0)!
rails-assets-jquery (= 3.3.1)!
rails-assets-jasmine-ajax (= 4.0.0)!
rails-assets-jquery (= 3.4.1)!
rails-assets-jquery-placeholder (= 2.3.1)!
rails-assets-jquery-textchange (= 0.2.3)!
rails-assets-jquery.are-you-sure (= 1.9.0)!
@ -891,15 +888,17 @@ DEPENDENCIES
redcarpet (= 3.4.0)
redis (= 3.3.5)
responders (= 2.4.1)
rqrcode (= 0.10.1)
rspec-json_expectations (~> 2.1)
rspec-rails (= 3.8.2)
rubocop (= 0.66.0)
rubocop (= 0.72.0)
rubocop-rails (= 2.1.0)
ruby-oembed (= 0.12.0)
rubyzip (= 1.2.2)
sass-rails (= 5.0.7)
secure_headers (= 6.1.0)
secure_headers (= 6.1.1)
shoulda-matchers (= 4.0.1)
sidekiq (= 5.2.5)
sidekiq (= 5.2.7)
sidekiq-cron (= 1.1.0)
simple_captcha2 (= 0.4.3)
simplecov (= 0.16.1)
@ -916,11 +915,11 @@ DEPENDENCIES
twitter-text (= 3.0.0)
typhoeus (= 1.3.1)
uglifier (= 4.1.20)
unicorn (= 5.5.0)
unicorn (= 5.5.1)
unicorn-worker-killer (= 0.4.4)
uuid (= 2.3.9)
versionist (= 1.7.0)
webmock (= 3.5.1)
versionist (= 2.0.0)
webmock (= 3.6.0)
will_paginate (= 3.1.7)
yajl-ruby (= 1.4.1)

View file

@ -2,7 +2,6 @@
//= link jquery3.js
//= link jquery_ujs.js
//= link main.js
//= link jsxc.js
//= link bookmarklet.js
//= link mobile/bookmarklet.js
//= link mobile/mobile.js

View file

@ -5,14 +5,12 @@ app.pages.Contacts = Backbone.View.extend({
el: "#contacts_container",
events: {
"click #chat_privilege_toggle" : "toggleChatPrivilege",
"click #change_aspect_name" : "showAspectNameForm",
"click .conversation_button": "showMessageModal",
"click .invitations-button": "showInvitationsModal"
},
initialize: function(opts) {
this.chatToggle = $("#chat_privilege_toggle i");
this.stream = opts.stream;
this.stream.render();
$("#people-stream.contacts .header i").tooltip({"placement": "bottom"});
@ -27,22 +25,6 @@ app.pages.Contacts = Backbone.View.extend({
this.setupAspectSorting();
},
toggleChatPrivilege: function() {
if (this.chatToggle.hasClass("enabled")) {
this.chatToggle.tooltip("destroy")
.removeClass("enabled")
.removeAttr("data-original-title")
.attr("title", Diaspora.I18n.t("contacts.aspect_chat_is_not_enabled"))
.tooltip({"placement": "bottom"});
} else {
this.chatToggle.tooltip("destroy")
.addClass("enabled")
.removeAttr("data-original-title")
.attr("title", Diaspora.I18n.t("contacts.aspect_chat_is_enabled"))
.tooltip({"placement": "bottom"});
}
},
showAspectNameForm: function() {
$(".header > h3").hide();
var aspectName = $.trim($(".header h3 #aspect_name").text());

View file

@ -9,8 +9,7 @@ app.views.Help = app.views.StaticContentView.extend({
"click .faq-link-sharing": "sharing",
"click .faq-link-posts-and-posting": "postsAndPosting",
"click .faq-link-tags": "tags",
"click .faq-link-keyboard-shortcuts": "keyboardShortcuts",
"click .faq-link-chat": "chat"
"click .faq-link-keyboard-shortcuts": "keyboardShortcuts"
},
initialize : function() {
@ -39,31 +38,22 @@ app.views.Help = app.views.StaticContentView.extend({
}
};
this.CHAT_SUBS = {
add_contact_roster_a: {
toggle_privilege: this.getChatIcons(),
contacts_page: this.linkHtml(Routes.contacts(), Diaspora.I18n.t("chat.contacts_page"))
}
};
this.data = {
title_header: Diaspora.I18n.t( 'title_header' ),
title_getting_help: Diaspora.I18n.t( 'getting_help.title' ),
title_account_and_data_management: Diaspora.I18n.t( 'account_and_data_management.title' ),
title_aspects: Diaspora.I18n.t( 'aspects.title' ),
title_mentions: Diaspora.I18n.t( 'mentions.title' ),
title_pods: Diaspora.I18n.t( 'pods.title' ),
title_posts_and_posting: Diaspora.I18n.t( 'posts_and_posting.title' ),
title_private_posts: Diaspora.I18n.t( 'private_posts.title' ),
title_public_posts: Diaspora.I18n.t( 'public_posts.title' ),
title_resharing_posts: Diaspora.I18n.t( 'resharing_posts.title' ),
title_header: Diaspora.I18n.t("title_header"),
title_getting_help: Diaspora.I18n.t("getting_help.title"),
title_account_and_data_management: Diaspora.I18n.t("account_and_data_management.title"),
title_aspects: Diaspora.I18n.t("aspects.title"),
title_mentions: Diaspora.I18n.t("mentions.title"),
title_pods: Diaspora.I18n.t("pods.title"),
title_posts_and_posting: Diaspora.I18n.t("posts_and_posting.title"),
title_private_posts: Diaspora.I18n.t("private_posts.title"),
title_public_posts: Diaspora.I18n.t("public_posts.title"),
title_resharing_posts: Diaspora.I18n.t("resharing_posts.title"),
title_profile: Diaspora.I18n.t("profile.title"),
title_sharing: Diaspora.I18n.t( 'sharing.title' ),
title_tags: Diaspora.I18n.t( 'tags.title' ),
title_keyboard_shortcuts: Diaspora.I18n.t( 'keyboard_shortcuts.title' ),
title_miscellaneous: Diaspora.I18n.t( 'miscellaneous.title' ),
title_chat: Diaspora.I18n.t( 'chat.title' ),
chat_enabled: this.chatEnabled()
title_sharing: Diaspora.I18n.t("sharing.title"),
title_tags: Diaspora.I18n.t("tags.title"),
title_keyboard_shortcuts: Diaspora.I18n.t("keyboard_shortcuts.title"),
title_miscellaneous: Diaspora.I18n.t("miscellaneous.title")
};
return this;
@ -199,27 +189,8 @@ app.views.Help = app.views.StaticContentView.extend({
e.preventDefault();
},
chat: function(e){
this.renderStaticSection("chat", "faq_chat", this.CHAT_SUBS);
this.menuClicked(e);
e.preventDefault();
},
linkHtml: function(url, text) {
return "<a href=\"" + url + "\" target=\"_blank\">" + text + "</a>";
},
chatEnabled: function(){
return gon.appConfig.chat.enabled;
},
getChatIcons: function(){
return "<div class=\"help-chat-icons\">" +
" <i class=\"entypo-lock-open\"></i>" +
" <i class=\"entypo-chat\"></i>" +
" <i class=\"entypo-trash\"></i>" +
"</div>";
}
});
// @license-end

View file

@ -1,50 +0,0 @@
//= require emojione
//= require favico.js/favico
//= require jquery.ui/ui/resizable
//= require jquery.ui/ui/draggable
//= require jquery.slimscroll/jquery.slimscroll
//= require jquery-colorbox
//= require jquery-fullscreen-plugin
//= require diaspora_jsxc
// initialize jsxc xmpp client
$(document).ready(function() {
if (app.currentUser.authenticated()) {
$.post("/user/auth_token", null, function(data) {
if (jsxc && data['token']) {
var jid = app.currentUser.get('diaspora_id');
jsxc.init({
root: '/assets/diaspora_jsxc',
rosterAppend: 'body',
otr: {
debug: true,
SEND_WHITESPACE_TAG: true,
WHITESPACE_START_AKE: true
},
onlineHelp: "/help/chat",
priority: {
online: 1,
chat: 1
},
displayRosterMinimized: function() {
return false;
},
xmpp: {
url: $('script#jsxc').data('endpoint'),
username: jid.replace(/@.*?$/g, ''),
domain: jid.replace(/^.*?@/g, ''),
jid: jid,
password: data.token,
resource: 'diaspora-jsxc',
overwrite: true,
onlogin: true
}
});
} else {
console.error('No token found! Authenticated!?');
}
}, 'json');
}
});

View file

@ -84,8 +84,6 @@
@import 'stream';
@import 'stream_element';
@import 'comments';
@import 'diaspora_jsxc';
@import 'chat';
@import 'markdown-content';
@import 'oembed';
@import 'media-embed';

View file

@ -10,14 +10,15 @@ body {
.page-contacts,
.page-conversations,
.page-notifications,
.page-people.action-show,
.page-people.action-contacts,
.page-people.action-show,
.page-photos,
.page-posts,
.page-profiles.action-edit,
.page-services.action-index,
.page-streams,
.page-tags,
.page-two_factor_authentications,
.page-user_applications,
.page-users.action-edit,
.page-users.action-update,

View file

@ -1,14 +0,0 @@
body > .container-fluid.chat-roster-shown {
padding-right: 224px;
#back-to-top { right: 244px; }
}
body > .container-fluid.chat-roster-hidden {
#back-to-top { right: 54px; }
}
// This element is instanciated by JSXC. Does not have to follow naming conventions
// scss-lint:disable IdSelector, SelectorFormat
#jsxc_roster {
top: $navbar-height;
}
// scss-lint:enable IdSelector, SelectorFormat

View file

@ -37,9 +37,6 @@
text-decoration: none;
margin-right: 25px;
}
#chat_privilege_toggle > .enabled {
color: $text-color-active;
}
.contacts-header-icon {
font-size: 24.5px;
line-height: 40px;

View file

@ -93,5 +93,10 @@ textarea {
}
::placeholder { text-transform: uppercase; }
p {
margin-top: .5rem;
text-align: center;
}
}
}

View file

@ -91,18 +91,6 @@ ul#help_nav {
border-radius: 0px 0px 4px 4px;
background-color: white;
padding: 10px 20px;
div.help-chat-icons{
text-align: center;
font-size: 50px;
line-height: 70px;
[class^="entypo-"], [class*="entypo-"] {
color: $text-color-pale;
&.entypo-chat { color: $text-color-active; }
}
}
}
}
}

View file

@ -42,6 +42,14 @@
padding: 15px;
}
.part-of-diaspora {
font-style: italic;
a {
color: $white;
}
}
.login-form {
fieldset { background: none; }

View file

@ -1,4 +1,5 @@
.page-sessions.action-new,
.page-sessions.action-create,
.page-passwords.action-new,
.page-passwords.action-edit {
padding-top: 25px;

View file

@ -16,6 +16,30 @@
}
}
h1 {
font-size: 2.7rem;
}
h2 {
font-size: 2.3rem;
}
h3 {
font-size: 2rem;
}
h4 {
font-size: 1.8rem;
}
h5 {
font-size: 1.6rem;
}
h6 {
font-size: 1.4rem;
}
.img-responsive {
display: inline;
}

View file

@ -1,5 +1,4 @@
.page-registrations.action-new,
.page-registrations.action-create {
.page-registrations {
.ball {
background: image-url('branding/ball.png') no-repeat;
background-size: contain;
@ -12,19 +11,24 @@
height: 633px;
}
@media (max-width: $screen-xs-max) {
.v-center {
height: auto;
}
}
.content {
display: table-cell;
vertical-align: middle;
h2 {
h1 {
font-size: 35px;
margin: 12px;
text-align: center;
margin: 12px 0;
}
}
form {
max-width: 400px;
max-width: 500px;
}
.captcha-img {
@ -34,16 +38,13 @@
width: 120px;
}
.captcha-input {
.form-control.captcha-input {
border-bottom: 1px solid $input-border;
border-bottom-left-radius: 5px;
border-bottom-right-radius: 5px;
box-sizing: border-box;
font-size: 16px;
height: 40px;
line-height: $line-height-base;
padding: 10px 10px 10px 130px;
width: 100%;
padding-left: 130px;
}
.terms > a {

View file

@ -1,6 +0,0 @@
<div class='question opened collapsible'>
<a class='toggle' href='#'>
<h4>{{ add_contact_roster_q }}</h4>
</a>
<div class='answer hideable'>{{{ add_contact_roster_a }}}</div>
</div>

View file

@ -64,12 +64,6 @@
<a href="#" class="section-unselected faq-link" data-section="miscellaneous" data-items="back_to_top photo_albums subscribe_feed diaspora_app">{{ title_miscellaneous }}</a>
<span class="section-selected">{{ title_miscellaneous }}</span>
</li>
{{#if chat_enabled }}
<li>
<a href="#" class="section-unselected faq-link-chat" data-section="chat" data-items="add_contact_roster i_m_a_podmin">{{ title_chat }}</a>
<span class="section-selected">{{ title_chat }}</span>
</li>
{{/if}}
</ul>
</div>
</div>

View file

@ -27,6 +27,7 @@ class ApplicationController < ActionController::Base
before_action :gon_set_current_user
before_action :gon_set_appconfig
before_action :gon_set_preloads
before_action :configure_permitted_parameters, if: :devise_controller?
inflection_method grammatical_gender: :gender
@ -161,7 +162,6 @@ class ApplicationController < ActionController::Base
def gon_set_appconfig
gon.push(appConfig: {
chat: {enabled: AppConfig.chat.enabled?},
settings: {podname: AppConfig.settings.pod_name},
map: {mapbox: {
enabled: AppConfig.map.mapbox.enabled?,
@ -182,4 +182,10 @@ class ApplicationController < ActionController::Base
return unless gon.preloads.nil?
gon.preloads = {}
end
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_in, keys: [:otp_attempt])
end
end

View file

@ -29,21 +29,19 @@ class AspectsController < ApplicationController
end
def destroy
@aspect = current_user.aspects.where(id: params[:id]).first
begin
if current_user.auto_follow_back && @aspect.id == current_user.auto_follow_back_aspect.id
if current_user.auto_follow_back && aspect.id == current_user.auto_follow_back_aspect.id
current_user.update(auto_follow_back: false, auto_follow_back_aspect: nil)
flash[:notice] = I18n.t "aspects.destroy.success_auto_follow_back", name: @aspect.name
flash[:notice] = I18n.t "aspects.destroy.success_auto_follow_back", name: aspect.name
else
flash[:notice] = I18n.t "aspects.destroy.success", name: @aspect.name
flash[:notice] = I18n.t "aspects.destroy.success", name: aspect.name
end
@aspect.destroy
aspect.destroy
rescue ActiveRecord::StatementInvalid => e
flash[:error] = I18n.t "aspects.destroy.failure", name: @aspect.name
flash[:error] = I18n.t "aspects.destroy.failure", name: aspect.name
end
if request.referer.include?('contacts')
if request.referer.include?("contacts")
redirect_to contacts_path
else
redirect_to aspects_path
@ -51,41 +49,35 @@ class AspectsController < ApplicationController
end
def show
if @aspect = current_user.aspects.where(:id => params[:id]).first
redirect_to aspects_path('a_ids[]' => @aspect.id)
if aspect
redirect_to aspects_path("a_ids[]" => aspect.id)
else
redirect_to aspects_path
end
end
def update
@aspect = current_user.aspects.where(:id => params[:id]).first
if @aspect.update_attributes!(aspect_params)
flash[:notice] = I18n.t 'aspects.update.success', :name => @aspect.name
if aspect.update!(aspect_params)
flash[:notice] = I18n.t "aspects.update.success", name: aspect.name
else
flash[:error] = I18n.t 'aspects.update.failure', :name => @aspect.name
flash[:error] = I18n.t "aspects.update.failure", name: aspect.name
end
render :json => { :id => @aspect.id, :name => @aspect.name }
render json: {id: aspect.id, name: aspect.name}
end
def update_order
params[:ordered_aspect_ids].each_with_index do |id, i|
current_user.aspects.find(id).update_attributes(order_id: i)
current_user.aspects.find(id).update(order_id: i)
end
head :no_content
end
def toggle_chat_privilege
@aspect = current_user.aspects.where(:id => params[:aspect_id]).first
@aspect.chat_enabled = !@aspect.chat_enabled
@aspect.save
head :no_content
end
private
def aspect
@aspect ||= current_user.aspects.where(id: params[:id]).first
end
def connect_person_to_aspect(aspecting_person_id)
@person = Person.find(aspecting_person_id)
if @contact = current_user.contact_for(@person)
@ -97,6 +89,6 @@ class AspectsController < ApplicationController
end
def aspect_params
params.require(:aspect).permit(:name, :chat_enabled, :order_id)
params.require(:aspect).permit(:name, :order_id)
end
end

View file

@ -5,9 +5,9 @@
# the COPYRIGHT file.
class RegistrationsController < Devise::RegistrationsController
before_action :check_registrations_open_or_valid_invite!
before_action :check_registrations_open_or_valid_invite!, except: :registrations_closed
layout -> { request.format == :mobile ? "application" : "with_header" }
layout -> { request.format == :mobile ? "application" : "with_header_with_footer" }
def create
@user = User.build(user_params)
@ -28,13 +28,17 @@ class RegistrationsController < Devise::RegistrationsController
end
end
def registrations_closed
render "registrations/registrations_closed"
end
private
def check_registrations_open_or_valid_invite!
return true if AppConfig.settings.enable_registrations? || invite.try(:can_be_used?)
flash[:error] = params[:invite] ? t("registrations.invalid_invite") : t("registrations.closed")
redirect_to new_user_session_path
flash[:error] = t("registrations.invalid_invite") if params[:invite]
redirect_to registrations_closed_path
end
def invite

View file

@ -5,10 +5,54 @@
# the COPYRIGHT file.
class SessionsController < Devise::SessionsController
after_action :reset_authentication_token, only: [:create]
before_action :reset_authentication_token, only: [:destroy]
# rubocop:disable Rails/LexicallyScopedActionFilter
before_action :authenticate_with_2fa, only: :create
after_action :reset_authentication_token, only: :create
before_action :reset_authentication_token, only: :destroy
# rubocop:enable Rails/LexicallyScopedActionFilter
def find_user
return User.find_for_authentication(username: params[:user][:username]) if params[:user][:username]
User.find(session[:otp_user_id]) if session[:otp_user_id]
end
def authenticate_with_2fa
self.resource = find_user
return true unless resource&.otp_required_for_login?
if params[:user][:otp_attempt].present? && session[:otp_user_id]
authenticate_with_two_factor_via_otp(resource)
else
strategy = Warden::Strategies[:database_authenticatable].new(warden.env, :user)
prompt_for_two_factor(strategy.user) if strategy.valid? && strategy._run!.successful?
end
end
def valid_otp_attempt?(user)
user.validate_and_consume_otp!(params[:user][:otp_attempt]) ||
user.invalidate_otp_backup_code!(params[:user][:otp_attempt])
rescue OpenSSL::Cipher::CipherError => _error
false
end
def authenticate_with_two_factor_via_otp(user)
if valid_otp_attempt?(user)
session.delete(:otp_user_id)
sign_in(user)
else
flash.now[:alert] = "Invalid token"
prompt_for_two_factor(user)
end
end
def prompt_for_two_factor(user)
session[:otp_user_id] = user.id
render :two_factor
end
def reset_authentication_token
current_user.reset_authentication_token! unless current_user.nil?
current_user&.reset_authentication_token!
end
end

View file

@ -0,0 +1,55 @@
# frozen_string_literal: true
class TwoFactorAuthenticationsController < ApplicationController
before_action :authenticate_user!
before_action :verify_otp_required, only: [:create]
def show
@user = current_user
end
def create
current_user.otp_secret = User.generate_otp_secret(32)
current_user.save!
redirect_to confirm_two_factor_authentication_path
end
def confirm_2fa
redirect_to two_factor_authentication_path if current_user.otp_required_for_login?
end
def confirm_and_activate_2fa
if current_user.validate_and_consume_otp!(params[:user][:code])
current_user.otp_required_for_login = true
current_user.save!
flash[:notice] = t("two_factor_auth.flash.success_activation")
redirect_to recovery_codes_two_factor_authentication_path
else
flash[:alert] = t("two_factor_auth.flash.error_token")
redirect_to confirm_two_factor_authentication_path
end
end
def recovery_codes
@recovery_codes = current_user.generate_otp_backup_codes!
current_user.save!
end
def destroy
if current_user.valid_password?(params[:two_factor_authentication][:password])
current_user.otp_required_for_login = false
current_user.save!
flash[:notice] = t("two_factor_auth.flash.success_deactivation")
else
flash[:alert] = t("users.destroy.wrong_password")
end
redirect_to two_factor_authentication_path
end
private
def verify_otp_required
redirect_to two_factor_authentication_path if current_user.otp_required_for_login?
end
end

View file

@ -152,6 +152,8 @@ class UsersController < ApplicationController
:auto_follow_back_aspect_id,
:getting_started,
:post_default_public,
:otp_required_for_login,
:otp_secret,
email_preferences: UserPreference::VALID_EMAIL_TYPES.map(&:to_sym)
)
end

View file

@ -72,4 +72,9 @@ module ApplicationHelper
buf << [nonced_javascript_tag("$.fx.off = true;")] if Rails.env.test?
buf.join("\n").html_safe
end
def qrcode_uri
label = current_user.username
current_user.otp_provisioning_uri(label, issuer: AppConfig.environment.url)
end
end

View file

@ -1,15 +0,0 @@
# frozen_string_literal: true
module JsxcHelper
def get_bosh_endpoint
proto = AppConfig.chat.server.bosh.proto
port = AppConfig.chat.server.bosh.port
bind = AppConfig.chat.server.bosh.bind
host = AppConfig.pod_uri.host
unless AppConfig.chat.server.bosh.proxy?
return "#{proto}://#{host}:#{port}#{bind}"
end
AppConfig.url_to bind
end
end

View file

@ -33,7 +33,9 @@ class OpenGraphCache < ApplicationRecord
end
def fetch_and_save_opengraph_data!
object = OpenGraphReader.fetch!(self.url)
uri = URI.parse(url.start_with?("http") ? url : "http://#{url}")
uri.normalize!
object = OpenGraphReader.fetch!(uri)
return unless object

View file

@ -6,7 +6,6 @@
class Photo < ApplicationRecord
include Diaspora::Federated::Base
include Diaspora::Commentable
include Diaspora::Shareable
# NOTE API V1 to be extracted

View file

@ -19,7 +19,14 @@ class User < ApplicationRecord
scope :halfyear_actives, ->(time = Time.now) { logged_in_since(time - 6.month) }
scope :active, -> { joins(:person).where(people: {closed_account: false}) }
devise :database_authenticatable, :registerable,
attr_encrypted :otp_secret, if: false, prefix: "plain_"
devise :two_factor_authenticatable,
:two_factor_backupable,
otp_backup_code_length: 16,
otp_number_of_backup_codes: 10
devise :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:lockable, :lastseenable, :lock_strategy => :none, :unlock_strategy => :none
@ -42,6 +49,7 @@ class User < ApplicationRecord
validate :no_person_with_same_username
serialize :hidden_shareables, Hash
serialize :otp_backup_codes, Array
has_one :person, inverse_of: :owner, foreign_key: :owner_id
has_one :profile, through: :person
@ -583,6 +591,10 @@ class User < ApplicationRecord
end
end
def remember_me
true
end
private
def clearable_fields

View file

@ -23,7 +23,6 @@ class NodeInfoPresenter
doc.services.outbound = available_services
doc.open_registrations = open_registrations?
doc.metadata["nodeName"] = name
doc.metadata["xmppChat"] = chat_enabled?
doc.metadata["camo"] = camo_config
doc.metadata["adminAccount"] = admin_account
end
@ -70,10 +69,6 @@ class NodeInfoPresenter
AppConfig.settings.enable_registrations?
end
def chat_enabled?
AppConfig.chat.enabled?
end
def camo_config
{
markdown: AppConfig.privacy.camo.proxy_markdown_images?,

View file

@ -2,6 +2,6 @@
module Export
class AspectSerializer < ActiveModel::Serializer
attributes :name, :chat_enabled
attributes :name
end
end

View file

@ -10,7 +10,11 @@ class DiasporaLinkService
end
def find_or_fetch_entity
entity_finder.find || fetch_entity
if type && guid
entity_finder.find || fetch_entity
elsif author
find_or_fetch_person
end
end
private
@ -28,6 +32,12 @@ class DiasporaLinkService
@entity_finder ||= Diaspora::EntityFinder.new(type, guid)
end
def find_or_fetch_person
Person.find_or_fetch_by_identifier(author)
rescue DiasporaFederation::Discovery::DiscoveryError
nil
end
def normalize
link.gsub!(%r{^web\+diaspora://}, "diaspora://") ||
link.gsub!(%r{^//}, "diaspora://") ||
@ -38,8 +48,10 @@ class DiasporaLinkService
def parse
normalize
match = DiasporaFederation::Federation::DiasporaUrlParser::DIASPORA_URL_REGEX.match(link)
@author = match[1]
@type = match[2]
@guid = match[3]
if match
@author, @type, @guid = match.captures
else
@author = %r{^diaspora://(#{Validation::Rule::DiasporaId::DIASPORA_ID_REGEX})$}u.match(link)&.captures&.first
end
end
end

View file

@ -4,13 +4,6 @@
- if @aspect.contacts.size > 0 && @aspect.contacts.size < 20
= start_a_conversation_link(@aspect, @aspect.contacts.size)
-if AppConfig.chat.enabled?
= link_to aspect_toggle_chat_privilege_path(@aspect), id: "chat_privilege_toggle", class: "contacts_button", method: :put, remote: true do
-if @aspect.chat_enabled?
%i.entypo-chat.enabled.contacts-header-icon{title: t("javascripts.contacts.aspect_chat_is_enabled")}
-else
%i.entypo-chat.contacts-header-icon{title: t("javascripts.contacts.aspect_chat_is_not_enabled")}
= link_to @aspect, method: "delete", data: { confirm: t("aspects.edit.confirm_remove_aspect") }, class: "delete contacts_button", id: "delete_aspect" do
%i.entypo-trash.contacts-header-icon{title: t("delete")}
.pull-right.contact-list-search

View file

@ -37,7 +37,6 @@
autocorrect: "off",
aria: {labelledby: "passwordConfirmationLabel"}
= hidden_field(:user, :remember_me, value: 1)
= f.submit t("devise.passwords.edit.change_password"), class: "btn btn-block btn-primary"
.text-center

View file

@ -9,10 +9,6 @@
= AppConfig.settings.pod_name
= form_for(resource, as: resource_name, url: password_path(resource_name), html: {class: "form-horizontal block-form"}, autocomplete: 'off') do |f|
- unless resource.errors.empty?
%legend
%i
= t('devise.passwords.new.no_account') # this is an error message and should not be displayed as a legend
%fieldset
%label#emailLabel.sr-only{for: "user_email"}
= t("devise.passwords.new.email")

View file

@ -4,6 +4,10 @@
.row
.col-md-8.text-center
%h1= t("home.default.headline", pod_name: pod_name)
- if pod_name != "diaspora*"
%h2.part-of-diaspora
!= t("home.default.part_of_diaspora",
diaspora_site_link: link_to(t("home.default.diaspora_site_link"), "https://diasporafoundation.org/"))
%h2= t("home.default.byline")
.col-md-4.login-form
= render partial: "sessions/form", locals: {mobile: false, resource: User.new, resource_name: :user}

View file

@ -1,5 +1,5 @@
%ul.nav.navbar-nav.navbar-right
- if AppConfig.settings.enable_registrations? && !current_page?(controller: "/registrations", action: :new)
- unless current_page?(controller: "/registrations", action: :new)
%li= link_to t("devise.shared.links.sign_up"), new_user_registration_path, class: "login"
- unless current_page?(controller: "/sessions", action: :new)
%li= link_to t("devise.shared.links.sign_in"), new_user_session_path, class: "login"

View file

@ -4,7 +4,7 @@
- if mobile
%legend
= image_tag("branding/logos/header-logo2x.png", height: 40, width: 40)
= t("aspects.aspect_stream.make_something")
= AppConfig.settings.pod_name
- if mobile
= f.label :email, t("registrations.new.email"), class: "control-label", id: "emailLabel"

View file

@ -0,0 +1,11 @@
%h2
= t("devise.shared.links.sign_up_closed")
!= t("registrations.closed.closed_pod",
wiki: link_to(t("registrations.closed.another_pod"), "https://diasporafoundation.org/getting_started/sign_up"))
!= t("registrations.closed.find_pods",
poduptime: link_to("Poduptime", "https://podupti.me/"))
!= t("registrations.closed.other_questions",
wiki: link_to("Wiki", "https://wiki.diasporafoundation.org/Choosing_a_pod"))

View file

@ -1,12 +1,11 @@
#registration
.container
.row
.col-md-10.offset1
.col-md-7.hidden-phone
%h1.ball
.col-md-5.v-center
.content.text-center
%h2#pod-name
= AppConfig.settings.pod_name
.col-sm-6.hidden-xs
.ball
.col-sm-6.col-xs-12.v-center
.content.text-center
%h1#pod-name
= AppConfig.settings.pod_name
= render partial: "form", locals: {mobile: false}
= render partial: "form", locals: {mobile: false}

View file

@ -0,0 +1,8 @@
#registration
.container
.row
.col-sm-6.hidden-xs
.ball
.col-sm-6.col-xs-12.v-center
.content
= render partial: "registrations_closed"

View file

@ -0,0 +1,10 @@
.stream#main-stream
- flash.each do |name, msg|
.expose#flash-container
.flash-message{class: "message alert alert-#{flash_class name}", role: "alert"}
= msg
.login-form
.login-container
= render partial: "registrations_closed"

View file

@ -40,5 +40,4 @@
autocorrect: "off",
aria: {labelledby: "passwordLabel"}
= f.hidden_field :remember_me, value: 1
= f.submit t("devise.sessions.new.sign_in"), class: "btn btn-large btn-block btn-primary"

View file

@ -0,0 +1,31 @@
- content_for :page_title do
= AppConfig.settings.pod_name + " - " + t("two_factor_auth.title")
.container#twofa
.text-center
.logos-asterisk
%h1
= t("two_factor_auth.title")
= form_for resource, as: resource_name,
url: session_path(resource_name),
html: {class: "block-form"},
method: :post do |f|
%fieldset
%label.sr-only#otp-label{for: "otp_attempt"}
= t("two_factor_auth.input_token.label")
%i.entypo-lock
= f.text_field :otp_attempt,
type: :text,
placeholder: t("two_factor_auth.input_token.placeholder"),
required: true,
autofocus: true,
class: "input-block-level form-control"
%p= t "two_factor_auth.recovery.reminder"
.actions
= f.button t("devise.sessions.new.sign_in"),
type: :submit,
class: "btn btn-large btn-block btn-primary"

View file

@ -9,6 +9,8 @@
class: request.path == edit_user_path ? "list-group-item active" : "list-group-item"
= link_to t("privacy"), privacy_settings_path,
class: current_page?(privacy_settings_path) ? "list-group-item active" : "list-group-item"
= link_to t("two_factor_auth.title"), two_factor_authentication_path,
class: current_page?(two_factor_authentication_path) ? "list-group-item active" : "list-group-item"
= link_to t("_services"), services_path,
class: current_page?(services_path) ? "list-group-item active" : "list-group-item"
= link_to t("_applications"), api_openid_connect_user_applications_path,

View file

@ -2,11 +2,6 @@
-# licensed under the Affero General Public License version 3 or later. See
-# the COPYRIGHT file.
- content_for :head do
- if AppConfig.chat.enabled?
= javascript_include_tag :jsxc, id: 'jsxc',
data: { endpoint: get_bosh_endpoint }
- if current_user&.getting_started?
#welcome-to-diaspora
.container-fluid

View file

@ -0,0 +1,11 @@
.col-md-12
.row
.col-md-12
%h3= t("two_factor_auth.title")
%p= t("two_factor_auth.explanation")
.well= t("two_factor_auth.deactivated.status")
= form_for "user", url: two_factor_authentication_path, html: {method: :post} do |f|
= f.hidden_field :otp_required_for_login, value: true
.clearfix.form-group= f.submit t("two_factor_auth.deactivated.change_button"),
class: "btn btn-primary pull-right"

View file

@ -0,0 +1,33 @@
.col-md-12
.row
.col-md-12
%h3= t("two_factor_auth.confirm.title")
%p= t("two_factor_auth.confirm.status")
.small-horizontal-spacer
%h4= t("two_factor_auth.confirm.scan_title")
.row
.col-md-6
%p= t("two_factor_auth.confirm.scan_explanation")
.two-factor-qr
!= RQRCode::QRCode.new(qrcode_uri).as_svg(offset: 10, fill: "ffffff", module_size: 5)
.col-md-6
%p= t("two_factor_auth.confirm.manual_explanation")
%p!= t("two_factor_auth.confirm.manual_explanation_cont")
%pre.well= current_user.otp_secret.scan(/.{4}/).join(" ")
.row
.col-md-12
.small-horizontal-spacer
%h4= t("two_factor_auth.confirm.input_title")
= t("two_factor_auth.confirm.input_explanation")
= form_for "user", url: confirm_two_factor_authentication_path,
html: {method: :post, class: "form-horizontal"} do |f|
.form-group
= f.label :code, t("two_factor_auth.input_token.label"), class: "control-label col-sm-6"
.col-sm-6
= f.text_field :code, placeholder: t("two_factor_auth.input_token.placeholder"), class: "form-control"
.form-group
.col-sm-12
= link_to t("cancel"), two_factor_authentication_path, class: "btn btn-default"
= f.submit t("two_factor_auth.confirm.activate_button"), class: "btn btn-primary pull-right"

View file

@ -0,0 +1,27 @@
.col-md-12
.row
.col-md-12
%h3= t("two_factor_auth.title")
%p= t("two_factor_auth.explanation")
.well= t("two_factor_auth.activated.status")
%hr
%h4= t("two_factor_auth.activated.change_button")
%p= t("two_factor_auth.activated.change_label")
= form_for "two_factor_authentication", url: two_factor_authentication_path,
html: {method: :delete, class: "form-horizontal"} do |f|
.form-group
= f.label :password, t("users.edit.current_password"), class: "control-label col-sm-6"
.col-sm-6
= f.password_field :password, class: "form-control"
.clearfix= f.submit t("two_factor_auth.activated.change_button"), class: "btn btn-primary pull-right"
%hr
%h4= t("two_factor_auth.recovery.title")
%p= t("two_factor_auth.recovery.explanation_short")
%p= t("two_factor_auth.recovery.invalidation_notice")
%p= link_to t("two_factor_auth.recovery.button"),
recovery_codes_two_factor_authentication_path, class: "btn btn-default"

View file

@ -0,0 +1,18 @@
.col-md-12
.row
.col-md-12
%h3= t("two_factor_auth.title")
.well= t("two_factor_auth.activated.status")
%hr
%h3= t("two_factor_auth.recovery.title")
%p= t("two_factor_auth.recovery.explanation")
%ol.recovery-codes
- @recovery_codes.each do |code|
%li<
%samp= code
.form-group.submit_block.clearfix
= link_to t("ok"), two_factor_authentication_path, class: "btn btn-primary pull-right"

View file

@ -0,0 +1,4 @@
.form-group
= f.label :code, t("two_factor_auth.input_token.label"), class: "control-label col-sm-6"
.col-sm-6
= f.text_field :code, placeholder: t("two_factor_auth.input_token.placeholder"), class: "form-control"

View file

@ -0,0 +1,11 @@
- content_for :page_title do
= t("two_factor_auth.confirm.title")
.container-fluid
.row
.col-md-3
.sidebar
= render "shared/settings_nav"
.col-md-9
.framed-content.clearfix
= render "confirm"

View file

@ -0,0 +1,12 @@
- content_for :page_title do
= t("two_factor_auth.title")
= t("two_factor_auth.recovery.title")
.container-fluid
.row
.col-md-3
.sidebar
= render "shared/settings_nav"
.col-md-9
.framed-content.clearfix
= render "recovery"

View file

@ -0,0 +1,15 @@
- content_for :page_title do
= t("two_factor_auth.title")
.container-fluid
.row
.col-md-3
.sidebar
= render "shared/settings_nav"
.col-md-9
.framed-content.clearfix
- if @user.otp_required_for_login
= render "deactivate"
- else
= render "activate"

View file

@ -0,0 +1,11 @@
# frozen_string_literal: true
module Workers
class CleanupPendingPhotos < Base
sidekiq_options queue: :low
def perform
Photo.where(pending: true).where("created_at < ?", 1.day.ago).destroy_all
end
end
end

View file

@ -1,7 +0,0 @@
If you want to encrypt your chat streams with prosody.
Add to `config/certs` your server certificate and key.
The domain name should be included in the file name e.g.:
* example.com.crt
* example.com.key

View file

@ -49,21 +49,6 @@ defaults:
unicorn_timeout: 90
embed_sidekiq_worker: false
sidekiq_workers: 1
chat:
enabled: false
server:
enabled: true
certs: "config/certs"
bosh:
proxy: false
proto: 'http'
address: '0.0.0.0'
port: 5280
bind: '/http-bind'
log:
info: 'log/prosody.log'
error: 'log/prosody.err'
debug: false
map:
mapbox:
enabled: false

View file

@ -186,8 +186,8 @@ configuration: ## Section
#rails_environment: 'development'
## Write unicorn stderr and stdout log.
#stderr_log: '/usr/local/app/diaspora/log/unicorn-stderr.log'
#stdout_log: '/usr/local/app/diaspora/log/unicorn-stdout.log'
#stderr_log: 'log/unicorn-stderr.log'
#stdout_log: 'log/unicorn-stdout.log'
## Number of Unicorn worker processes (default=2).
## Increase this if you have many users.
@ -208,68 +208,6 @@ configuration: ## Section
## increase environment.sidekiq.concurrency instead!
#sidekiq_workers: 1
## Diaspora has an internal XMPP web-client. If you want to enable the chat
## functionality or want to use a custom XMPP server, then you should edit
## the following configuration.
chat: ## Section
## Enable the chat service and all its components.
##
## Please make sure that you followed the Installation-Instructions first:
## https://wiki.diasporafoundation.org/Integration/Chat#Installation.2FUpdate
#enabled: true
## Custom XMPP server configuration goes here.
server: ## Section
## Use the configuration bridge to prosody (default=true).
## In case you want to run your own server or want to configure
## prosody on your own, you should disable it.
#enabled: false
## Set the directory in which to look for virtual hosts TLS certificates.
#certs: 'config/certs'
## XEP-0124 BOSH requests
## The easiest way of avoiding certificate and mixed-content issues
## is to use a proxy, e.g.:
##
## Apache: https://wiki.diasporafoundation.org/Integration/Chat#Apache2
## Nginx: https://wiki.diasporafoundation.org/Integration/Chat#Nginx
##
## If you configured your proxy correctly,
## you should set the proxy option to 'true'
bosh: ## Section
## If you'd like to use a proxy, you should set the proxy
## option to true, otherwise jsxc always tries to
## connect directly to the port specified below.
#proxy: true
## Configure the protocol used to access the BOSH endpoint
#proto: http
## Configure the address that prosody should listen on.
#address: '0.0.0.0'
## Configure the BOSH port.
#port: 5280
## Configure the bind endpoint.
#bind: '/http-bind'
## Specify log behaviour here.
log: ## Section
## Log file location.
#info: 'log/prosody.log'
## Error log file location.
#error: 'log/prosody.err'
## The debug level logs all XML sent and received by the server.
#debug: false
## Displays the location of a post in a map. Per default we are using the map
## tiles of the Heidelberg University (http://giscience.uni-hd.de).
## You also have the possibility to use the map tiles of https://www.mapbox.com

View file

@ -50,13 +50,4 @@ Eye.application("diaspora") do
end
end
end
with_condition(AppConfig.chat.enabled? && AppConfig.chat.server.enabled?) do
process :xmpp do
start_command "bin/bundle exec rails runner Prosody.start"
daemonize true
pid_file "tmp/pids/xmpp.pid"
stop_signals [:TERM, 10.seconds, :KILL]
end
end
end

View file

@ -92,7 +92,7 @@ Devise.setup do |config|
# It will change confirmation, password recovery and other workflows
# to behave the same regardless if the e-mail provided was right or wrong.
# Does not affect registerable.
# config.paranoid = true
config.paranoid = true
# By default Devise will store the user in session. You can skip storage for
# particular strategies by setting this option.
@ -270,4 +270,8 @@ Devise.setup do |config|
# When using omniauth, Devise cannot automatically set Omniauth path,
# so you need to do it manually. For the users scope, it would be:
# config.omniauth_path_prefix = '/my_engine/users/auth'
# if a user enables 2fa this would log them in without requiring them
# to enter a token
config.sign_in_after_reset_password = false
end

View file

@ -4,3 +4,4 @@
# Configure sensitive parameters which will be filtered from the log file.
Rails.application.config.filter_parameters += %i[password message text bio]
Rails.application.config.filter_parameters += [:otp_attempt]

View file

@ -1,24 +0,0 @@
# frozen_string_literal: true
if AppConfig.chat.enabled? && AppConfig.chat.server.enabled?
db = Rails.application.config
.database_configuration[Rails.env]
Prosody.update_configuration(
bosh_port: AppConfig.chat.server.bosh.port, bosh_path: AppConfig.chat.server.bosh.bind,
bosh_interface: AppConfig.chat.server.bosh.address,
log_debug: (AppConfig.chat.server.log.debug? ? "debug" : "info"),
log_info: "#{Dir.pwd}/#{AppConfig.chat.server.log.info}",
log_error: "#{Dir.pwd}/#{AppConfig.chat.server.log.error}",
certs: "#{Dir.pwd}/#{AppConfig.chat.server.certs}",
hostname: AppConfig.environment.url,
virtualhost_driver: db["adapter"],
virtualhost_database: db["database"],
virtualhost_username: db["username"],
virtualhost_password: db["password"],
virtualhost_host: db["host"]
)
end

View file

@ -29,14 +29,6 @@ SecureHeaders::Configuration.default do |config|
csp[:style_src] << asset_host
end
if AppConfig.chat.enabled?
csp[:media_src] << "data:"
unless AppConfig.chat.server.bosh.proxy?
csp[:connect_src] << "#{AppConfig.pod_uri.host}:#{AppConfig.chat.server.bosh.port}"
end
end
csp[:script_src] << "code.jquery.com" if AppConfig.privacy.jquery_cdn?
csp[:form_action] << "www.paypal.com" if AppConfig.settings.paypal_donations.enable?

View file

@ -29,6 +29,11 @@ def default_job_config
"class": "Workers::CleanupOldExports"
},
cleanup_pending_photos: {
"cron": "#{random_minute.call} #{random_hour.call} * * *",
"class": "Workers::CleanupPendingPhotos"
},
queue_users_for_removal: {
"cron": "#{random_minute.call} #{random_hour.call} * * *",
"class": "Workers::QueueUsersForRemoval"

View file

@ -54,7 +54,6 @@ ar:
new:
email: "البريد الإلكترونيّ"
forgot_password: "أنسيت كلمة المرور؟"
no_account: "ليس هناك حساب بهذا البريد الإلكترونيّ"
reset_password: "صفّر كلمة المرور"
send_password_instructions: "أرسل لي إرشادات تصفير كلمة المرور"
send_instructions: "سيصلك بريد إلكترونيّ قريبًا فيه إرشادات تصفير كلمة المرور."

View file

@ -28,7 +28,6 @@ art-nvi:
change_password: "Leykatem oeyä ftemlì'ut"
new:
forgot_password: "Ngal tswama' ngeyä ftemlì'uti srak?"
no_account: "Kea Diaspora a hu fìImeyl fkeytok. Diasporari txo perey, ayoe terìng ayDiasporat ye'rìn"
send_password_instructions: "Fpe' oeru aysänumet fte oe tsivun leykivatem oeyä ftemlì'ut"
send_instructions: "Ngal tayel Imeylit a wìntxu ngaru fya'ot a ngal leykatem ngeyä ftemlì'ut."
updated: "Ngeyä ftemlì'u lìmatem. Nga tung fìtsengmì set."

View file

@ -50,7 +50,6 @@ bg:
change_password: "Промяна на паролата"
new:
forgot_password: "Забравена парола?"
no_account: "Не съществува акаунт с въведената ел. поща. Ако очаквате покана, знайте че ние ги раздаваме възможно най-бързо"
send_password_instructions: "Изпращане на инструкции за възстановяване на паролата"
send_instructions: "Ще получите ел. писмо с инструкции за промяна на паролата."
updated: "Паролата е променена успешно. Сега сте вписани."

View file

@ -54,7 +54,6 @@ br:
new:
email: "Chomlec'h postel"
forgot_password: "Ankouaet ho ker-tremen ganeoc'h?"
no_account: "N'eus kont ebet stag ouzh ar postel-mañ."
reset_password: "Adtermeniñ ar ger-tremen"
send_password_instructions: "Kas din an titouroù evit adsevel ma ger-tremen"
send_instructions: "Emaoc'h o vont da resev ur postel a-raok pell gant titouroù evit gouzout an doare da adsevel ho ker-tremen."

View file

@ -51,7 +51,6 @@ bs:
change_password: "Promjeni moju šifru"
new:
forgot_password: "Zaboravili ste šifru?"
no_account: "Ne postoji račun sa ovom e-mail adresom. Ako očekujete pozivnicu, šaljemo ih čim prije."
send_password_instructions: "Pošalji mi uputstva za resetovanje šifre"
send_instructions: "Dobit ćete e-mail sa uputstvima kako da resetujete vašu šifru za par minuta."
updated: "Vaša šifra je uspješno promijenjena. Sada ste prijavljeni."

View file

@ -62,7 +62,6 @@ cs:
new:
email: "E-mailová adresa"
forgot_password: "Zapomněli jste heslo?"
no_account: "Neexistuje žádný účet s touto e-mailovou adresou. Pokud čekáte na pozvání, budeme je vydávat, co nejdříve to bude možné"
reset_password: "Znovunastavit heslo"
send_password_instructions: "Zaslat instrukce k nastavení nového hesla."
no_token: "Na tuto stránku se nemůžete dostat, pokud nepřicházíte z e-mailu pro obnovení hesla. Pokud z e-mailu přicházíte, ujistěte se, že používáte celé poskytnuté URL."

View file

@ -37,7 +37,6 @@ cy:
change_password: "Newid fy nghyfrinair"
new:
forgot_password: "Wedi anghofio eich cyfrinair?"
no_account: "Dim cyfrif gyda e-bost hwn yn bodoli. Os ydych yn aros am wahodd, rhaid i chi aros hwyrach bach..."
send_instructions: "Byddwch yn derbyn e-bost â chyfarwyddiadau ar sut i gadarnhau eich cyfrif mewn ychydig funudau."
updated: "Newidiwyd eich cyfrinair yn llwyddiannus. Rydych chi wedi arwyddo i fewn."
registrations:

View file

@ -62,7 +62,6 @@ da:
new:
email: "E-mail adresse"
forgot_password: "Glemt din adgangskode?"
no_account: "Ingen konto med denne email adresse eksisterer."
reset_password: "Nulstil adgangskode"
send_password_instructions: "Send mig instruktioner til nulstilning af adgangskode"
no_token: "Du kan ikke tilgå denne side uden at komme fra en e-mail med nulstilling af dit kodeord. Hvis du kommer fra sådan en e-mail, undersøg venligst at du har brugt hele den URL der stod i mailen."

View file

@ -62,7 +62,6 @@ de-moo:
new:
email: "Email-Adresse"
forgot_password: "Passwort vergessen?"
no_account: "Es existiert keine Kuh mit dieser E-Mail-Adresse"
reset_password: "Passwort zurücksetzen"
send_password_instructions: "Anleitung zum Zurücksetzen des Кennworts anfordern"
no_token: "Du kannst auf diese Weide nicht zugreifen, ohne von einer E-Mail zur Passwortrücksetzung zu kommen. Falls du von einer E-Mail zur Passwortrücksetzung kommst, vergewissere dich bitte, dass du die vollständige angegebene URL verwendet hast."

View file

@ -62,7 +62,6 @@ de:
new:
email: "E-Mail-Adresse"
forgot_password: "Kennwort vergessen?"
no_account: "Es existiert kein Benutzerkonto mit dieser E-Mail-Adresse"
reset_password: "Kennwort zurücksetzen"
send_password_instructions: "Anleitung zum Zurücksetzen des Кennworts anfordern"
no_token: "Du kannst auf diese Seite nicht zugreifen, ohne von einer E-Mail zur Passwortrücksetzung zu kommen. Falls du von einer E-Mail zur Passwortrücksetzung kommst, vergewissere dich bitte, dass du die vollständige angegebene URL verwendet hast."

View file

@ -62,7 +62,6 @@ de_formal:
new:
email: "E-Mail-Adresse"
forgot_password: "Passwort vergessen?"
no_account: "Es existiert kein Benutzerkonto mit dieser E-Mail-Adresse"
reset_password: "Passwort zurücksetzen"
send_password_instructions: "Anleitung zum Zurücksetzen des Кennworts anfordern"
no_token: "Sie können auf diese Seite nicht zugreifen, ohne von einer E-Mail zur Passwortrücksetzung zu kommen. Falls sie von einer E-Mail zur Passwortrücksetzung kommen, vergewissern Sie sich bitte, dass Sie die vollständige angegebene URL verwendet haben."

View file

@ -54,7 +54,6 @@ el:
new:
email: "Διεύθυνση email"
forgot_password: "Ξεχάσατε τον κωδικό σας;"
no_account: "Δεν υπάρχει λογαριασμός με αυτό το email. Αν περιμένετε για πρόσκληση, θα γίνουν αποστολές το συντομότερο δυνατόν"
reset_password: "Επαναφορά κωδικού"
send_password_instructions: "Στείλτε μου οδηγίες επαναφοράς κωδικού"
send_instructions: "Θα λάβετε ένα email με οδηγίες για το πως να επαναφέρετε τον κωδικό πρόσβασης σας σε λίγα λεπτά."

View file

@ -66,7 +66,6 @@ en:
confirm_password: Confirm password
new:
forgot_password: Forgot your password?
no_account: No account with this email exists
reset_password: Reset password
email: Email address
send_password_instructions: Send me reset password instructions

View file

@ -48,7 +48,6 @@ en_1337:
change_password: "CH4NG3 MY *****"
new:
forgot_password: "F0RG07 Y0UR *****?"
no_account: "404 - N07 F0UND!"
send_password_instructions: "R3537 MY *****!!"
send_instructions: "G0NN4 R3C113V3 R3537 1N57RUC71ON5 BY M41L!"
updated: "***** CH4NG3D"

View file

@ -46,7 +46,6 @@ en_shaw:
change_password: "𐑗𐑱𐑯𐑡 𐑥𐑲 𐑐𐑨𐑕𐑢𐑼𐑛"
new:
forgot_password: "𐑓𐑹𐑜𐑪𐑑 𐑿𐑼 𐑐𐑨𐑕𐑢𐑼𐑛?"
no_account: "𐑯𐑴 𐑩𐑒𐑬𐑯𐑑 𐑢𐑦𐑞 𐑞𐑦𐑕 𐑦-𐑥𐑱𐑤 𐑧𐑜𐑟𐑦𐑕𐑑𐑕. 𐑦𐑓 𐑿 𐑸 𐑢𐑱𐑑𐑦𐑙 𐑓𐑹 𐑩𐑯 𐑦𐑯𐑝𐑲𐑑, 𐑢𐑰 𐑸 𐑮𐑴𐑤𐑦𐑙 𐑞𐑧𐑥 𐑬𐑑 𐑨𐑟 𐑕𐑵𐑯 𐑨𐑟 𐑐𐑪𐑕𐑦𐑚𐑩𐑤"
send_password_instructions: "𐑕𐑧𐑯𐑛 𐑥𐑰 𐑮𐑦𐑕𐑧𐑑 𐑐𐑨𐑕𐑢𐑼𐑛 𐑦𐑯𐑕𐑑𐑮𐑳𐑒𐑖𐑩𐑯𐑟"
send_instructions: "𐑿 𐑢𐑦𐑤 𐑮𐑦𐑕𐑰𐑝 𐑩𐑯 𐑦-𐑥𐑱𐑤 𐑢𐑦𐑞 𐑦𐑯𐑕𐑑𐑮𐑳𐑒𐑖𐑩𐑯𐑟 𐑩𐑚𐑬𐑑 𐑣𐑬 𐑑 𐑮𐑦𐑕𐑧𐑑 𐑿𐑼 𐑐𐑨𐑕𐑢𐑼𐑛 𐑦𐑯 𐑩 𐑓𐑿 𐑥𐑦𐑯𐑩𐑑𐑕."
updated: "𐑿𐑼 𐑐𐑨𐑕𐑢𐑼𐑛 𐑢𐑪𐑟 𐑗𐑱𐑯𐑡𐑛 𐑕𐑩𐑒𐑕𐑧𐑕𐑓𐑫𐑤𐑦. 𐑿 𐑸 𐑯𐑬 𐑕𐑲𐑯𐑛 𐑦𐑯."

View file

@ -57,7 +57,6 @@ en_valspeak:
new:
email: "Email addy"
forgot_password: "Oh noes!? did u like, forget ur passwerd? D:"
no_account: "sry but liek, no account that has this email existz... sry bout that :\\"
reset_password: "Reset passwerd"
send_password_instructions: "Send meh stuff on how 2 reset mah passwerd plz! Kthxbye <3"
send_instructions: "U will like, receive an email wit some txt on how 2 liek... reset ur passwerd in a few min, kay? So just chillax till then, kay? Kay. <3"

View file

@ -50,7 +50,6 @@ eo:
change_password: "Ŝanĝi mian pasvorton"
new:
forgot_password: "Ĉu vi forgesis vian pasvorton?"
no_account: "Ne ekzistas konto kun ĉi tiu retpoŝtadreso. Se vi atendas inviton, ni plej rapide sendos ilin"
send_password_instructions: "Sendi al mi instrukciojn por restartigi pasvorton"
send_instructions: "Post kelkaj minutoj vi ricevos retpoŝton kun instrukcioj pri kiel restartigi vian pasvorton."
updated: "Vi sukcese ŝanĝis vian pasvorton. Vi nun estas ensalutinta."

View file

@ -62,7 +62,6 @@ es-AR:
new:
email: "Correo electrónico"
forgot_password: "¿Olvidaste tu contraseña?"
no_account: "No hay ninguna cuenta con esta dirección de correo electrónico. Si estás esperando una invitación, te la enviaremos tan pronto como sea posible."
reset_password: "Resetear contraseña"
send_password_instructions: "Enviame instrucciones para cambiar mi contraseña."
no_token: "No puedes acceder a esta página si no vienes de un mensaje de restablecimiento de contraseña. Si vienes de un mensaje de restablecimiento de contraseña, por favor asegúrate de que has utilizado la URL completa proporcionada en el mensaje."

View file

@ -58,7 +58,6 @@ es-CL:
change_password: "Cambiar mi contraseña"
new:
forgot_password: "¿Olvidaste tu contraseña?"
no_account: "No existe una cuenta asociada con ese email. Si estas esperando una invitación, la enviaremos a la brevedad"
send_password_instructions: "Envíame instrucciones para restablecer la contraseña"
no_token: "No puedes acceder a esta página sino viene de un correo electrónico de restablecimiento de contraseña. Si viene de un correo electrónico de restablecimiento de contraseña, por favor asegúrese de que utilizó la URL completa proporcionada."
send_instructions: "Recibirás un correo con instrucciones para restablecer tu contraseña en pocos minutos."

View file

@ -52,7 +52,6 @@ es-MX:
new:
email: "Dirección de correo electrónico"
forgot_password: "¿Olvidaste tu contraseña?"
no_account: "No existe una cuenta con este correo electrónico."
reset_password: "Restablecer contraseña"
send_password_instructions: "Envíame instrucciones para restablecer la contraseña."
send_instructions: "Recibirás un correo electrónico con instrucciones para restablecer tu contraseña dentro de pocos minutos."

View file

@ -62,7 +62,6 @@ es:
new:
email: "Dirección de correo"
forgot_password: "¿Has olvidado tu contraseña?"
no_account: "No existe una cuenta con ese correo"
reset_password: "Resetear contraseña"
send_password_instructions: "Envíame instrucciones para restablecer la contraseña"
no_token: "No puedes acceder a esta página sin venir un correo de reseteo de contraseña. Si vienes de uno de estos correos, por favor asegúrate de utilizar la URL proporcionada."

View file

@ -42,7 +42,6 @@ et:
change_password: "Muuda parooli"
new:
forgot_password: "Unustasid parooli?"
no_account: "Sellise e-mailiga kontot pole. Kui sa ootad kutset, siis saadame selle esimesel võimalusel"
send_password_instructions: "Saada mulle juhised salasõna lähtestamiseks."
send_instructions: "Mõne minuti jooksul saad e-kirja juhistega oma parooli muutmiseks."
updated: "Sinu parool on edukalt muudetud. Oled nüüd sisse logitud."

View file

@ -50,7 +50,6 @@ eu:
change_password: "Nire pasahitza aldatu"
new:
forgot_password: "Pasahitza ahaztu duzu?"
no_account: "Ez da konturik e-posta horrekin. Gonbidapen baten zain bazaude, ahal dugun azkarren bidaliko dizugu bat"
send_password_instructions: "Bidali iezadazu pasahitzaren berrezarpenerako argibideak"
send_instructions: "Hurrengo minutuetan email bat jasoko dituzu pasahitza berrezartzeko argibideekin."
updated: "Zure pasahitza arrakastaz aldatu duzu. Autentikatuta zaude orain."

View file

@ -59,7 +59,6 @@ fi:
new:
email: "Sähköpostiosoite"
forgot_password: "Unohditko salasanasi?"
no_account: "Tunnusta tälle sähköpostiosoitteelle ei ole olemassa."
reset_password: "Vaihda salasana"
send_password_instructions: "Lähetä minulle salasanan uudelleenasettamisohjeet"
send_instructions: "Saat hetken päästä sähköpostiisi ohjeet siitä, miten voit asettaa salasanasi uudelleen."

View file

@ -62,7 +62,6 @@ fr:
new:
email: "Adresse E-mail"
forgot_password: "Mot de passe oublié ?"
no_account: "Aucun compte n'est associé à cette adresse de courrier électronique."
reset_password: "Réinitialiser le mot de passe"
send_password_instructions: "Envoyer les instructions de réinitialisation de mot de passe"
no_token: "Vous ne pouvez accéder à cette page sans venir d'un e-mail de réinitialisation du mot de passe. Veuillez vérifier que vous avez utiliser l'URL en entier."

View file

@ -54,7 +54,6 @@ he:
new:
email: "כתובת דוא\"ל"
forgot_password: "שכחת את סיסמתך?"
no_account: "לא קיים חשבון עם כתובת דוא״ל זו"
reset_password: "איפוס סיסמה"
send_password_instructions: "שליחת הנחיות איפוס הססמה אלי"
send_instructions: "בעוד מספר דקות תתקבל בתיבת הדוא״ל שלך הודעה עם הנחיות כיצד לאפס את סיסמתך."

View file

@ -54,7 +54,6 @@ hu:
new:
email: "E-mail cím"
forgot_password: "Elfelejtetted a jelszavad?"
no_account: "Ehhez az e-mail címhez nem tartozik fiók."
reset_password: "Jelszó visszaállítása"
send_password_instructions: "Új jelszót igénylek"
send_instructions: "Néhány perc múlva kapsz egy e-mailt arról, hogyan állíthatod alaphelyzetbe a jelszavadat."

View file

@ -61,7 +61,6 @@ hye-classical:
new:
email: "Էլ․ հասցէ"
forgot_password: "Մոռացե՞լ ես գաղտնաբառդ"
no_account: "Այս էլ.հասցէով հաշիւ չկայ։"
reset_password: "Վերականգնել գաղտնաբառը"
send_password_instructions: "Ուղարկէք ինձ գաղտնաբառը փոխելու ցուցումները"
no_token: "Այս էջը հասանելի է միայն գաղտնաբառը վերականգնելու յղումով նամակից գալու դէպքում։ Եթէ հէնց այդտեղից է, որ եկել ես, հաւաստիացիր, որ ամբողջական յղումն ես օգտագործել։"

View file

@ -59,7 +59,6 @@ hye:
new:
email: "Էլ․հասցե"
forgot_password: "Մոռացե՞լ ես գաղտնաբառդ"
no_account: "Այս էլ.հասցեով հաշիվ չկա։"
reset_password: "Վերականգնել գաղտնաբառը"
send_password_instructions: "Ուղարկեք ինձ գաղտնաբառը փոխելու ցուցումները"
no_token: "Այս էջը հասանելի է միայն գաղնաբառը վերականգնելու հղումով նամակից գալու դեպքում։ Եթե հենց այդտեղից է, որ եկել ես, հավաստիացիր, որ ամբողջական հղումն ես օգտագործել։"

View file

@ -62,7 +62,6 @@ ia:
new:
email: "Adresse de e-mail"
forgot_password: "Contrasigno oblidate?"
no_account: "Nulle conto con iste adresse de e-mail existe."
reset_password: "Reinitialisar contrasigno"
send_password_instructions: "Inviar instructiones pro reinitialisar contrasigno"
no_token: "Tu non pote acceder a iste pagina sin venir ab un e-mail pro reinitialisar contrasigno. Si tu de facto veni ab un e-mail pro reinitialisar contrasigno, per favor assecura te de usar le totalitate del URL fornite."

View file

@ -50,7 +50,6 @@ id:
change_password: "Ubah kata sandi saya"
new:
forgot_password: "Lupa kata sandi anda?"
no_account: "Tidak ditemukan akun dengan E-mail ini. Jika anda menunggu invitasi (undangan), kami akan menyebarkannya secepatnya"
send_password_instructions: "Kirimkan saya instruksi untuk membuat ulang kata sandi"
send_instructions: "Anda akan menerima email berisi petunjuk cara membuat ulang kata sandi Anda dalam beberapa menit."
updated: "Kata kunci Anda telah berhasil diubah. Anda sekarang sudah masuk."

Some files were not shown because too many files have changed in this diff Show more