Merge branch 'release/0.7.11.0'

This commit is contained in:
Benjamin Neff 2019-05-13 22:50:35 +02:00
commit dc7c5ffef6
No known key found for this signature in database
GPG key ID: 971464C3F1A90194
141 changed files with 1536 additions and 478 deletions

View file

@ -18,7 +18,7 @@ Metrics/LineLength:
# Too short methods lead to extraction of single-use methods, which can make
# the code easier to read (by naming things), but can also clutter the class
Metrics/MethodLength:
Metrics/MethodLength:
Max: 20
# The guiding principle of classes is SRP, SRP can't be accurately measured by LoC
@ -26,11 +26,17 @@ Metrics/ClassLength:
Max: 1500
Metrics/ModuleLength:
Max: 1500
# Raise AbcSize from 15 to 20
# Raise complexity metrics
Metrics/AbcSize:
Max: 20
Metrics/CyclomaticComplexity:
Max: 20
Metrics/PerceivedComplexity:
Max: 20
# Some blocks are longer.
Metrics/BlockLength:
ExcludedMethods:
@ -88,7 +94,7 @@ Lint/AssignmentInCondition:
AllowSafeAssignment: false
# A specialized exception class will take one or more arguments and construct the message from it.
# So both variants make sense.
# So both variants make sense.
Style/RaiseArgs:
Enabled: false
@ -151,11 +157,11 @@ Lint/ShadowingOuterLocalVariable:
# Check with yard instead.
Style/Documentation:
Enabled: false
Enabled: false
# This is just silly. Calling the argument `other` in all cases makes no sense.
Naming/BinaryOperatorParameterName:
Enabled: false
Enabled: false
# There are valid cases, for example debugging Cucumber steps,
# also they'll fail CI anyway

View file

@ -1,3 +1,17 @@
# 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)
* 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
## Refactor

70
Gemfile
View file

@ -2,32 +2,34 @@
source "https://rubygems.org"
gem "rails", "5.1.6"
gem "rails", "5.1.6.2"
# Legacy Rails features, remove me!
# responders (class level)
gem "responders", "2.4.0"
gem "responders", "2.4.1"
# Appserver
gem "unicorn", "5.4.1", require: false
gem "unicorn", "5.5.0", 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
gem "acts_as_api", "1.0.1"
gem "json", "2.1.0"
gem "json", "2.2.0"
gem "json-schema", "2.8.1"
# Authentication
gem "devise", "4.5.0"
gem "devise", "4.6.1"
gem "devise-two-factor", "3.0.3"
gem "devise_lastseenable", "0.0.6"
gem "rqrcode", "0.10.1"
# Captcha
@ -36,15 +38,15 @@ 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.3"
gem "sidekiq", "5.2.5"
# Scheduled processing
gem "sidekiq-cron", "1.0.4"
gem "sidekiq-cron", "1.1.0"
# Compression
gem "uglifier", "4.1.19"
gem "uglifier", "4.1.20"
# Configuration
@ -57,7 +59,7 @@ gem "rack-cors", "1.0.2", require: "rack/cors"
# CSS
gem "autoprefixer-rails", "8.6.5"
gem "bootstrap-sass", "3.3.7"
gem "bootstrap-sass", "3.4.1"
gem "bootstrap-switch-rails", "3.3.3" # 3.3.4 is broken, see https://github.com/Bttstrp/bootstrap-switch/issues/691
gem "compass-rails", "3.1.0"
gem "sass-rails", "5.0.7"
@ -69,17 +71,17 @@ group :mysql, optional: true do
gem "mysql2", "0.5.2"
end
group :postgresql, optional: true do
gem "pg", "1.1.3"
gem "pg", "1.1.4"
end
gem "activerecord-import", "0.27.0"
gem "activerecord-import", "1.0.1"
# File uploading
gem "carrierwave", "1.2.3"
gem "fog-aws", "3.3.0"
gem "mini_magick", "4.9.2"
gem "carrierwave", "1.3.1"
gem "fog-aws", "3.4.0"
gem "mini_magick", "4.9.3"
# GUID generation
gem "uuid", "2.3.9"
@ -90,7 +92,7 @@ gem "entypo-rails", "3.0.0"
# JavaScript
gem "handlebars_assets", "0.23.2"
gem "handlebars_assets", "0.23.3"
gem "jquery-rails", "4.3.3"
gem "js-routes", "1.4.4"
gem "js_image_paths", "0.1.1"
@ -129,7 +131,7 @@ gem "markdown-it-html5-embed", "1.0.0"
gem "http_accept_language", "2.1.1"
gem "i18n-inflector-rails", "1.0.7"
gem "rails-i18n", "5.1.2"
gem "rails-i18n", "5.1.3"
# Mail
@ -140,7 +142,7 @@ gem "leaflet-rails", "1.3.1"
# Parsing
gem "nokogiri", "1.8.5"
gem "nokogiri", "1.10.1"
gem "open_graph_reader", "0.6.2" # also update User-Agent in features/support/webmock.rb
gem "redcarpet", "3.4.0"
gem "ruby-oembed", "0.12.0"
@ -152,11 +154,11 @@ gem "string-direction", "1.2.1"
# Security Headers
gem "secure_headers", "6.0.0"
gem "secure_headers", "6.1.0"
# Services
gem "omniauth", "1.8.1"
gem "omniauth", "1.9.0"
gem "omniauth-tumblr", "1.2"
gem "omniauth-twitter", "1.4.0"
gem "omniauth-wordpress", "0.2.2"
@ -180,7 +182,7 @@ gem "acts-as-taggable-on", "6.0.0"
# URIs and HTTP
gem "addressable", "2.5.2", require: "addressable/uri"
gem "faraday", "0.15.3"
gem "faraday", "0.15.4"
gem "faraday_middleware", "0.12.2"
gem "faraday-cookie_jar", "0.0.6"
gem "typhoeus", "1.3.1"
@ -188,10 +190,10 @@ gem "typhoeus", "1.3.1"
# Views
gem "gon", "6.2.1"
gem "hamlit", "2.9.1"
gem "hamlit", "2.9.2"
gem "mobile-fu", "1.4.0"
gem "rails-timeago", "2.16.0"
gem "will_paginate", "3.1.6"
gem "rails-timeago", "2.17.1"
gem "will_paginate", "3.1.7"
# Logging
@ -234,7 +236,7 @@ group :production do # we don"t install these on travis to speed up test runs
# Third party asset hosting
gem "asset_sync", "2.5.0", require: false
gem "asset_sync", "2.7.0", require: false
end
group :development do
@ -243,7 +245,7 @@ group :development do
gem "guard-rspec", "4.7.3", require: false
gem "guard-rubocop", "1.3.0", require: false
gem "rb-fsevent", "0.10.3", require: false
gem "rb-inotify", "0.9.10", require: false
gem "rb-inotify", "0.10.0", require: false
# Linters
gem "haml_lint", "0.28.0", require: false
@ -252,7 +254,7 @@ group :development do
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.60.0", require: false
gem "rubocop", "0.66.0", require: false
# Preloading environment
@ -280,7 +282,7 @@ group :test do
# Cucumber (integration tests)
gem "capybara", "3.11.1"
gem "capybara", "3.15.0"
gem "database_cleaner", "1.7.0"
gem "poltergeist", "1.18.1"
@ -289,11 +291,11 @@ group :test do
# General helpers
gem "factory_girl_rails", "4.8.0"
gem "shoulda-matchers", "3.1.2"
gem "shoulda-matchers", "4.0.1"
gem "timecop", "0.9.1"
gem "webmock", "3.4.2", require: false
gem "webmock", "3.5.1", require: false
gem "diaspora_federation-test", "0.2.5"
gem "diaspora_federation-test", "0.2.6"
# Coverage
gem "coveralls", "0.8.22", require: false
@ -301,7 +303,7 @@ end
group :development, :test do
# RSpec (unit tests, some integration tests)
gem "rspec-rails", "3.8.1"
gem "rspec-rails", "3.8.2"
# Cucumber (integration tests)
gem "cucumber-rails", "1.6.0", require: false
@ -313,5 +315,5 @@ group :development, :test do
gem "sinon-rails", "1.15.0"
# For `assigns` in controller specs
gem "rails-controller-testing", "1.0.2"
gem "rails-controller-testing", "1.0.4"
end

