roda-project 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/bin/console +11 -0
- data/bin/roda-project +6 -0
- data/bin/roda-project.rb +9 -0
- data/bin/setup +8 -0
- data/lib/roda/project/cli.rb +134 -0
- data/lib/roda/project/context.rb +136 -0
- data/lib/roda/project/helpers/ids.rb +15 -0
- data/lib/roda/project/helpers/input.rb +20 -0
- data/lib/roda/project/helpers/template.rb +37 -0
- data/lib/roda/project/version.rb +7 -0
- data/lib/roda/project.rb +54 -0
- data/lib/roda/templates/base/app/app.rb.erb +87 -0
- data/lib/roda/templates/base/scaffold/AGENTS.md +9 -0
- data/lib/roda/templates/base/scaffold/Gemfile.erb +51 -0
- data/lib/roda/templates/base/scaffold/Guardfile +25 -0
- data/lib/roda/templates/base/scaffold/README.md +29 -0
- data/lib/roda/templates/base/scaffold/Rakefile.erb +209 -0
- data/lib/roda/templates/base/scaffold/app/config/config.rb.erb +25 -0
- data/lib/roda/templates/base/scaffold/app/config/locales/en.yml +273 -0
- data/lib/roda/templates/base/scaffold/app/config/locales/foo/en.yml +2 -0
- data/lib/roda/templates/base/scaffold/app/config/locales/foo/pt-br.yml +2 -0
- data/lib/roda/templates/base/scaffold/app/config/locales/pt-br.yml +244 -0
- data/lib/roda/templates/base/scaffold/app/config/providers/logger.rb +9 -0
- data/lib/roda/templates/base/scaffold/app/config/providers/mailer.rb +11 -0
- data/lib/roda/templates/base/scaffold/app/routes/foo.rb.erb +7 -0
- data/lib/roda/templates/base/scaffold/boot.rb.erb +35 -0
- data/lib/roda/templates/base/scaffold/config.ru.erb +13 -0
- data/lib/roda/templates/base/scaffold/public/css/app.css +1 -0
- data/lib/roda/templates/base/scaffold/public/exception_page.css +16 -0
- data/lib/roda/templates/base/scaffold/public/images/roda-project.png +0 -0
- data/lib/roda/templates/base/scaffold/public/js/app.js +27 -0
- data/lib/roda/templates/database/app/config/providers/db/conn.rb +15 -0
- data/lib/roda/templates/database/db/seeds.rb +1 -0
- data/lib/roda/templates/front-end/app/assets/css/app.css +20 -0
- data/lib/roda/templates/front-end/app/assets/js/app.js +7 -0
- data/lib/roda/templates/front-end/app/assets/js/some/foo.js +5 -0
- data/lib/roda/templates/front-end/app/views/foo/bar.erb +1 -0
- data/lib/roda/templates/front-end/app/views/foo/html.rb +6 -0
- data/lib/roda/templates/front-end/app/views/html.rb +22 -0
- data/lib/roda/templates/front-end/app/views/index.erb +1 -0
- data/lib/roda/templates/front-end/app/views/layout.erb +13 -0
- data/lib/roda/templates/front-end/esbuild.js +39 -0
- data/lib/roda/templates/front-end/package.json +20 -0
- data/lib/roda/templates/rodauth/app/models/account.rb +2 -0
- data/lib/roda/templates/rodauth/app/views/create-account.erb +9 -0
- data/lib/roda/templates/rodauth/db/migrations/001_add_rodauth.rb +71 -0
- data/lib/roda/templates/tests/minitest/spec/app/app_spec.rb.erb +15 -0
- data/lib/roda/templates/tests/minitest/spec/app/routes/foo_spec.rb +8 -0
- data/lib/roda/templates/tests/minitest/spec/app/routes/test_branch_spec.rb +4 -0
- data/lib/roda/templates/tests/minitest/spec/app/views/html_spec.rb +0 -0
- data/lib/roda/templates/tests/minitest/spec/spec_helper.rb.erb +33 -0
- data/lib/roda/templates/tests/rspec/spec/app/app_spec.rb.erb +15 -0
- data/lib/roda/templates/tests/rspec/spec/app/routes/foo_spec.rb +8 -0
- data/lib/roda/templates/tests/rspec/spec/app/routes/test_branch_spec.rb +4 -0
- data/lib/roda/templates/tests/rspec/spec/app/views/html_spec.rb +0 -0
- data/lib/roda/templates/tests/rspec/spec/spec_helper.rb.erb +19 -0
- metadata +142 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# Rakefile
|
|
2
|
+
|
|
3
|
+
require "fileutils"
|
|
4
|
+
|
|
5
|
+
# List rake tasks
|
|
6
|
+
task :default do
|
|
7
|
+
system("rake -T")
|
|
8
|
+
end
|
|
9
|
+
<% if context.database? %>
|
|
10
|
+
# DB Migrate Task
|
|
11
|
+
namespace :db do
|
|
12
|
+
desc "Migrate the database. Optional: provide target version, e.g., 'rake db:migrate[123]'"
|
|
13
|
+
task :migrate, [:target] do |t, args|
|
|
14
|
+
require_relative "boot"
|
|
15
|
+
require "sequel"
|
|
16
|
+
require "sequel/extensions/migration"
|
|
17
|
+
|
|
18
|
+
Sequel.extension :migration
|
|
19
|
+
db = Providers::DB::Conn.get
|
|
20
|
+
if args[:target]
|
|
21
|
+
Sequel::Migrator.run(db, "db/migrations", target: args[:target].to_i)
|
|
22
|
+
else
|
|
23
|
+
Sequel::Migrator.run(db, "db/migrations")
|
|
24
|
+
end
|
|
25
|
+
puts "Database migration complete."
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
<% end %>
|
|
29
|
+
# Console Task
|
|
30
|
+
desc "Open a console with application context (alias: rake c)"
|
|
31
|
+
task :console do
|
|
32
|
+
system("irb -r ./boot.rb")
|
|
33
|
+
end
|
|
34
|
+
task c: :console
|
|
35
|
+
|
|
36
|
+
# Lint Task
|
|
37
|
+
desc "Run lint"
|
|
38
|
+
task :lint do
|
|
39
|
+
system("bundle exec standardrb")
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Lint Fix Task
|
|
43
|
+
desc "Auto fix lint warnings"
|
|
44
|
+
task "lint:fix" do
|
|
45
|
+
system("bundle exec standardrb --fix")
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Test Task
|
|
49
|
+
desc "Run tests"
|
|
50
|
+
task :test do<% if context.rspec? %>
|
|
51
|
+
system("RACK_ENV=test bundle exec rspec")<% else %>
|
|
52
|
+
system("RACK_ENV=test bundle exec minitest spec/")<% end %>
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Development Server Task
|
|
56
|
+
desc "Exec development server"
|
|
57
|
+
task :dev do
|
|
58
|
+
system("RACK_ENV=development bundle exec puma --port 4000")
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Development Watch Task
|
|
62
|
+
desc "Exec development server watching for changes"
|
|
63
|
+
task "dev:watch" do
|
|
64
|
+
system("RACK_ENV=development bundle exec guard")
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Development Assets Task
|
|
68
|
+
desc "Watch and compile assets"
|
|
69
|
+
task :assets do
|
|
70
|
+
system("npm i && npm run build")
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Development Assets Task
|
|
74
|
+
desc "Watch and compile assets"
|
|
75
|
+
task "assets:watch" do
|
|
76
|
+
system("npm i && npm run build:watch")
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Production Server Task
|
|
80
|
+
desc "Exec production server"
|
|
81
|
+
task :prod do
|
|
82
|
+
if ENV["DATABASE_URL"].nil?
|
|
83
|
+
puts("DATABASE_URL is empty")
|
|
84
|
+
exit 1
|
|
85
|
+
end
|
|
86
|
+
if ENV["SESSION_SECRET"].nil?
|
|
87
|
+
puts("SESSION_SECRET is empty")
|
|
88
|
+
exit 1
|
|
89
|
+
end
|
|
90
|
+
system("RUBYOPT=--yjit RUBY_YJIT_ENABLE=1 RACK_ENV=production bundle exec puma --port 4000")
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Generate Tasks
|
|
94
|
+
namespace :g do<% if context.database? %>
|
|
95
|
+
desc "Generate an empty Sequel migration. Usage: 'rake generate:migration[migration_name]'"
|
|
96
|
+
task :migration, [:migration_name] do |t, args|
|
|
97
|
+
migration_name = args[:migration_name]
|
|
98
|
+
if migration_name.nil? || migration_name.empty?
|
|
99
|
+
puts "Usage: rake generate:migration[migration_name]"
|
|
100
|
+
exit 1
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
migrations_path = File.expand_path("./db/migrations", __dir__)
|
|
104
|
+
FileUtils.mkdir_p(migrations_path) unless File.directory?(migrations_path)
|
|
105
|
+
|
|
106
|
+
existing_migrations = Dir.glob(File.join(migrations_path, "*.rb"))
|
|
107
|
+
max_number = existing_migrations.map do |file|
|
|
108
|
+
File.basename(file).match(/^(\d+)/)&.captures&.first.to_i
|
|
109
|
+
end.max || 0
|
|
110
|
+
next_number = (max_number + 1).to_s.rjust(3, "0")
|
|
111
|
+
|
|
112
|
+
filename = File.join(migrations_path, "#{next_number}_#{migration_name}.rb")
|
|
113
|
+
|
|
114
|
+
content = <<~RUBY
|
|
115
|
+
Sequel.migration do
|
|
116
|
+
up do
|
|
117
|
+
# add your migration here
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
down do
|
|
121
|
+
# remove your migration here
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
RUBY
|
|
125
|
+
|
|
126
|
+
File.write(filename, content)
|
|
127
|
+
puts "Created migration: #{filename}"
|
|
128
|
+
end
|
|
129
|
+
<% end %>
|
|
130
|
+
desc "Generate routes and tests, also generate views if views directory is present. Usage: 'rake generate:routes[branch_name,route1,method:route2]'"
|
|
131
|
+
task :routes, [:branch_name, :routes] do |t, args|
|
|
132
|
+
branch_name = args.branch_name
|
|
133
|
+
routes_list = [args.routes].concat(args.extras)
|
|
134
|
+
|
|
135
|
+
if branch_name.nil? || branch_name.empty? || routes_list.nil? || routes_list.empty?
|
|
136
|
+
puts "Usage: rake generate:routes[branch_name,route1,route2:method]"
|
|
137
|
+
exit 1
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
must_generate_views = Dir.exist?(File.expand_path("../../app/views", __dir__))
|
|
141
|
+
ensure_and_get_path = proc do |path|
|
|
142
|
+
base_path = File.expand_path(path, __dir__)
|
|
143
|
+
full_path_dir = File.join(base_path, File.dirname(branch_name))
|
|
144
|
+
FileUtils.mkdir_p(full_path_dir) unless File.directory?(full_path_dir)
|
|
145
|
+
|
|
146
|
+
base_path
|
|
147
|
+
end
|
|
148
|
+
parse_route_string = proc do
|
|
149
|
+
name, method = route_str.split(":", 2)
|
|
150
|
+
method ||= "get"
|
|
151
|
+
[method, name]
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
# Generate routes
|
|
155
|
+
filename = File.join(ensure_and_get_path.call("../../app/routes"), "#{branch_name}.rb")
|
|
156
|
+
route_definitions = routes_list.map do |route_str|
|
|
157
|
+
method, name = parse_route_string.call(route_str)
|
|
158
|
+
view_line = (method == "get" && must_generate_views) ? "\n view('#{name}')" : ""
|
|
159
|
+
" r.#{method} \"#{name}\" do#{view_line}\n end"
|
|
160
|
+
end.join("\n\n")
|
|
161
|
+
|
|
162
|
+
content = <<~RUBY
|
|
163
|
+
class <%= context.const_project_name %>
|
|
164
|
+
branch "#{branch_name}" do |r|
|
|
165
|
+
#{route_definitions}
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
RUBY
|
|
169
|
+
File.write(filename, content)
|
|
170
|
+
puts "Created routes file: #{filename}"
|
|
171
|
+
|
|
172
|
+
# Generate views
|
|
173
|
+
if must_generate_views
|
|
174
|
+
branch_views_dir = File.join(File.expand_path("../../app/views", __dir__), branch_name)
|
|
175
|
+
FileUtils.mkdir_p(branch_views_dir)
|
|
176
|
+
routes_list.each do |route_str|
|
|
177
|
+
method, name = parse_route_string.call(route_str)
|
|
178
|
+
if method == "get"
|
|
179
|
+
view_filename = File.join(branch_views_dir, "#{name}.erb")
|
|
180
|
+
File.write(view_filename, "")
|
|
181
|
+
puts "Created view file: #{view_filename}"
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# Generate tests
|
|
187
|
+
test_filename = File.join(ensure_and_get_path.call("../../spec/app/routes"), "#{branch_name}_spec.rb")
|
|
188
|
+
nesting_level = branch_name.count("/")
|
|
189
|
+
relative_spec_helper_path = "../" * (2 + nesting_level) + "spec_helper"
|
|
190
|
+
|
|
191
|
+
test_route_definitions = routes_list.map do |route_str|
|
|
192
|
+
method, name = parse_route_string.call(route_str)
|
|
193
|
+
" it \"responds to #{method.upcase} /#{branch_name}/#{name}\" do\n" \
|
|
194
|
+
" #{method} \"/#{branch_name}/#{name}\"\n" \
|
|
195
|
+
" expect(last_response.status).to eq(200)\n" \
|
|
196
|
+
" end"
|
|
197
|
+
end.join("\n")
|
|
198
|
+
|
|
199
|
+
test_content = <<~RUBY
|
|
200
|
+
require_relative "#{relative_spec_helper_path}"
|
|
201
|
+
|
|
202
|
+
describe "Routes for #{branch_name}" do
|
|
203
|
+
#{test_route_definitions}
|
|
204
|
+
end
|
|
205
|
+
RUBY
|
|
206
|
+
File.write(test_filename, test_content)
|
|
207
|
+
puts "Created test file: #{test_filename}"
|
|
208
|
+
end
|
|
209
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Config
|
|
2
|
+
class << self
|
|
3
|
+
def get
|
|
4
|
+
@config ||= {
|
|
5
|
+
secret: ENV["SESSION_SECRET"] || 'DEV-ONLY-8<FQF8HiF)>l0hbPk£vBQ#IrYsoO}14k\l+-/gIU[j}l0hbPk£vBQ#IrY',
|
|
6
|
+
environment:,
|
|
7
|
+
hmac_secret: ENV["RODAUTH_HMAC_SECRET"] || 'DEV-ONLY',
|
|
8
|
+
jwt_secret: ENV["JWT_SECRET"] || 'DEV-ONLY',
|
|
9
|
+
i18n: {
|
|
10
|
+
translations: ["app/config/locales", "app/config/locales/foo"],
|
|
11
|
+
locale: ["en", "pt-br"]
|
|
12
|
+
},<% if context.database? %>
|
|
13
|
+
db: {
|
|
14
|
+
url: not_production? ? <%= context.dev_db_url %> : ENV["DATABASE_URL"]
|
|
15
|
+
}<% end %>
|
|
16
|
+
}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def not_production? = environment != "production"
|
|
20
|
+
|
|
21
|
+
def environment
|
|
22
|
+
ENV["RACK_ENV"] || "development"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
hello:
|
|
2
|
+
message: Hello world
|
|
3
|
+
rodauth:
|
|
4
|
+
#account_expiration_error_flash: You cannot log into this account as it has expired
|
|
5
|
+
#active_sessions_error_flash: This session has been logged out
|
|
6
|
+
#add_recovery_codes_button: Add Authentication Recovery Codes
|
|
7
|
+
#add_recovery_codes_error_flash: Unable to add recovery codes
|
|
8
|
+
#add_recovery_codes_heading: "<h2>Add Additional Recovery Codes</h2>"
|
|
9
|
+
#add_recovery_codes_page_title: Authentication Recovery Codes
|
|
10
|
+
#already_an_account_with_this_login_message: already an account with this login
|
|
11
|
+
#attempt_to_create_unverified_account_error_flash: The account you tried to create is currently awaiting verification
|
|
12
|
+
#attempt_to_login_to_unverified_account_error_flash: The account you tried to login with is currently awaiting verification
|
|
13
|
+
#change_login_button: Change Login
|
|
14
|
+
#change_login_error_flash: There was an error changing your login
|
|
15
|
+
#change_login_needs_verification_notice_flash: An email has been sent to you with a link to verify your login change
|
|
16
|
+
#change_login_notice_flash: Your login has been changed
|
|
17
|
+
#change_login_page_title: Change Login
|
|
18
|
+
#change_password_button: Change Password
|
|
19
|
+
#change_password_error_flash: There was an error changing your password
|
|
20
|
+
#change_password_notice_flash: Your password has been changed
|
|
21
|
+
#change_password_page_title: Change Password
|
|
22
|
+
#close_account_button: Close Account
|
|
23
|
+
#close_account_error_flash: There was an error closing your account
|
|
24
|
+
#close_account_notice_flash: Your account has been closed
|
|
25
|
+
#close_account_page_title: Close Account
|
|
26
|
+
#confirm_password_button: Confirm Password
|
|
27
|
+
#confirm_password_error_flash: There was an error confirming your password
|
|
28
|
+
#confirm_password_link_text: Enter Password
|
|
29
|
+
#confirm_password_notice_flash: Your password has been confirmed
|
|
30
|
+
#confirm_password_page_title: Confirm Password
|
|
31
|
+
#contains_null_byte_message: contains null byte
|
|
32
|
+
create_account_button: Create Account
|
|
33
|
+
#create_account_error_flash: There was an error creating your account
|
|
34
|
+
#create_account_link_text: Create a New Account
|
|
35
|
+
#create_account_notice_flash: Your account has been created
|
|
36
|
+
#create_account_page_title: Create Account
|
|
37
|
+
#email_auth_email_recently_sent_error_flash: An email has recently been sent to you with a link to login
|
|
38
|
+
#email_auth_email_sent_notice_flash: An email has been sent to you with a link to login to your account
|
|
39
|
+
#email_auth_email_subject: Login Link
|
|
40
|
+
#email_auth_error_flash: There was an error logging you in
|
|
41
|
+
#email_auth_page_title: Login
|
|
42
|
+
#email_auth_request_button: Send Login Link Via Email
|
|
43
|
+
#email_auth_request_error_flash: There was an error requesting an email link to authenticate
|
|
44
|
+
#email_subject_prefix: ''
|
|
45
|
+
#expired_jwt_access_token_message: expired JWT access token
|
|
46
|
+
#global_logout_label: Logout all Logged In Sessions?
|
|
47
|
+
#input_field_label_suffix: ''
|
|
48
|
+
#invalid_jwt_format_error_message: invalid JWT format or claim in Authorization header
|
|
49
|
+
#invalid_password_message: invalid password
|
|
50
|
+
#invalid_recovery_code_error_flash: Error authenticating via recovery code
|
|
51
|
+
#invalid_recovery_code_message: Invalid recovery code
|
|
52
|
+
#json_non_post_error_message: non-POST method used in JSON API
|
|
53
|
+
#json_not_accepted_error_message: Unsupported Accept header. Must accept "application/json" or compatible content type
|
|
54
|
+
#jwt_refresh_invalid_token_message: invalid JWT refresh token
|
|
55
|
+
#jwt_refresh_without_access_token_message: no JWT access token provided during refresh
|
|
56
|
+
#login_button: Login
|
|
57
|
+
#login_confirm_label: Confirm %{login_label}
|
|
58
|
+
#login_does_not_meet_requirements_message: invalid login, does not meet requirements
|
|
59
|
+
#login_error_flash: There was an error logging in
|
|
60
|
+
#login_form_footer_links_heading: <h2 class="rodauth-login-form-footer-links-heading">Other Options</h2>
|
|
61
|
+
#login_label: Login
|
|
62
|
+
#login_lockout_error_flash: This account is currently locked out and cannot be logged in to
|
|
63
|
+
#login_not_valid_email_message: not a valid email address
|
|
64
|
+
#login_notice_flash: You have been logged in
|
|
65
|
+
#login_page_title: Login
|
|
66
|
+
#login_too_long_message: maximum %{login_maximum_length} characters
|
|
67
|
+
#login_too_many_bytes_message: maximum %{login_maximum_bytes} bytes
|
|
68
|
+
#login_too_short_message: minimum %{login_minimum_length} characters
|
|
69
|
+
#logins_do_not_match_message: logins do not match
|
|
70
|
+
#logout_button: Logout
|
|
71
|
+
#logout_notice_flash: You have been logged out
|
|
72
|
+
#logout_page_title: Logout
|
|
73
|
+
#multi_phase_login_page_title: Login
|
|
74
|
+
#need_password_notice_flash: Login recognized, please enter your password
|
|
75
|
+
#new_password_label: New Password
|
|
76
|
+
#no_current_sms_code_error_flash: No current SMS code for this account
|
|
77
|
+
#no_matching_email_auth_key_error_flash: 'There was an error logging you in: invalid email authentication key'
|
|
78
|
+
#no_matching_login_message: no matching login
|
|
79
|
+
#no_matching_reset_password_key_error_flash: 'There was an error resetting your password: invalid or expired password reset key'
|
|
80
|
+
#no_matching_unlock_account_key_error_flash: 'There was an error unlocking your account: invalid or expired unlock account key'
|
|
81
|
+
#no_matching_verify_account_key_error_flash: 'There was an error verifying your account: invalid verify account key'
|
|
82
|
+
#no_matching_verify_login_change_key_error_flash: 'There was an error verifying your login change: invalid verify login change key'
|
|
83
|
+
#non_json_request_error_message: Only JSON format requests are allowed
|
|
84
|
+
#otp_already_setup_error_flash: You have already setup TOTP authentication
|
|
85
|
+
#otp_auth_button: Authenticate Using TOTP
|
|
86
|
+
#otp_auth_error_flash: Error logging in via TOTP authentication
|
|
87
|
+
#otp_auth_form_footer: ''
|
|
88
|
+
#otp_auth_label: Authentication Code
|
|
89
|
+
#otp_auth_link_text: Authenticate Using TOTP
|
|
90
|
+
#otp_auth_page_title: Enter Authentication Code
|
|
91
|
+
#otp_disable_button: Disable TOTP Authentication
|
|
92
|
+
#otp_disable_error_flash: Error disabling TOTP authentication
|
|
93
|
+
#otp_disable_link_text: Disable TOTP Authentication
|
|
94
|
+
#otp_disable_notice_flash: TOTP authentication has been disabled
|
|
95
|
+
#otp_disable_page_title: Disable TOTP Authentication
|
|
96
|
+
#otp_disabled_email_subject: TOTP Authentication Disabled
|
|
97
|
+
#otp_invalid_auth_code_message: Invalid authentication code
|
|
98
|
+
#otp_invalid_secret_message: invalid secret
|
|
99
|
+
#otp_locked_out_email_subject: TOTP Authentication Locked Out
|
|
100
|
+
#otp_lockout_error_flash: TOTP authentication code use locked out due to numerous failures
|
|
101
|
+
#otp_provisioning_uri_label: Provisioning URL
|
|
102
|
+
#otp_secret_label: Secret
|
|
103
|
+
#otp_setup_button: Setup TOTP Authentication
|
|
104
|
+
#otp_setup_email_subject: TOTP Authentication Setup
|
|
105
|
+
#otp_setup_error_flash: Error setting up TOTP authentication
|
|
106
|
+
#otp_setup_link_text: Setup TOTP Authentication
|
|
107
|
+
#otp_setup_notice_flash: TOTP authentication is now setup
|
|
108
|
+
#otp_setup_page_title: Setup TOTP Authentication
|
|
109
|
+
#otp_unlock_auth_deadline_passed_error_flash: Deadline past for unlocking TOTP authentication
|
|
110
|
+
#otp_unlock_auth_failure_error_flash: TOTP invalid authentication
|
|
111
|
+
#otp_unlock_auth_not_yet_available_error_flash: TOTP unlock attempt not yet available
|
|
112
|
+
#otp_unlock_auth_success_notice_flash: TOTP successful authentication, more successful authentication needed to unlock
|
|
113
|
+
#otp_unlock_button: Authenticate Using TOTP to Unlock
|
|
114
|
+
#otp_unlock_consecutive_successes_label: Consecutive successful authentications
|
|
115
|
+
#otp_unlock_failed_email_subject: TOTP Authentication Unlocking Failed
|
|
116
|
+
#otp_unlock_form_footer: ''
|
|
117
|
+
#otp_unlock_next_auth_attempt_label: Can attempt next authentication after
|
|
118
|
+
#otp_unlock_next_auth_attempt_refresh_label: Page will automatically refresh when authentication is possible.
|
|
119
|
+
#otp_unlock_next_auth_deadline_label: Deadline for next authentication
|
|
120
|
+
#otp_unlock_not_available_page_title: Must Wait to Unlock TOTP Authentication
|
|
121
|
+
#otp_unlock_not_locked_out_error_flash: TOTP authentication is not currently locked out
|
|
122
|
+
#otp_unlock_page_title: Unlock TOTP Authentication
|
|
123
|
+
#otp_unlock_required_consecutive_successes_label: Required consecutive successful authentications to unlock
|
|
124
|
+
#otp_unlocked_email_subject: TOTP Authentication Unlocked
|
|
125
|
+
#otp_unlocked_notice_flash: TOTP authentication unlocked
|
|
126
|
+
#password_authentication_required_error_flash: You need to confirm your password before continuing
|
|
127
|
+
#password_changed_email_subject: Password Changed
|
|
128
|
+
#password_confirm_label: Confirm %{password_label}
|
|
129
|
+
#password_does_not_meet_requirements_message: invalid password, does not meet requirements
|
|
130
|
+
#password_expiration_error_flash: Your password has expired and needs to be changed
|
|
131
|
+
#password_in_dictionary_message: is a word in a dictionary
|
|
132
|
+
#password_invalid_pattern_message: includes common character sequence
|
|
133
|
+
#password_is_one_of_the_most_common_message: is one of the most common passwords
|
|
134
|
+
#password_label: Password
|
|
135
|
+
#password_not_changeable_yet_error_flash: Your password cannot be changed yet
|
|
136
|
+
#password_not_enough_character_groups_message: does not include uppercase letters, lowercase letters, and numbers
|
|
137
|
+
#password_same_as_previous_password_message: same as previous password
|
|
138
|
+
#password_too_many_repeating_characters_message: contains too many of the same character in a row
|
|
139
|
+
#password_too_long_message: maximum %{password_maximum_length} characters
|
|
140
|
+
#password_too_many_bytes_message: maximum %{password_maximum_bytes} bytes
|
|
141
|
+
#password_too_short_message: minimum %{password_minimum_length} characters
|
|
142
|
+
#passwords_do_not_match_message: passwords do not match
|
|
143
|
+
#recovery_auth_button: Authenticate via Recovery Code
|
|
144
|
+
#recovery_auth_link_text: Authenticate Using Recovery Code
|
|
145
|
+
#recovery_auth_page_title: Enter Authentication Recovery Code
|
|
146
|
+
#recovery_codes_added_notice_flash: Additional authentication recovery codes have been added
|
|
147
|
+
#recovery_codes_label: Recovery Code
|
|
148
|
+
#recovery_codes_link_text: View Authentication Recovery Codes
|
|
149
|
+
#recovery_codes_page_title: View Authentication Recovery Codes
|
|
150
|
+
#remember_button: Change Remember Setting
|
|
151
|
+
#remember_disable_label: Disable Remember Me
|
|
152
|
+
#remember_error_flash: There was an error updating your remember setting
|
|
153
|
+
#remember_forget_label: Forget Me
|
|
154
|
+
#remember_notice_flash: Your remember setting has been updated
|
|
155
|
+
#remember_page_title: Change Remember Setting
|
|
156
|
+
#remember_remember_label: Remember Me
|
|
157
|
+
#require_login_error_flash: Please login to continue
|
|
158
|
+
#resend_verify_account_page_title: Resend Verification Email
|
|
159
|
+
#reset_password_button: Reset Password
|
|
160
|
+
#reset_password_email_recently_sent_error_flash: An email has recently been sent to you with a link to reset your password
|
|
161
|
+
#reset_password_email_sent_notice_flash: An email has been sent to you with a link to reset the password for your account
|
|
162
|
+
#reset_password_email_subject: Reset Password
|
|
163
|
+
#reset_password_error_flash: There was an error resetting your password
|
|
164
|
+
#reset_password_explanatory_text: "<p>If you have forgotten your password, you can request a password reset:</p>"
|
|
165
|
+
#reset_password_notice_flash: Your password has been reset
|
|
166
|
+
#reset_password_notify_email_subject: Password Reset Completed
|
|
167
|
+
#reset_password_page_title: Reset Password
|
|
168
|
+
#reset_password_request_button: Request Password Reset
|
|
169
|
+
#reset_password_request_error_flash: There was an error requesting a password reset
|
|
170
|
+
#reset_password_request_link_text: Forgot Password?
|
|
171
|
+
#reset_password_request_page_title: Request Password Reset
|
|
172
|
+
#same_as_current_login_message: same as current login
|
|
173
|
+
#same_as_existing_password_message: invalid password, same as current password
|
|
174
|
+
#session_expiration_error_flash: This session has expired, please login again
|
|
175
|
+
#single_session_error_flash: This session has been logged out as another session has become active
|
|
176
|
+
#sms_already_setup_error_flash: SMS authentication has already been setup
|
|
177
|
+
#sms_auth_button: Authenticate via SMS Code
|
|
178
|
+
#sms_auth_link_text: Authenticate Using SMS Code
|
|
179
|
+
#sms_auth_page_title: Authenticate via SMS Code
|
|
180
|
+
#sms_code_label: SMS Code
|
|
181
|
+
#sms_confirm_button: Confirm SMS Backup Number
|
|
182
|
+
#sms_confirm_notice_flash: SMS authentication has been setup
|
|
183
|
+
#sms_confirm_page_title: Confirm SMS Backup Number
|
|
184
|
+
#sms_disable_button: Disable Backup SMS Authentication
|
|
185
|
+
#sms_disable_error_flash: Error disabling SMS authentication
|
|
186
|
+
#sms_disable_link_text: Disable SMS Authentication
|
|
187
|
+
#sms_disable_notice_flash: SMS authentication has been disabled
|
|
188
|
+
#sms_disable_page_title: Disable Backup SMS Authentication
|
|
189
|
+
#sms_invalid_code_error_flash: Error authenticating via SMS code
|
|
190
|
+
#sms_invalid_code_message: invalid SMS code
|
|
191
|
+
#sms_invalid_confirmation_code_error_flash: Invalid or out of date SMS confirmation code used, must setup SMS authentication again
|
|
192
|
+
#sms_invalid_phone_message: invalid SMS phone number
|
|
193
|
+
#sms_lockout_error_flash: SMS authentication has been locked out
|
|
194
|
+
#sms_needs_confirmation_error_flash: SMS authentication needs confirmation
|
|
195
|
+
#sms_not_setup_error_flash: SMS authentication has not been setup yet
|
|
196
|
+
#sms_phone_label: Phone Number
|
|
197
|
+
#sms_request_button: Send SMS Code
|
|
198
|
+
#sms_request_notice_flash: SMS authentication code has been sent
|
|
199
|
+
#sms_request_page_title: Send SMS Code
|
|
200
|
+
#sms_setup_button: Setup SMS Backup Number
|
|
201
|
+
#sms_setup_error_flash: Error setting up SMS authentication
|
|
202
|
+
#sms_setup_link_text: Setup Backup SMS Authentication
|
|
203
|
+
#sms_setup_page_title: Setup SMS Backup Number
|
|
204
|
+
#strftime_format: "%F %T"
|
|
205
|
+
#two_factor_already_authenticated_error_flash: You have already been multifactor authenticated
|
|
206
|
+
#two_factor_auth_notice_flash: You have been multifactor authenticated
|
|
207
|
+
#two_factor_auth_page_title: Authenticate Using Additional Factor
|
|
208
|
+
#two_factor_disable_button: Remove All Multifactor Authentication Methods
|
|
209
|
+
#two_factor_disable_error_flash: Unable to remove all multifactor authentication methods
|
|
210
|
+
#two_factor_disable_link_text: Remove All Multifactor Authentication Methods
|
|
211
|
+
#two_factor_disable_notice_flash: All multifactor authentication methods have been disabled
|
|
212
|
+
#two_factor_disable_page_title: Remove All Multifactor Authentication Methods
|
|
213
|
+
#two_factor_manage_page_title: Manage Multifactor Authentication
|
|
214
|
+
#two_factor_need_authentication_error_flash: You need to authenticate via an additional factor before continuing
|
|
215
|
+
#two_factor_not_setup_error_flash: This account has not been setup for multifactor authentication
|
|
216
|
+
#two_factor_remove_heading: "<h2>Remove Multifactor Authentication</h2>"
|
|
217
|
+
#two_factor_setup_heading: "<h2>Setup Multifactor Authentication</h2>"
|
|
218
|
+
#unlock_account_button: Unlock Account
|
|
219
|
+
#unlock_account_email_recently_sent_error_flash: An email has recently been sent to you with a link to unlock the account
|
|
220
|
+
#unlock_account_email_subject: Unlock Account
|
|
221
|
+
#unlock_account_error_flash: There was an error unlocking your account
|
|
222
|
+
#unlock_account_explanatory_text: "<p>This account is currently locked out. You can unlock the account:</p>"
|
|
223
|
+
#unlock_account_notice_flash: Your account has been unlocked
|
|
224
|
+
#unlock_account_page_title: Unlock Account
|
|
225
|
+
#unlock_account_request_button: Request Account Unlock
|
|
226
|
+
#unlock_account_request_explanatory_text: "<p>This account is currently locked out. You can request that the account be unlocked:</p>"
|
|
227
|
+
#unlock_account_request_notice_flash: An email has been sent to you with a link to unlock your account
|
|
228
|
+
#unlock_account_request_page_title: Request Account Unlock
|
|
229
|
+
#unverified_account_message: unverified account, please verify account before logging in
|
|
230
|
+
#unverified_change_login_error_flash: Please verify this account before changing the login
|
|
231
|
+
#verify_account_button: Verify Account
|
|
232
|
+
#verify_account_email_recently_sent_error_flash: An email has recently been sent to you with a link to verify your account
|
|
233
|
+
#verify_account_email_sent_notice_flash: An email has been sent to you with a link to verify your account
|
|
234
|
+
#verify_account_email_subject: Verify Account
|
|
235
|
+
#verify_account_error_flash: Unable to verify account
|
|
236
|
+
#verify_account_notice_flash: Your account has been verified
|
|
237
|
+
#verify_account_page_title: Verify Account
|
|
238
|
+
#verify_account_resend_button: Send Verification Email Again
|
|
239
|
+
#verify_account_resend_error_flash: Unable to resend verify account email
|
|
240
|
+
#verify_account_resend_explanatory_text: "<p>If you no longer have the email to verify the account, you can request that it be resent to you:</p>"
|
|
241
|
+
#verify_account_resend_link_text: Resend Verify Account Information
|
|
242
|
+
#verify_login_change_button: Verify Login Change
|
|
243
|
+
#verify_login_change_duplicate_account_error_flash: Unable to change login as there is already an account with the new login
|
|
244
|
+
#verify_login_change_email_subject: Verify Login Change
|
|
245
|
+
#verify_login_change_error_flash: Unable to verify login change
|
|
246
|
+
#verify_login_change_notice_flash: Your login change has been verified
|
|
247
|
+
#verify_login_change_page_title: Verify Login Change
|
|
248
|
+
#view_recovery_codes_button: View Authentication Recovery Codes
|
|
249
|
+
#view_recovery_codes_error_flash: Unable to view recovery codes
|
|
250
|
+
#webauthn_auth_button: Authenticate Using WebAuthn
|
|
251
|
+
#webauthn_auth_error_flash: Error authenticating using WebAuthn
|
|
252
|
+
#webauthn_auth_link_text: Authenticate Using WebAuthn
|
|
253
|
+
#webauthn_auth_page_title: Authenticate Using WebAuthn
|
|
254
|
+
#webauthn_authenticator_added_email_subject: WebAuthn Authenticator Added
|
|
255
|
+
#webauthn_authenticator_removed_email_subject: WebAuthn Authenticator Removed
|
|
256
|
+
#webauthn_duplicate_webauthn_id_message: attempt to insert duplicate webauthn id
|
|
257
|
+
#webauthn_invalid_auth_param_message: invalid webauthn authentication param
|
|
258
|
+
#webauthn_invalid_remove_param_message: must select valid webauthn authenticator to remove
|
|
259
|
+
#webauthn_invalid_setup_param_message: invalid webauthn setup param
|
|
260
|
+
#webauthn_invalid_sign_count_message: webauthn credential has invalid sign count
|
|
261
|
+
#webauthn_invalid_webauthn_id_message: no webauthn key with given id found
|
|
262
|
+
#webauthn_login_error_flash: There was an error authenticating via WebAuthn
|
|
263
|
+
#webauthn_not_setup_error_flash: This account has not been setup for WebAuthn authentication
|
|
264
|
+
#webauthn_remove_button: Remove WebAuthn Authenticator
|
|
265
|
+
#webauthn_remove_error_flash: Error removing WebAuthn authenticator
|
|
266
|
+
#webauthn_remove_link_text: Remove WebAuthn Authenticator
|
|
267
|
+
#webauthn_remove_notice_flash: WebAuthn authenticator has been removed
|
|
268
|
+
#webauthn_remove_page_title: Remove WebAuthn Authenticator
|
|
269
|
+
#webauthn_setup_button: Setup WebAuthn Authentication
|
|
270
|
+
#webauthn_setup_error_flash: Error setting up WebAuthn authentication
|
|
271
|
+
#webauthn_setup_link_text: Setup WebAuthn Authentication
|
|
272
|
+
#webauthn_setup_notice_flash: WebAuthn authentication is now setup
|
|
273
|
+
#webauthn_setup_page_title: Setup WebAuthn Authentication
|