View file

@ -2,25 +2,25 @@ GEM
remote: https://rubygems.org/
remote: https://rails-assets.org/
specs:
actioncable (5.1.6)
actionpack (= 5.1.6)
actioncable (5.1.6.2)
actionpack (= 5.1.6.2)
nio4r (~> 2.0)
websocket-driver (~> 0.6.1)
actionmailer (5.1.6)
actionpack (= 5.1.6)
actionview (= 5.1.6)
activejob (= 5.1.6)
actionmailer (5.1.6.2)
actionpack (= 5.1.6.2)
actionview (= 5.1.6.2)
activejob (= 5.1.6.2)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0)
actionpack (5.1.6)
actionview (= 5.1.6)
activesupport (= 5.1.6)
actionpack (5.1.6.2)
actionview (= 5.1.6.2)
activesupport (= 5.1.6.2)
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)
activesupport (= 5.1.6)
actionview (5.1.6.2)
activesupport (= 5.1.6.2)
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)
activesupport (= 5.1.6)
activejob (5.1.6.2)
activesupport (= 5.1.6.2)
globalid (>= 0.3.6)
activemodel (5.1.6)
activesupport (= 5.1.6)
activerecord (5.1.6)
activemodel (= 5.1.6)
activesupport (= 5.1.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)
arel (~> 8.0)
activerecord-import (0.27.0)
activerecord-import (1.0.1)
activerecord (>= 3.2)
activesupport (5.1.6)
activesupport (5.1.6.2)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2)
minitest (~> 5.1)
@ -54,26 +54,28 @@ GEM
public_suffix (>= 2.0.2, < 4.0)
aes_key_wrap (1.0.1)
arel (8.0.0)
asset_sync (2.5.0)
asset_sync (2.7.0)
activemodel (>= 4.1.0)
fog-core
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
backports (3.11.4)
backports (3.12.0)
bcrypt (3.1.12)
bindata (2.4.4)
bootstrap-sass (3.3.7)
bootstrap-sass (3.4.1)
autoprefixer-rails (>= 5.2.1)
sass (>= 3.3.4)
sassc (>= 2.0.0)
bootstrap-switch-rails (3.3.3)
buftok (0.2.0)
builder (3.2.3)
byebug (10.0.2)
capybara (3.11.1)
byebug (11.0.1)
capybara (3.15.0)
addressable
mini_mime (>= 0.1.3)
nokogiri (~> 1.8)
@ -81,11 +83,11 @@ GEM
rack-test (>= 0.6.3)
regexp_parser (~> 1.2)
xpath (~> 3.2)
carrierwave (1.2.3)
carrierwave (1.3.1)
activemodel (>= 4.0.0)
activesupport (>= 4.0.0)
mime-types (>= 1.16)
celluloid (0.17.3)
celluloid (0.17.4)
celluloid-essentials
celluloid-extras
celluloid-fsm
@ -106,7 +108,7 @@ GEM
timers (>= 4.1.1)
celluloid-supervision (0.20.6)
timers (>= 4.1.1)
chunky_png (1.3.10)
chunky_png (1.3.11)
cliver (0.3.2)
coderay (1.1.2)
compass (1.0.3)
@ -125,7 +127,7 @@ GEM
compass (~> 1.0.0)
sass-rails (< 5.1)
sprockets (< 4.0)
concurrent-ruby (1.1.3)
concurrent-ruby (1.1.5)
configurate (0.3.1)
connection_pool (2.2.2)
coveralls (0.8.22)
@ -163,45 +165,52 @@ GEM
cucumber-tag_expressions (1.1.1)
cucumber-wire (0.0.1)
database_cleaner (1.7.0)
devise (4.5.0)
devise (4.6.1)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
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)
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)
erubi (1.7.1)
erubi (1.8.0)
eslintrb (2.1.0)
execjs
multi_json (>= 1.3)
rake
et-orbi (1.1.6)
et-orbi (1.1.7)
tzinfo
ethon (0.11.0)
ethon (0.12.0)
ffi (>= 1.3.0)
excon (0.62.0)
execjs (2.7.0)
@ -217,19 +226,19 @@ GEM
factory_girl_rails (4.8.0)
factory_girl (~> 4.8.0)
railties (>= 3.0.0)
faraday (0.15.3)
faraday (0.15.4)
multipart-post (>= 1.2, < 3)
faraday-cookie_jar (0.0.6)
faraday (>= 0.7.4)
http-cookie (~> 1.0.0)
faraday_middleware (0.12.2)
faraday (>= 0.7.4, < 1.0)
ffi (1.9.25)
ffi (1.10.0)
fixture_builder (0.5.2.rc3)
activerecord (>= 2)
activesupport (>= 2)
hashdiff
fog-aws (3.3.0)
fog-aws (3.4.0)
fog-core (~> 2.1)
fog-json (~> 1.1)
fog-xml (~> 0.1)
@ -246,18 +255,18 @@ GEM
fog-core
nokogiri (>= 1.5.11, < 2.0.0)
formatador (0.2.5)
fugit (1.1.6)
et-orbi (~> 1.1, >= 1.1.6)
fugit (1.1.8)
et-orbi (~> 1.1, >= 1.1.7)
raabro (~> 1.1)
fuubar (2.3.2)
rspec-core (~> 3.0)
ruby-progressbar (~> 1.4)
get_process_mem (0.2.3)
gherkin (5.1.0)
gitlab (4.7.0)
httparty (>= 0.14.0)
terminal-table (>= 1.5.1)
globalid (0.4.1)
gitlab (4.10.0)
httparty (~> 0.14, >= 0.14.0)
terminal-table (~> 1.5, >= 1.5.1)
globalid (0.4.2)
activesupport (>= 4.2.0)
gon (6.2.1)
actionpack (>= 3.0)
@ -289,16 +298,16 @@ GEM
rake (>= 10, < 13)
rubocop (>= 0.50.0)
sysexits (~> 1.1)
hamlit (2.9.1)
hamlit (2.9.2)
temple (>= 0.8.0)
thor
tilt
handlebars_assets (0.23.2)
handlebars_assets (0.23.3)
execjs (~> 2.0)
sprockets (>= 2.0.0)
tilt (>= 1.2)
hashdiff (0.3.7)
hashie (3.5.7)
hashdiff (0.3.8)
hashie (3.6.0)
http (3.3.0)
addressable (~> 2.3)
http-cookie (~> 1.0)
@ -309,11 +318,11 @@ GEM
http-form_data (2.1.1)
http_accept_language (2.1.1)
http_parser.rb (0.6.0)
httparty (0.16.3)
httparty (0.16.4)
mime-types (~> 3.0)
multi_xml (>= 0.5.2)
httpclient (2.8.3)
i18n (1.1.1)
i18n (1.6.0)
concurrent-ruby (~> 1.0)
i18n-inflector (2.6.7)
i18n (>= 0.4.1)
@ -322,7 +331,7 @@ GEM
i18n-inflector (~> 2.6)
railties (>= 3.0.0)
ipaddress (0.8.3)
jaro_winkler (1.5.1)
jaro_winkler (1.5.2)
jasmine (3.3.0)
jasmine-core (~> 3.3.0)
phantomjs
@ -340,9 +349,9 @@ GEM
js_image_paths (0.1.1)
rails (>= 4.0, < 6.0)
sprockets (>= 3.0.0)
json (2.1.0)
json-jwt (1.9.4)
activesupport
json (2.2.0)
json-jwt (1.10.0)
activesupport (>= 4.2)
aes_key_wrap
bindata
json-schema (2.8.1)
@ -350,12 +359,12 @@ GEM
json-schema-rspec (0.0.4)
json-schema (~> 2.5)
rspec
jsonpath (0.9.6)
jsonpath (1.0.1)
multi_json
to_regexp (~> 0.2.1)
jwt (2.1.0)
kgio (2.11.2)
kostya-sigar (2.0.4)
kostya-sigar (2.0.6)
leaflet-rails (1.3.1)
rails (>= 4.2.0)
listen (3.1.5)
@ -384,9 +393,9 @@ GEM
mime-types (3.2.2)
mime-types-data (~> 3.2015)
mime-types-data (3.2018.0812)
mini_magick (4.9.2)
mini_magick (4.9.3)
mini_mime (1.0.1)
mini_portile2 (2.3.0)
mini_portile2 (2.4.0)
minitest (5.11.3)
mobile-fu (1.4.0)
rack-mobile-detect
@ -399,8 +408,8 @@ GEM
naught (1.1.0)
nenv (0.3.0)
nio4r (2.3.1)
nokogiri (1.8.5)
mini_portile2 (~> 2.3.0)
nokogiri (1.10.1)
mini_portile2 (~> 2.4.0)
notiffany (0.1.1)
nenv (~> 0.1)
shellany (~> 0.0)
@ -413,15 +422,15 @@ GEM
rack (>= 1.2, < 3)
octokit (4.13.0)
sawyer (~> 0.8.0, >= 0.5.3)
omniauth (1.8.1)
hashie (>= 3.4.6, < 3.6.0)
omniauth (1.9.0)
hashie (>= 3.4.6, < 3.7.0)
rack (>= 1.6.2, < 3)
omniauth-oauth (1.1.0)
oauth
omniauth (~> 1.0)
omniauth-oauth2 (1.5.0)
omniauth-oauth2 (1.6.0)
oauth2 (~> 1.1)
omniauth (~> 1.2)
omniauth (~> 1.9)
omniauth-tumblr (1.2)
multi_json
omniauth-oauth (~> 1.0)
@ -444,16 +453,15 @@ GEM
validate_url
webfinger (>= 1.0.1)
orm_adapter (0.5.0)
parallel (1.12.1)
parser (2.5.3.0)
parallel (1.14.0)
parser (2.6.2.0)
ast (~> 2.4.0)
pg (1.1.3)
pg (1.1.4)
phantomjs (2.1.1.0)
poltergeist (1.18.1)
capybara (>= 2.1, < 4)
cliver (~> 0.3.1)
websocket-driver (>= 0.2.0)
powerpack (0.1.2)
pronto (0.9.5)
gitlab (~> 4.0, >= 4.0.0)
httparty (>= 0.13.7)
@ -476,9 +484,10 @@ GEM
pry (0.12.2)
coderay (~> 1.1.0)
method_source (~> 0.9.0)
pry-byebug (3.6.0)
byebug (~> 10.0)
pry-byebug (3.7.0)
byebug (~> 11.0)
pry (~> 0.10)
psych (3.1.0)
public_suffix (3.0.3)
raabro (1.1.6)
rack (2.0.6)
@ -495,24 +504,24 @@ GEM
json-jwt (>= 1.9.0)
rack
rack-piwik (0.3.0)
rack-protection (2.0.4)
rack-protection (2.0.5)
rack
rack-rewrite (1.5.1)
rack-ssl (1.4.1)
rack
rack-test (1.1.0)
rack (>= 1.0, < 3)
rails (5.1.6)
actioncable (= 5.1.6)
actionmailer (= 5.1.6)
actionpack (= 5.1.6)
actionview (= 5.1.6)
activejob (= 5.1.6)
activemodel (= 5.1.6)
activerecord (= 5.1.6)
activesupport (= 5.1.6)
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)
bundler (>= 1.3.0)
railties (= 5.1.6)
railties (= 5.1.6.2)
sprockets-rails (>= 2.0.0)
rails-assets-autosize (4.0.2)
rails-assets-backbone (1.3.3)
@ -560,42 +569,45 @@ GEM
rails-assets-markdown-it-sup (1.0.0)
rails-assets-underscore (1.9.1)
rails-assets-utatti-perfect-scrollbar (1.4.0)
rails-controller-testing (1.0.2)
actionpack (~> 5.x, >= 5.0.1)
actionview (~> 5.x, >= 5.0.1)
activesupport (~> 5.x)
rails-controller-testing (1.0.4)
actionpack (>= 5.0.1.x)
actionview (>= 5.0.1.x)
activesupport (>= 5.0.1.x)
rails-dom-testing (2.0.3)
activesupport (>= 4.2.0)
nokogiri (>= 1.6)
rails-html-sanitizer (1.0.4)
loofah (~> 2.2, >= 2.2.2)
rails-i18n (5.1.2)
rails-i18n (5.1.3)
i18n (>= 0.7, < 2)
railties (>= 5.0, < 6)
rails-timeago (2.16.0)
rails-timeago (2.17.1)
actionpack (>= 3.1)
activesupport (>= 3.1)
railties (5.1.6)
actionpack (= 5.1.6)
activesupport (= 5.1.6)
railties (5.1.6.2)
actionpack (= 5.1.6.2)
activesupport (= 5.1.6.2)
method_source
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
rainbow (2.2.2)
rake
raindrops (0.19.0)
rake (12.3.1)
rake (12.3.2)
rb-fsevent (0.10.3)
rb-inotify (0.9.10)
ffi (>= 0.5.0, < 2)
rb-inotify (0.10.0)
ffi (~> 1.0)
redcarpet (3.4.0)
redis (3.3.5)
regexp_parser (1.3.0)
request_store (1.4.1)
rack (>= 1.4)
responders (2.4.0)
actionpack (>= 4.2.0, < 5.3)
railties (>= 4.2.0, < 5.3)
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)
@ -609,7 +621,7 @@ GEM
rspec-mocks (3.8.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.8.0)
rspec-rails (3.8.1)
rspec-rails (3.8.2)
actionpack (>= 3.0)
activesupport (>= 3.0)
railties (>= 3.0)
@ -618,20 +630,20 @@ GEM
rspec-mocks (~> 3.8.0)
rspec-support (~> 3.8.0)
rspec-support (3.8.0)
rubocop (0.60.0)
rubocop (0.66.0)
jaro_winkler (~> 1.5.1)
parallel (~> 1.10)
parser (>= 2.5, != 2.5.1.1)
powerpack (~> 0.1)
psych (>= 3.1.0)
rainbow (>= 2.2.2, < 4.0)
ruby-progressbar (~> 1.7)
unicode-display_width (~> 1.4.0)
unicode-display_width (>= 1.4.0, < 1.6)
ruby-oembed (0.12.0)
ruby-progressbar (1.10.0)
ruby_dep (1.5.0)
rubyzip (1.2.2)
rugged (0.27.5)
safe_yaml (1.0.4)
rugged (0.28.1)
safe_yaml (1.0.5)
sass (3.4.25)
sass-rails (5.0.7)
railties (>= 4.0.0, < 6)
@ -639,21 +651,25 @@ GEM
sprockets (>= 2.8, < 4.0)
sprockets-rails (>= 2.0, < 4.0)
tilt (>= 1.1, < 3)
sassc (2.0.1)
ffi (~> 1.9)
rake
sawyer (0.8.1)
addressable (>= 2.3.5, < 2.6)
faraday (~> 0.8, < 1.0)
scss_lint (0.55.0)
rake (>= 0.9, < 13)
sass (~> 3.4.20)
secure_headers (6.0.0)
secure_headers (6.1.0)
shellany (0.0.1)
shoulda-matchers (3.1.2)
activesupport (>= 4.0.0)
sidekiq (5.2.3)
shoulda-matchers (4.0.1)
activesupport (>= 4.2.0)
sidekiq (5.2.5)
connection_pool (~> 2.2, >= 2.2.2)
rack (>= 1.5.0)
rack-protection (>= 1.5.0)
redis (>= 3.3.5, < 5)
sidekiq-cron (1.0.4)
sidekiq-cron (1.1.0)
fugit (~> 1.1)
sidekiq (>= 4.2.1)
simple_captcha2 (0.4.3)
@ -687,16 +703,16 @@ GEM
httpclient (>= 2.4)
sysexits (1.2.0)
systemu (2.6.5)
temple (0.8.0)
term-ansicolor (1.7.0)
temple (0.8.1)
term-ansicolor (1.7.1)
tins (~> 1.0)
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
thor (0.19.4)
thread_safe (0.3.6)
tilt (2.0.8)
tilt (2.0.9)
timecop (0.9.1)
timers (4.2.0)
timers (4.3.0)
tins (1.20.2)
to_regexp (0.2.1)
turbo_dev_assets (0.0.2)
@ -717,13 +733,13 @@ GEM
ethon (>= 0.9.0)
tzinfo (1.2.5)
thread_safe (~> 0.1)
uglifier (4.1.19)
uglifier (4.1.20)
execjs (>= 0.3.0, < 3)
unf (0.1.4)
unf_ext
unf_ext (0.0.7.5)
unicode-display_width (1.4.0)
unicorn (5.4.1)
unicode-display_width (1.5.0)
unicorn (5.5.0)
kgio (~> 2.6)
raindrops (~> 0.7)
unicorn-worker-killer (0.4.4)
@ -735,9 +751,9 @@ GEM
validate_email (0.1.6)
activemodel (>= 3.0)
mail (>= 2.2.5)
validate_url (1.0.2)
validate_url (1.0.6)
activemodel (>= 3.0.0)
addressable
public_suffix
versionist (1.7.0)
activesupport (>= 3)
railties (>= 3)
@ -747,61 +763,62 @@ GEM
webfinger (1.1.0)
activesupport
httpclient (>= 2.4)
webmock (3.4.2)
webmock (3.5.1)
addressable (>= 2.3.6)
crack (>= 0.3.2)
hashdiff
websocket-driver (0.6.5)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.3)
will_paginate (3.1.6)
will_paginate (3.1.7)
xpath (3.2.0)
nokogiri (~> 1.8)
yard (0.9.16)
yard (0.9.18)
PLATFORMS
ruby
DEPENDENCIES
active_model_serializers (= 0.9.7)
activerecord-import (= 0.27.0)
activerecord-import (= 1.0.1)
acts-as-taggable-on (= 6.0.0)
acts_as_api (= 1.0.1)
addressable (= 2.5.2)
asset_sync (= 2.5.0)
asset_sync (= 2.7.0)
autoprefixer-rails (= 8.6.5)
bootstrap-sass (= 3.3.7)
bootstrap-sass (= 3.4.1)
bootstrap-switch-rails (= 3.3.3)
capybara (= 3.11.1)
carrierwave (= 1.2.3)
capybara (= 3.15.0)
carrierwave (= 1.3.1)
compass-rails (= 3.1.0)
configurate (= 0.3.1)
coveralls (= 0.8.22)
cucumber-api-steps (= 0.14)
cucumber-rails (= 1.6.0)
database_cleaner (= 1.7.0)
devise (= 4.5.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.3)
faraday (= 0.15.4)
faraday-cookie_jar (= 0.0.6)
faraday_middleware (= 0.12.2)
fixture_builder (= 0.5.2.rc3)
fog-aws (= 3.3.0)
fog-aws (= 3.4.0)
fuubar (= 2.3.2)
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.1)
handlebars_assets (= 0.23.2)
hamlit (= 2.9.2)
handlebars_assets (= 0.23.3)
http_accept_language (= 2.1.1)
i18n-inflector-rails (= 1.0.7)
jasmine (= 3.3.0)
@ -809,25 +826,25 @@ DEPENDENCIES
jquery-rails (= 4.3.3)
js-routes (= 1.4.4)
js_image_paths (= 0.1.1)
json (= 2.1.0)
json (= 2.2.0)
json-schema (= 2.8.1)
json-schema-rspec (= 0.0.4)
leaflet-rails (= 1.3.1)
logging-rails (= 0.6.0)
markdown-it-html5-embed (= 1.0.0)
markerb (= 1.1.0)
mini_magick (= 4.9.2)
mini_magick (= 4.9.3)
minitest
mobile-fu (= 1.4.0)
mysql2 (= 0.5.2)
nokogiri (= 1.8.5)
omniauth (= 1.8.1)
nokogiri (= 1.10.1)
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)
pg (= 1.1.3)
pg (= 1.1.4)
poltergeist (= 1.18.1)
pronto (= 0.9.5)
pronto-eslint (= 0.9.1)
@ -841,7 +858,7 @@ DEPENDENCIES
rack-piwik (= 0.3.0)
rack-rewrite (= 1.5.1)
rack-ssl (= 1.4.1)
rails (= 5.1.6)
rails (= 5.1.6.2)
rails-assets-autosize (= 4.0.2)!
rails-assets-backbone (= 1.3.3)!
rails-assets-blueimp-gallery (= 2.33.0)!
@ -864,24 +881,25 @@ DEPENDENCIES
rails-assets-markdown-it-sub (= 1.0.0)!
rails-assets-markdown-it-sup (= 1.0.0)!
rails-assets-utatti-perfect-scrollbar (= 1.4.0)!
rails-controller-testing (= 1.0.2)
rails-i18n (= 5.1.2)
rails-timeago (= 2.16.0)
rails-controller-testing (= 1.0.4)
rails-i18n (= 5.1.3)
rails-timeago (= 2.17.1)
rb-fsevent (= 0.10.3)
rb-inotify (= 0.9.10)
rb-inotify (= 0.10.0)
redcarpet (= 3.4.0)
redis (= 3.3.5)
responders (= 2.4.0)
responders (= 2.4.1)
rqrcode (= 0.10.1)
rspec-json_expectations (~> 2.1)
rspec-rails (= 3.8.1)
rubocop (= 0.60.0)
rspec-rails (= 3.8.2)
rubocop (= 0.66.0)
ruby-oembed (= 0.12.0)
rubyzip (= 1.2.2)
sass-rails (= 5.0.7)
secure_headers (= 6.0.0)
shoulda-matchers (= 3.1.2)
sidekiq (= 5.2.3)
sidekiq-cron (= 1.0.4)
secure_headers (= 6.1.0)
shoulda-matchers (= 4.0.1)
sidekiq (= 5.2.5)
sidekiq-cron (= 1.1.0)
simple_captcha2 (= 0.4.3)
simplecov (= 0.16.1)
sinon-rails (= 1.15.0)
@ -895,13 +913,13 @@ DEPENDENCIES
twitter (= 6.2.0)
twitter-text (= 1.14.7)
typhoeus (= 1.3.1)
uglifier (= 4.1.19)
unicorn (= 5.4.1)
uglifier (= 4.1.20)
unicorn (= 5.5.0)
unicorn-worker-killer (= 0.4.4)
uuid (= 2.3.9)
versionist (= 1.7.0)
webmock (= 3.4.2)
will_paginate (= 3.1.6)
webmock (= 3.5.1)
will_paginate (= 3.1.7)
BUNDLED WITH
1.17.1
1.17.3

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

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

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

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

@ -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
@ -182,4 +183,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

@ -0,0 +1,27 @@
# frozen_string_literal: true
class ManifestController < ApplicationController
def show # rubocop:disable Metrics/MethodLength
render json: {
short_name: AppConfig.settings.pod_name,
name: AppConfig.settings.pod_name,
description: "diaspora* is a free, decentralized and privacy-respecting social network",
icons: [
{
src: helpers.image_path("branding/logos/app-icon.png"),
type: "image/png",
sizes: "192x192"
},
{
src: helpers.image_path("branding/logos/app-icon-512.png"),
type: "image/png",
sizes: "512x512"
}
],
start_url: "/",
background_color: "#000000",
display: "standalone",
theme_color: "#000000"
}
end
end

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(session[:otp_user_id]) if session[:otp_user_id]
User.find_for_authentication(username: params[:user][:username]) if params[:user][:username]
end
def authenticate_with_2fa
self.resource = find_user
u = find_user
return true unless u&.otp_required_for_login?
if params[:user][:otp_attempt].present? && session[:otp_user_id]
authenticate_with_two_factor_via_otp(u)
elsif u&.valid_password?(params[:user][:password])
prompt_for_two_factor(u)
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

@ -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

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

@ -1,10 +1,10 @@
%h2 Resend confirmation instructions
= form_for(resource, :as => resource_name, :url => confirmation_path(resource_name)) do |f|
= devise_error_messages!
= render partial: "devise/shared/error_messages"
%p
= f.label :email
%br/
= f.text_field :email
%p
= f.submit t('.resend_confirmation')
= render :partial => "devise/shared/links"
= render partial: "devise/shared/links"

View file

@ -6,7 +6,7 @@
.login-form
.login-container
= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f|
= devise_error_messages!
= render partial: "devise/shared/error_messages", formats: [:html]
= f.hidden_field :reset_password_token
%fieldset
%legend

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|
- if !devise_error_messages!.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

@ -9,7 +9,7 @@
%fieldset
%legend
=t('devise.passwords.new.forgot_password')
- unless devise_error_messages!.empty?
- unless resource.errors.empty?
%i= t('devise.passwords.new.no_account')
.control-group

View file

@ -1,10 +1,10 @@
%h2 Resend unlock instructions
= form_for(resource, :as => resource_name, :url => unlock_path(resource_name)) do |f|
= devise_error_messages!
= render partial: "devise/shared/error_messages"
%p
= f.label :email
%br/
= f.text_field :email
%p
= f.submit t('.resend_unlock')
= render :partial => "devise/shared/links"
= render partial: "devise/shared/links"

View file

@ -4,7 +4,7 @@
%meta{charset: "utf-8"}/
= content_for?(:meta_data) ? yield(:meta_data) : metas_tags
%meta{content: "yes", name: "mobile-web-app-capable"}/
%link{rel: "manifest", href: "/manifest.json"}
/ favicon
/ For Apple devices

View file

@ -12,7 +12,7 @@
= load_javascript_locales
= include_color_theme
= render "head"
= render "layouts/head"
= translation_missing_warnings
%body{class: "page-#{controller_name} action-#{action_name}"}

View file

@ -9,7 +9,7 @@
= javascript_include_tag "mobile/mobile"
= load_javascript_locales
= render "head"
= render "layouts/head"
= include_color_theme "mobile"
%meta{name: "viewport", content: "width=device-width, minimum-scale=1, maximum-scale=1, user-scalable=no"}/
@ -17,11 +17,6 @@
%meta{name: "MobileOptimized", content: "320"}/
%meta{"http-equiv" => "cleartype", :content => "on"}/
/ iOS mobile web app indicator
/ NOTE(we will enable these once we don't have to rely on back/forward buttons anymore)
/%meta{:name => "apple-mobile-web-app-capable", :content => "yes"}
/%link{:rel => "apple-touch-startup-image", :href => "/images/apple-splash.png"}
%body
#app
= render "layouts/header"

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

@ -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

@ -4,7 +4,7 @@
defaults:
version:
number: "0.7.10.0" # Do not touch unless doing a release, do not backport the version number that's in master
number: "0.7.11.0" # Do not touch unless doing a release, do not backport the version number that's in master
heroku: false
environment:
url: "http://localhost:3000/"

View file

@ -15,6 +15,11 @@ end
# Use this hook to configure devise mailer, warden hooks and so forth.
# Many of these configuration options can be set straight in your model.
Devise.setup do |config|
config.warden do |manager|
manager.default_strategies(scope: :user).unshift :two_factor_authenticatable
manager.default_strategies(scope: :user).unshift :two_factor_backupable
end
# The secret key used by Devise. Devise uses this key to generate
# random tokens. Changing this key will render invalid all existing
# confirmation, reset password and unlock tokens in the database.
@ -92,7 +97,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 +275,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

@ -16,7 +16,8 @@ SecureHeaders::Configuration.default do |config|
media_src: %w[https:],
script_src: %w['self' blob: 'unsafe-eval' platform.twitter.com cdn.syndication.twimg.com widgets.flickr.com
embedr.flickr.com www.instagram.com 'unsafe-inline'],
style_src: %w['self' 'unsafe-inline' platform.twitter.com *.twimg.com]
style_src: %w['self' 'unsafe-inline' platform.twitter.com *.twimg.com],
manifest_src: %w['self']
}
if AppConfig.environment.assets.host.present?

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."

View file

@ -54,7 +54,6 @@ is:
new:
email: "Netfang"
forgot_password: "Gleymdirðu lykilorðinu þínu?"
no_account: "Enginn notandi með þetta netfang ert til"
reset_password: "Endurstilla lykilorð"
send_password_instructions: "Senda mér leiðbeiningar um hvernig ég get endurstillt lykilorðið mitt"
send_instructions: "Þú munt fá tölvupóst innan fárra mínútna, með leiðbeiningum um hvernig þú getur endurstillt lykilorð þitt."

View file

@ -56,7 +56,6 @@ it:
new:
email: "Indirizzo email"
forgot_password: "Hai dimenticato la password?"
no_account: "Non esiste un account con questo indirizzo email"
reset_password: "Azzera password"
send_password_instructions: "Inviami le istruzioni per reimpostare la password."
send_instructions: "Tra pochi minuti riceverai una email con le istruzioni su come cambiare la tua password."

View file

@ -62,7 +62,6 @@ ja:
new:
email: "メールアドレス"
forgot_password: "パスワードを忘れましたか?"
no_account: "このメールアドレスに一致するアカウントは存在しません"
reset_password: "パスワードの再設定"
send_password_instructions: "パスワード再発行の手続きメールを送ってください。"
no_token: "パスワードリセットのメールからではないと、このページにアクセスすることはできません。パスワードリセットのメールから来た場合は、提供された完全なURLを使用していることを確認してください。"

View file

@ -50,7 +50,6 @@ ka:
change_password: "ჩემი პაროლის შეცვლა"
new:
forgot_password: "დაგავიწყდათ თქვენი პაროლი?"
no_account: "ამ ელ-ფოსტით ანგარიში არ არსებობს. თუ თქვენ მოსაწვევს ელოდებით, ჩვენ მათ დაგზავნას რაც შეიძლება მალე მოვახდენთ"
send_password_instructions: "გამომიგზავნეთ პაროლის განახლების ინსტრუქცია"
send_instructions: "თქვენ რამდენიმე წუთში მიიღებთ ელ-ფოსტას ინსტრუქციებით თუ როგორ უნდა შეცვალოთ თქვენი პაროლი."
updated: "პაროლი წარამტებით შეიცვალა. თქვენ ახლა შემოსული ხართ."

View file

@ -54,7 +54,6 @@ ko:
new:
email: "이메일"
forgot_password: "암호를 잊었습니까?"
no_account: "등록되지 않은 이메일 주소입니다."
reset_password: "암호 재설정"
send_password_instructions: "암호 재설정 메일 보내기"
send_instructions: "몇 분 안으로 암호를 초기화하기 위한 이메일이 도착합니다."

View file

@ -50,7 +50,6 @@ lt:
change_password: "Keisti mano slaptažodį"
new:
forgot_password: "Pamiršai slaptažodį?"
no_account: "Tokio el. pašto mūsų sistemoje nėra užregistruota. Laukiančius pakvietimo įspėjame, kad išsiųsime juos kai tik galėsime."
send_password_instructions: "Siųsti nurodymus, kaip atstatyti slaptažodį"
send_instructions: "Netrukus gausite el. laišką su nurodymais, kaip atstatyti slaptažodį."
updated: "Slaptažodis sėkmingai pakeistas. Prisijungta."

View file

@ -46,7 +46,6 @@ mk:
change_password: "Промена на лозинка"
new:
forgot_password: "Ја заборавивте лозинката?"
no_account: "No account with this email exsists. If you are waiting for an invite, we are rolling them out as soon as possible"
send_password_instructions: "Испрати ми ги инструкциите за ресетирање на лозинката"
send_instructions: "За неколку минути ќе добиете е-маил со инструкции за начинот на кој може да ја ресетирате вашата лозинка."
updated: "Вашата лозинка беше успешно променета. Сега сте најавени."

View file

@ -53,7 +53,6 @@ ms:
new:
email: "Alamat emel"
forgot_password: "Lupa kata laluan anda?"
no_account: "Tiada akaun dengan e-mel ini wujud. Jika anda sedang menunggu untuk jemputan, kami memusing mereka secepat mungkin"
reset_password: "Tetapkan semula kata laluan"
send_password_instructions: "Hantar saya arahan menetap semula kata laluan"
send_instructions: "Anda akan menerima e-mel dengan arahan mengenai cara untuk menetapkan semula kata laluan anda dalam beberapa minit."

View file

@ -62,7 +62,6 @@ nb:
new:
email: "E-post"
forgot_password: "Glemt passordet?"
no_account: "Det finnes ingen bruker med denne e-post adressen. Hvis du venter på en invitasjon, sender vi dem ut så snart vi kan."
reset_password: "Resett passord"
send_password_instructions: "Send meg instruksjoner for å tilbakestille passordet"
no_token: "Du kan ikke se denne siden uten å komme fra en e-post for å tilbakestille passord. Dersom du kom fra en e-post for å tilbakestille passord, sørg for at du bruker den fullstendige URL-en som ble oppgitt i e-posten."

View file

@ -37,7 +37,6 @@ nds:
new:
email: "E-Mail-Adress"
forgot_password: "Hest du dien Passwoort vergeten?"
no_account: "Dat gift keen Konto mit disse E-Mail-Adress"
reset_password: "Passwoort trüchsetten"
send_password_instructions: "Schick mi Anwiesungen ton Trüchsetten von mien Passwoort"
updated: "Dien Passwoort is erfolgriek ännert worn. Du bist nu anmeld."

View file

@ -57,7 +57,6 @@ nl:
new:
email: "E-mailadres"
forgot_password: "Wachtwoord vergeten?"
no_account: "Er bestaat geen account met dit e-mailadres"
reset_password: "Herstel wachtwoord"
send_password_instructions: "Stuur mij instructies om mijn wachtwoord te resetten"
send_instructions: "Je ontvangt binnen enkele minuten een e-mail met instructies om je wachtwoord opnieuw in te stellen."

View file

@ -50,7 +50,6 @@ nn:
change_password: "Endra passordet mitt"
new:
forgot_password: "Har du gløymt passordet ditt?"
no_account: "Det finst ingen konto med denne e-postadressa. Om du ventar på ein invitasjon, skal du veta at vi sender dei ut så fort vi kan."
send_password_instructions: "Send meg opplysningar om korleis nullstilla passordet"
send_instructions: "Om ei lita stund vil du få ein e-post med opplysningar om korleis du kan nullstilla passordet ditt."
updated: "Passordet ditt vart endra. Du er no pålogga."

View file

@ -62,7 +62,6 @@ oc:
new:
email: "Adreça de corrièl"
forgot_password: "Avètz oblidat vòstre senhal?"
no_account: "Cap de compte es pas associat a aquesta adreça de corrièr electronic."
reset_password: "Reïnicializar lo senhal"
send_password_instructions: "Mandar las instruccions de reïnicializacion de senhal"
no_token: "Podètz pas accedir a aquesta pagina sens venir d'un corrièl de reïnicializacion de senhal. S'es lo cas, mercés de vos assegurar qu'avètz utilizat l'URL completa."

View file

@ -40,7 +40,6 @@ pa:
change_password: "ਮੇਰਾ ਪਾਸਵਰਡ ਬਦਲੋ"
new:
forgot_password: "ਆਪਣਾ ਪਾਸਵਰਡ ਭੁੱਲ ਗਏ ਹੋ?"
no_account: "No account with this email exsists. If you are waiting for an invite, we are rolling them out as soon as possible"
updated: "ਤੁਹਾਡਾ ਪਾਸਵਰਡ ਠੀਕ ਤਹ੍ਹਾਂ ਬਦਲਿਆ ਗਿਆ ਹੈ। ਹੁਣ ਤੁਸੀਂ ਸਾਈਨ ਇਨ ਕਰ ਸਕਦੇ ਹੋ।"
sessions:
new:

View file

@ -62,7 +62,6 @@ pl:
new:
email: "Adres e-mail"
forgot_password: "Nie pamiętasz hasła?"
no_account: "Konto z podanym adresem e-mail nie istnieje"
reset_password: "Resetuj hasło"
send_password_instructions: "Wyślij mi instrukcję resetowania hasła"
no_token: "Nie możesz pomyślnie odwiedzić tej strony w inny sposób niż poprzez kliknięcie odnośnika w e-mailu resetu hasła. Jeśli znalazłeś się tutaj właśnie przez tego typu e-mail, upewnij się, że kliknąłeś lub wkleiłeś pełny adres URL."

View file

@ -62,7 +62,6 @@ pt-BR:
new:
email: "Endereço de email"
forgot_password: "Esqueceu sua senha?"
no_account: "Não há nenhuma conta com este email"
reset_password: "Resetar senha"
send_password_instructions: "Envie-me instruções para redefinir minha senha."
no_token: "Você só pode acessar esta página a partir de um e-mail de recuperação de senha. Se esse é o caso, certifique-se que usou o URL fornecido completo."

View file

@ -53,7 +53,6 @@ pt-PT:
new:
email: "Endereço de e-mail"
forgot_password: "Esqueceu a sua palavra-passe?"
no_account: "Não existe nenhuma conta com este e-mail."
reset_password: "Redefinir palavra-passe"
send_password_instructions: "Enviem-me instruções para redefinir a minha palavra-passe"
send_instructions: "Dentro de alguns minutos irá receber uma mensagem com as instruções sobre como redefinir a sua palavra-passe."

View file

@ -51,7 +51,6 @@ ro:
change_password: "Schimbă-mi parola"
new:
forgot_password: "Aţi uitat parola?"
no_account: "Nici un cont cu acest e-mail există. Dacă sunteţi în aşteptare pentru o invitaţie, le vom trimite cât mai curând posibil.\n"
send_password_instructions: "Trimite-mi instrucţiunile pentru a reseta parola"
send_instructions: "În scurt timp veți primi un email cu instrucțiuni pentru resetarea parolei."
updated: "Parolă schimbată cu success. Sunteți acum autentificat(ă)."

View file

@ -62,7 +62,6 @@ ru:
new:
email: "E-mail"
forgot_password: "Забыли пароль?"
no_account: "Аккаунт с таким E-mail не существует"
reset_password: "Сброс пароля"
send_password_instructions: "Отправить мне инструкции по сбросу пароля"
no_token: "Эта страница доступна только из письма по сбросу пароля. Если вы пришли по ссылке из такого письма, то удостоверьтесь, что использовали полный путь, указаный в ссылке."

View file

@ -62,7 +62,6 @@ sc:
new:
email: "Indiritzu de p. eletrònica"
forgot_password: "As ismentigadu sa crae tua?"
no_account: "Non b'est unu contu cun custu indiritzu de p. eletrònica"
reset_password: "Torra a impostare sa crae"
send_password_instructions: "Imbia·mi sas istrutziones pro torrare a impostare sa crae"
no_token: "Non podes intrare in custa pàgina chene partire dae una lìtera de posta eletrònica pro s'impostatzione de sa crae. Si benis dae una de cussas lìteras ista atentu a impreare s'URL intreu frunidu."

View file

@ -55,7 +55,6 @@ sk:
new:
email: "E-mailová adresa"
forgot_password: "Zabudol (-la) si heslo?"
no_account: "Účet s takouto e-mailovou adresou neexistuje"
reset_password: "Obnoviť heslo"
send_password_instructions: "Pošlite mi pokyny na zmenu hesla"
no_token: "Na túto stránku sa môžeš dostať iba z e-mailu na obnovenie hesla. Ak ideš z neho, skontroluj, či si zadal/a/ celú URL adresu."

View file

@ -50,7 +50,6 @@ sl:
change_password: "Spremeni geslo"
new:
forgot_password: "Ste pozabili geslo?"
no_account: "Uporabniški račun s tem e-naslovom ne obstaja. V kolikor še čakate na povabilo, vas prosimo za potrpljenje."
send_password_instructions: "Pošlji navodila za ponastavitev gesla"
send_instructions: "V nekaj minutah boste prejeli e-pošto z navodili za ponastavitev vašega gesla."
updated: "Vaše geslo je bilo uspešno spremenjeno. Zdaj ste prijavljeni."

View file

@ -50,7 +50,6 @@ sr:
change_password: "Промени лозинку"
new:
forgot_password: "Заборавили сте лозинку?"
no_account: "Не постоји налог са овим имејлом.  Ако чекаш позивницу, послаћемо је што пре можемо."
send_password_instructions: "Пошаљите ми упутство за промену лозинке."
send_instructions: "За пар минута ћеш примити имејл са упутством како да промениш лозинку."
updated: "Успешно сте променили лозинку. Сада сте пријављени."

View file

@ -62,7 +62,6 @@ sv:
new:
email: "E-postadress"
forgot_password: "Har du glömt ditt lösenord?"
no_account: "Det finns inget konto med den här e-postadressen."
reset_password: "Återställ lösenord"
send_password_instructions: "Skicka information om hur jag återställer lösenordet"
no_token: "Du får inte tillgång till den här sidan utan en länk för att ställa in ett nytt lösenord via e-post. Om du kom hit genom en sådan, kontrollera att de använde hela URL:en som angavs."

View file

@ -54,7 +54,6 @@ te:
new:
email: "ఈమెయిలు చిరునామా"
forgot_password: "మీ సంకేతపదాన్ని మర్చిపోయారా?"
no_account: "ఈ ఈమెయిలుతో ఎటువంటి ఖాతా లేదు"
reset_password: "సంకేతపదం మళ్ళీపెట్టు"
send_password_instructions: "నాకు పాస్వర్డ్ను పునరుద్ధరించడానికి సూచనలను పంపండి"
send_instructions: "మీకు కొన్ని నిమిషాల్లో మీ సంకేతపదాన్ని పునరుద్ధరించడానికి సూచనలతో ఈమెయిల్ వస్తుంది."

View file

@ -50,7 +50,6 @@ tr:
change_password: "Parola değiştirme"
new:
forgot_password: "Parolanızı mı unuttunuz?"
no_account: "Bu e-posta adresiyle alınmış hesap bulunmamaktadır. Eğer bir davetiye için bekliyorsanız, en kısa zamanda size ulaştıracağız."
send_password_instructions: "Bana parola yenileme talimatları gönder"
send_instructions: "Bir kaç dakika içerisinde parolanızı nasıl sıfırlayacağınızııklayan bir e-posta alacaksınız."
updated: "Parolanız değiştirilmiştir. Şu anda giriş yapmış bulunuyorsunuz."

View file

@ -62,7 +62,6 @@ uk:
new:
email: "E-mail"
forgot_password: "Забули пароль?"
no_account: "Аккаунт з таким E-mail не існує"
reset_password: "Зміна паролю"
send_password_instructions: "Відправити мені інструкції зі скидання пароля"
no_token: "Ви не можете отримати доступ до цієї сторінки, не прийшовши скидання пароля з електронної пошти. Якщо ви прийшли з електронної пошти для скидання пароля, будь ласка, переконайтеся, що ви використовували повний URL."

View file

@ -50,7 +50,6 @@ vi:
change_password: "Đổi mật khẩu"
new:
forgot_password: "Quên mật khẩu?"
no_account: "Không có tài khoản nào với địa chỉ thư điện tử này. Nếu bạn đang chờ để được mời, chúng tôi sẽ cố gắng sớm nhất có thể"
send_password_instructions: "Gửi cho tôi hướng dẫn thiết đặt lại mật khẩu"
send_instructions: "Bạn sẽ nhận được thư chứa chỉ dẫn cách thiết lập lại mật khẩu trong ít phút nữa."
updated: "Đã đổi mật khẩu. Bạn đã đăng nhập."

View file

@ -50,7 +50,6 @@ zh-CN:
change_password: "修改密码"
new:
forgot_password: "忘记密码?"
no_account: "暂无与此邮箱关联的帐号。如果您在等待邀请函, 我们将尽快寄出."
send_password_instructions: "请向我发送密码重置步骤"
send_instructions: "几分钟内您将收到一封包含密码重置步骤的邮件。"
updated: "密码修改成功。您已经登入了。"

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