مراية لـ
https://github.com/postalserver/postal.git
تم المزامنة 2025-12-01 05:43:04 +00:00
chore: upgrade rails to 7.0 and other dependencies
هذا الالتزام موجود في:
12
Gemfile
12
Gemfile
@@ -3,15 +3,12 @@
|
|||||||
source "https://rubygems.org"
|
source "https://rubygems.org"
|
||||||
gem "authie"
|
gem "authie"
|
||||||
gem "autoprefixer-rails"
|
gem "autoprefixer-rails"
|
||||||
gem "basic_ssl"
|
|
||||||
gem "bcrypt"
|
gem "bcrypt"
|
||||||
gem "changey"
|
|
||||||
gem "chronic"
|
gem "chronic"
|
||||||
gem "dotenv-rails"
|
gem "dotenv-rails"
|
||||||
gem "dynamic_form"
|
gem "dynamic_form"
|
||||||
gem "encrypto_signo"
|
gem "encrypto_signo"
|
||||||
gem "execjs", "~> 2.7", "< 2.8"
|
gem "execjs", "~> 2.7", "< 2.8"
|
||||||
gem "foreman"
|
|
||||||
gem "gelf"
|
gem "gelf"
|
||||||
gem "haml"
|
gem "haml"
|
||||||
gem "hashie"
|
gem "hashie"
|
||||||
@@ -26,11 +23,10 @@ gem "nifty-utils"
|
|||||||
gem "nilify_blanks"
|
gem "nilify_blanks"
|
||||||
gem "nio4r"
|
gem "nio4r"
|
||||||
gem "puma"
|
gem "puma"
|
||||||
gem "rails", "= 6.1.7.6"
|
gem "rails", "= 7.0.8.1"
|
||||||
gem "resolv", "~> 0.2.1"
|
gem "resolv"
|
||||||
gem "secure_headers"
|
gem "secure_headers"
|
||||||
gem "sentry-rails"
|
gem "sentry-rails"
|
||||||
gem "sentry-ruby"
|
|
||||||
gem "turbolinks", "~> 5"
|
gem "turbolinks", "~> 5"
|
||||||
|
|
||||||
group :development, :assets do
|
group :development, :assets do
|
||||||
@@ -40,10 +36,6 @@ group :development, :assets do
|
|||||||
gem "uglifier", ">= 1.3.0"
|
gem "uglifier", ">= 1.3.0"
|
||||||
end
|
end
|
||||||
|
|
||||||
group :development, :test do
|
|
||||||
gem "byebug"
|
|
||||||
end
|
|
||||||
|
|
||||||
group :development do
|
group :development do
|
||||||
gem "annotate"
|
gem "annotate"
|
||||||
gem "database_cleaner", require: false
|
gem "database_cleaner", require: false
|
||||||
|
|||||||
181
Gemfile.lock
181
Gemfile.lock
@@ -1,82 +1,85 @@
|
|||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
actioncable (6.1.7.6)
|
actioncable (7.0.8.1)
|
||||||
actionpack (= 6.1.7.6)
|
actionpack (= 7.0.8.1)
|
||||||
activesupport (= 6.1.7.6)
|
activesupport (= 7.0.8.1)
|
||||||
nio4r (~> 2.0)
|
nio4r (~> 2.0)
|
||||||
websocket-driver (>= 0.6.1)
|
websocket-driver (>= 0.6.1)
|
||||||
actionmailbox (6.1.7.6)
|
actionmailbox (7.0.8.1)
|
||||||
actionpack (= 6.1.7.6)
|
actionpack (= 7.0.8.1)
|
||||||
activejob (= 6.1.7.6)
|
activejob (= 7.0.8.1)
|
||||||
activerecord (= 6.1.7.6)
|
activerecord (= 7.0.8.1)
|
||||||
activestorage (= 6.1.7.6)
|
activestorage (= 7.0.8.1)
|
||||||
activesupport (= 6.1.7.6)
|
activesupport (= 7.0.8.1)
|
||||||
mail (>= 2.7.1)
|
mail (>= 2.7.1)
|
||||||
actionmailer (6.1.7.6)
|
net-imap
|
||||||
actionpack (= 6.1.7.6)
|
net-pop
|
||||||
actionview (= 6.1.7.6)
|
net-smtp
|
||||||
activejob (= 6.1.7.6)
|
actionmailer (7.0.8.1)
|
||||||
activesupport (= 6.1.7.6)
|
actionpack (= 7.0.8.1)
|
||||||
|
actionview (= 7.0.8.1)
|
||||||
|
activejob (= 7.0.8.1)
|
||||||
|
activesupport (= 7.0.8.1)
|
||||||
mail (~> 2.5, >= 2.5.4)
|
mail (~> 2.5, >= 2.5.4)
|
||||||
|
net-imap
|
||||||
|
net-pop
|
||||||
|
net-smtp
|
||||||
rails-dom-testing (~> 2.0)
|
rails-dom-testing (~> 2.0)
|
||||||
actionpack (6.1.7.6)
|
actionpack (7.0.8.1)
|
||||||
actionview (= 6.1.7.6)
|
actionview (= 7.0.8.1)
|
||||||
activesupport (= 6.1.7.6)
|
activesupport (= 7.0.8.1)
|
||||||
rack (~> 2.0, >= 2.0.9)
|
rack (~> 2.0, >= 2.2.4)
|
||||||
rack-test (>= 0.6.3)
|
rack-test (>= 0.6.3)
|
||||||
rails-dom-testing (~> 2.0)
|
rails-dom-testing (~> 2.0)
|
||||||
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
||||||
actiontext (6.1.7.6)
|
actiontext (7.0.8.1)
|
||||||
actionpack (= 6.1.7.6)
|
actionpack (= 7.0.8.1)
|
||||||
activerecord (= 6.1.7.6)
|
activerecord (= 7.0.8.1)
|
||||||
activestorage (= 6.1.7.6)
|
activestorage (= 7.0.8.1)
|
||||||
activesupport (= 6.1.7.6)
|
activesupport (= 7.0.8.1)
|
||||||
|
globalid (>= 0.6.0)
|
||||||
nokogiri (>= 1.8.5)
|
nokogiri (>= 1.8.5)
|
||||||
actionview (6.1.7.6)
|
actionview (7.0.8.1)
|
||||||
activesupport (= 6.1.7.6)
|
activesupport (= 7.0.8.1)
|
||||||
builder (~> 3.1)
|
builder (~> 3.1)
|
||||||
erubi (~> 1.4)
|
erubi (~> 1.4)
|
||||||
rails-dom-testing (~> 2.0)
|
rails-dom-testing (~> 2.0)
|
||||||
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
||||||
activejob (6.1.7.6)
|
activejob (7.0.8.1)
|
||||||
activesupport (= 6.1.7.6)
|
activesupport (= 7.0.8.1)
|
||||||
globalid (>= 0.3.6)
|
globalid (>= 0.3.6)
|
||||||
activemodel (6.1.7.6)
|
activemodel (7.0.8.1)
|
||||||
activesupport (= 6.1.7.6)
|
activesupport (= 7.0.8.1)
|
||||||
activerecord (6.1.7.6)
|
activerecord (7.0.8.1)
|
||||||
activemodel (= 6.1.7.6)
|
activemodel (= 7.0.8.1)
|
||||||
activesupport (= 6.1.7.6)
|
activesupport (= 7.0.8.1)
|
||||||
activestorage (6.1.7.6)
|
activestorage (7.0.8.1)
|
||||||
actionpack (= 6.1.7.6)
|
actionpack (= 7.0.8.1)
|
||||||
activejob (= 6.1.7.6)
|
activejob (= 7.0.8.1)
|
||||||
activerecord (= 6.1.7.6)
|
activerecord (= 7.0.8.1)
|
||||||
activesupport (= 6.1.7.6)
|
activesupport (= 7.0.8.1)
|
||||||
marcel (~> 1.0)
|
marcel (~> 1.0)
|
||||||
mini_mime (>= 1.1.0)
|
mini_mime (>= 1.1.0)
|
||||||
activesupport (6.1.7.6)
|
activesupport (7.0.8.1)
|
||||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||||
i18n (>= 1.6, < 2)
|
i18n (>= 1.6, < 2)
|
||||||
minitest (>= 5.1)
|
minitest (>= 5.1)
|
||||||
tzinfo (~> 2.0)
|
tzinfo (~> 2.0)
|
||||||
zeitwerk (~> 2.3)
|
|
||||||
addressable (2.8.6)
|
addressable (2.8.6)
|
||||||
public_suffix (>= 2.0.2, < 6.0)
|
public_suffix (>= 2.0.2, < 6.0)
|
||||||
annotate (3.2.0)
|
annotate (3.2.0)
|
||||||
activerecord (>= 3.2, < 8.0)
|
activerecord (>= 3.2, < 8.0)
|
||||||
rake (>= 10.4, < 14.0)
|
rake (>= 10.4, < 14.0)
|
||||||
ast (2.4.2)
|
ast (2.4.2)
|
||||||
authie (3.4.0)
|
authie (4.1.3)
|
||||||
secure_random_string
|
activerecord (>= 6.1, < 8.0)
|
||||||
autoprefixer-rails (10.4.13.0)
|
autoprefixer-rails (10.4.13.0)
|
||||||
execjs (~> 2)
|
execjs (~> 2)
|
||||||
basic_ssl (1.0.3)
|
base64 (0.2.0)
|
||||||
bcrypt (3.1.18)
|
bcrypt (3.1.20)
|
||||||
bigdecimal (3.1.6)
|
bigdecimal (3.1.6)
|
||||||
builder (3.2.4)
|
builder (3.2.4)
|
||||||
byebug (11.1.3)
|
|
||||||
changey (1.1.0)
|
|
||||||
activerecord (>= 4.2, < 7)
|
|
||||||
chronic (0.10.2)
|
chronic (0.10.2)
|
||||||
coffee-rails (5.0.0)
|
coffee-rails (5.0.0)
|
||||||
coffee-script (>= 2.2.0)
|
coffee-script (>= 2.2.0)
|
||||||
@@ -96,13 +99,13 @@ GEM
|
|||||||
activerecord (>= 5.a)
|
activerecord (>= 5.a)
|
||||||
database_cleaner-core (~> 2.0.0)
|
database_cleaner-core (~> 2.0.0)
|
||||||
database_cleaner-core (2.0.1)
|
database_cleaner-core (2.0.1)
|
||||||
date (3.3.3)
|
date (3.3.4)
|
||||||
deep_merge (1.2.2)
|
deep_merge (1.2.2)
|
||||||
diff-lcs (1.5.0)
|
diff-lcs (1.5.0)
|
||||||
dotenv (2.8.1)
|
dotenv (3.0.2)
|
||||||
dotenv-rails (2.8.1)
|
dotenv-rails (3.0.2)
|
||||||
dotenv (= 2.8.1)
|
dotenv (= 3.0.2)
|
||||||
railties (>= 3.2)
|
railties (>= 6.1)
|
||||||
dynamic_form (1.3.1)
|
dynamic_form (1.3.1)
|
||||||
actionview (> 5.2.0)
|
actionview (> 5.2.0)
|
||||||
activemodel (> 5.2.0)
|
activemodel (> 5.2.0)
|
||||||
@@ -115,12 +118,11 @@ GEM
|
|||||||
factory_bot (~> 6.4)
|
factory_bot (~> 6.4)
|
||||||
railties (>= 5.0.0)
|
railties (>= 5.0.0)
|
||||||
ffi (1.15.5)
|
ffi (1.15.5)
|
||||||
foreman (0.87.2)
|
|
||||||
gelf (3.1.0)
|
gelf (3.1.0)
|
||||||
json
|
json
|
||||||
globalid (1.2.1)
|
globalid (1.2.1)
|
||||||
activesupport (>= 6.1)
|
activesupport (>= 6.1)
|
||||||
haml (6.1.1)
|
haml (6.3.0)
|
||||||
temple (>= 0.8.2)
|
temple (>= 0.8.2)
|
||||||
thor
|
thor
|
||||||
tilt
|
tilt
|
||||||
@@ -134,7 +136,8 @@ GEM
|
|||||||
railties (>= 4.2.0)
|
railties (>= 4.2.0)
|
||||||
thor (>= 0.14, < 2.0)
|
thor (>= 0.14, < 2.0)
|
||||||
json (2.6.3)
|
json (2.6.3)
|
||||||
jwt (2.7.0)
|
jwt (2.8.0)
|
||||||
|
base64
|
||||||
kaminari (1.2.2)
|
kaminari (1.2.2)
|
||||||
activesupport (>= 4.1.0)
|
activesupport (>= 4.1.0)
|
||||||
kaminari-actionview (= 1.2.2)
|
kaminari-actionview (= 1.2.2)
|
||||||
@@ -161,22 +164,22 @@ GEM
|
|||||||
net-smtp
|
net-smtp
|
||||||
marcel (1.0.2)
|
marcel (1.0.2)
|
||||||
method_source (1.0.0)
|
method_source (1.0.0)
|
||||||
mini_mime (1.1.2)
|
mini_mime (1.1.5)
|
||||||
mini_portile2 (2.8.5)
|
mini_portile2 (2.8.5)
|
||||||
minitest (5.22.2)
|
minitest (5.22.2)
|
||||||
moonrope (2.0.2)
|
moonrope (2.0.2)
|
||||||
deep_merge (~> 1.0)
|
deep_merge (~> 1.0)
|
||||||
json
|
json
|
||||||
rack (>= 1.4)
|
rack (>= 1.4)
|
||||||
mysql2 (0.5.5)
|
mysql2 (0.5.6)
|
||||||
net-imap (0.3.4)
|
net-imap (0.4.10)
|
||||||
date
|
date
|
||||||
net-protocol
|
net-protocol
|
||||||
net-pop (0.1.2)
|
net-pop (0.1.2)
|
||||||
net-protocol
|
net-protocol
|
||||||
net-protocol (0.2.1)
|
net-protocol (0.2.2)
|
||||||
timeout
|
timeout
|
||||||
net-smtp (0.3.3)
|
net-smtp (0.4.0.1)
|
||||||
net-protocol
|
net-protocol
|
||||||
nifty-utils (1.1.7)
|
nifty-utils (1.1.7)
|
||||||
nilify_blanks (1.4.0)
|
nilify_blanks (1.4.0)
|
||||||
@@ -197,24 +200,23 @@ GEM
|
|||||||
puma (6.4.2)
|
puma (6.4.2)
|
||||||
nio4r (~> 2.0)
|
nio4r (~> 2.0)
|
||||||
racc (1.7.3)
|
racc (1.7.3)
|
||||||
rack (2.2.8)
|
rack (2.2.8.1)
|
||||||
rack-test (2.1.0)
|
rack-test (2.1.0)
|
||||||
rack (>= 1.3)
|
rack (>= 1.3)
|
||||||
rails (6.1.7.6)
|
rails (7.0.8.1)
|
||||||
actioncable (= 6.1.7.6)
|
actioncable (= 7.0.8.1)
|
||||||
actionmailbox (= 6.1.7.6)
|
actionmailbox (= 7.0.8.1)
|
||||||
actionmailer (= 6.1.7.6)
|
actionmailer (= 7.0.8.1)
|
||||||
actionpack (= 6.1.7.6)
|
actionpack (= 7.0.8.1)
|
||||||
actiontext (= 6.1.7.6)
|
actiontext (= 7.0.8.1)
|
||||||
actionview (= 6.1.7.6)
|
actionview (= 7.0.8.1)
|
||||||
activejob (= 6.1.7.6)
|
activejob (= 7.0.8.1)
|
||||||
activemodel (= 6.1.7.6)
|
activemodel (= 7.0.8.1)
|
||||||
activerecord (= 6.1.7.6)
|
activerecord (= 7.0.8.1)
|
||||||
activestorage (= 6.1.7.6)
|
activestorage (= 7.0.8.1)
|
||||||
activesupport (= 6.1.7.6)
|
activesupport (= 7.0.8.1)
|
||||||
bundler (>= 1.15.0)
|
bundler (>= 1.15.0)
|
||||||
railties (= 6.1.7.6)
|
railties (= 7.0.8.1)
|
||||||
sprockets-rails (>= 2.0.0)
|
|
||||||
rails-dom-testing (2.2.0)
|
rails-dom-testing (2.2.0)
|
||||||
activesupport (>= 5.0.0)
|
activesupport (>= 5.0.0)
|
||||||
minitest
|
minitest
|
||||||
@@ -222,16 +224,17 @@ GEM
|
|||||||
rails-html-sanitizer (1.6.0)
|
rails-html-sanitizer (1.6.0)
|
||||||
loofah (~> 2.21)
|
loofah (~> 2.21)
|
||||||
nokogiri (~> 1.14)
|
nokogiri (~> 1.14)
|
||||||
railties (6.1.7.6)
|
railties (7.0.8.1)
|
||||||
actionpack (= 6.1.7.6)
|
actionpack (= 7.0.8.1)
|
||||||
activesupport (= 6.1.7.6)
|
activesupport (= 7.0.8.1)
|
||||||
method_source
|
method_source
|
||||||
rake (>= 12.2)
|
rake (>= 12.2)
|
||||||
thor (~> 1.0)
|
thor (~> 1.0)
|
||||||
|
zeitwerk (~> 2.5)
|
||||||
rainbow (3.1.1)
|
rainbow (3.1.1)
|
||||||
rake (13.1.0)
|
rake (13.1.0)
|
||||||
regexp_parser (2.7.0)
|
regexp_parser (2.7.0)
|
||||||
resolv (0.2.2)
|
resolv (0.3.0)
|
||||||
rexml (3.2.5)
|
rexml (3.2.5)
|
||||||
rouge (4.2.0)
|
rouge (4.2.0)
|
||||||
rspec (3.12.0)
|
rspec (3.12.0)
|
||||||
@@ -283,11 +286,10 @@ GEM
|
|||||||
sprockets-rails
|
sprockets-rails
|
||||||
tilt
|
tilt
|
||||||
secure_headers (6.5.0)
|
secure_headers (6.5.0)
|
||||||
secure_random_string (1.0.0)
|
sentry-rails (5.16.1)
|
||||||
sentry-rails (5.8.0)
|
|
||||||
railties (>= 5.0)
|
railties (>= 5.0)
|
||||||
sentry-ruby (~> 5.8.0)
|
sentry-ruby (~> 5.16.1)
|
||||||
sentry-ruby (5.8.0)
|
sentry-ruby (5.16.1)
|
||||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||||
shoulda-matchers (6.1.0)
|
shoulda-matchers (6.1.0)
|
||||||
activesupport (>= 5.2.0)
|
activesupport (>= 5.2.0)
|
||||||
@@ -298,11 +300,11 @@ GEM
|
|||||||
actionpack (>= 5.2)
|
actionpack (>= 5.2)
|
||||||
activesupport (>= 5.2)
|
activesupport (>= 5.2)
|
||||||
sprockets (>= 3.0.0)
|
sprockets (>= 3.0.0)
|
||||||
temple (0.10.0)
|
temple (0.10.3)
|
||||||
thor (1.3.0)
|
thor (1.3.0)
|
||||||
tilt (2.1.0)
|
tilt (2.3.0)
|
||||||
timecop (0.9.8)
|
timecop (0.9.8)
|
||||||
timeout (0.3.2)
|
timeout (0.4.1)
|
||||||
turbolinks (5.2.1)
|
turbolinks (5.2.1)
|
||||||
turbolinks-source (~> 5.2)
|
turbolinks-source (~> 5.2)
|
||||||
turbolinks-source (5.2.0)
|
turbolinks-source (5.2.0)
|
||||||
@@ -330,10 +332,7 @@ DEPENDENCIES
|
|||||||
annotate
|
annotate
|
||||||
authie
|
authie
|
||||||
autoprefixer-rails
|
autoprefixer-rails
|
||||||
basic_ssl
|
|
||||||
bcrypt
|
bcrypt
|
||||||
byebug
|
|
||||||
changey
|
|
||||||
chronic
|
chronic
|
||||||
coffee-rails (~> 5.0)
|
coffee-rails (~> 5.0)
|
||||||
database_cleaner
|
database_cleaner
|
||||||
@@ -342,7 +341,6 @@ DEPENDENCIES
|
|||||||
encrypto_signo
|
encrypto_signo
|
||||||
execjs (~> 2.7, < 2.8)
|
execjs (~> 2.7, < 2.8)
|
||||||
factory_bot_rails
|
factory_bot_rails
|
||||||
foreman
|
|
||||||
gelf
|
gelf
|
||||||
haml
|
haml
|
||||||
hashie
|
hashie
|
||||||
@@ -358,8 +356,8 @@ DEPENDENCIES
|
|||||||
nilify_blanks
|
nilify_blanks
|
||||||
nio4r
|
nio4r
|
||||||
puma
|
puma
|
||||||
rails (= 6.1.7.6)
|
rails (= 7.0.8.1)
|
||||||
resolv (~> 0.2.1)
|
resolv
|
||||||
rspec
|
rspec
|
||||||
rspec-rails
|
rspec-rails
|
||||||
rubocop
|
rubocop
|
||||||
@@ -367,7 +365,6 @@ DEPENDENCIES
|
|||||||
sass-rails
|
sass-rails
|
||||||
secure_headers
|
secure_headers
|
||||||
sentry-rails
|
sentry-rails
|
||||||
sentry-ruby
|
|
||||||
shoulda-matchers
|
shoulda-matchers
|
||||||
timecop
|
timecop
|
||||||
turbolinks (~> 5)
|
turbolinks (~> 5)
|
||||||
|
|||||||
@@ -109,7 +109,8 @@ class ApplicationController < ActionController::Base
|
|||||||
auth_session.invalidate!
|
auth_session.invalidate!
|
||||||
reset_session
|
reset_session
|
||||||
end
|
end
|
||||||
Authie::Session.start(self, user: user)
|
|
||||||
|
create_auth_session(user)
|
||||||
@current_user = user
|
@current_user = user
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class MessagesController < ApplicationController
|
|||||||
@message.from = "test@#{domain.name}"
|
@message.from = "test@#{domain.name}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@message.subject = "Test Message at #{Time.zone.now.to_s(:long)}"
|
@message.subject = "Test Message at #{Time.zone.now.to_fs(:long)}"
|
||||||
@message.plain_body = "This is a message to test the delivery of messages through Postal."
|
@message.plain_body = "This is a message to test the delivery of messages through Postal."
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -8,13 +8,7 @@ module HasAuthentication
|
|||||||
has_secure_password
|
has_secure_password
|
||||||
|
|
||||||
validates :password, length: { minimum: 8, allow_blank: true }
|
validates :password, length: { minimum: 8, allow_blank: true }
|
||||||
|
before_save :clear_password_reset_token_on_password_change
|
||||||
when_attribute :password_digest, changes_to: :anything do
|
|
||||||
before_save do
|
|
||||||
self.password_reset_token = nil
|
|
||||||
self.password_reset_token_valid_until = nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
class_methods do
|
class_methods do
|
||||||
@@ -42,6 +36,15 @@ module HasAuthentication
|
|||||||
AppMailer.password_reset(self, return_to).deliver
|
AppMailer.password_reset(self, return_to).deliver
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def clear_password_reset_token_on_password_change
|
||||||
|
return unless password_digest_changed?
|
||||||
|
|
||||||
|
self.password_reset_token = nil
|
||||||
|
self.password_reset_token_valid_until = nil
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# -*- SkipSchemaAnnotations
|
# -*- SkipSchemaAnnotations
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ class Credential < ApplicationRecord
|
|||||||
return if type == "SMTP-IP"
|
return if type == "SMTP-IP"
|
||||||
return if persisted?
|
return if persisted?
|
||||||
|
|
||||||
self.key = SecureRandomString.new(24)
|
self.key = SecureRandom.alphanumeric(24)
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_param
|
def to_param
|
||||||
|
|||||||
@@ -61,17 +61,7 @@ class Domain < ApplicationRecord
|
|||||||
|
|
||||||
scope :verified, -> { where.not(verified_at: nil) }
|
scope :verified, -> { where.not(verified_at: nil) }
|
||||||
|
|
||||||
when_attribute :verification_method, changes_to: :anything do
|
before_save :update_verification_token_on_method_change
|
||||||
before_save do
|
|
||||||
if verification_method == "DNS"
|
|
||||||
self.verification_token = Nifty::Utils::RandomString.generate(length: 32)
|
|
||||||
elsif verification_method == "Email"
|
|
||||||
self.verification_token = rand(999_999).to_s.ljust(6, "0")
|
|
||||||
else
|
|
||||||
self.verification_token = nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def verified?
|
def verified?
|
||||||
verified_at.present?
|
verified_at.present?
|
||||||
@@ -168,4 +158,18 @@ class Domain < ApplicationRecord
|
|||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def update_verification_token_on_method_change
|
||||||
|
return unless verification_method_changed?
|
||||||
|
|
||||||
|
if verification_method == "DNS"
|
||||||
|
self.verification_token = Nifty::Utils::RandomString.generate(length: 32)
|
||||||
|
elsif verification_method == "Email"
|
||||||
|
self.verification_token = rand(999_999).to_s.ljust(6, "0")
|
||||||
|
else
|
||||||
|
self.verification_token = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -35,12 +35,7 @@ class Webhook < ApplicationRecord
|
|||||||
scope :enabled, -> { where(enabled: true) }
|
scope :enabled, -> { where(enabled: true) }
|
||||||
|
|
||||||
after_save :save_events
|
after_save :save_events
|
||||||
|
after_save :destroy_events_when_all_events_enabled
|
||||||
when_attribute :all_events, changes_to: true do
|
|
||||||
after_save do
|
|
||||||
webhook_events.destroy_all
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def events
|
def events
|
||||||
@events ||= webhook_events.map(&:event)
|
@events ||= webhook_events.map(&:event)
|
||||||
@@ -50,13 +45,22 @@ class Webhook < ApplicationRecord
|
|||||||
@events = value.map(&:to_s).select(&:present?)
|
@events = value.map(&:to_s).select(&:present?)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
def save_events
|
def save_events
|
||||||
return unless @events
|
return unless @events
|
||||||
|
|
||||||
@events.each do |event|
|
@events.each do |event|
|
||||||
webhook_events.where(event: event).first_or_create!
|
webhook_events.where(event: event).first_or_create!
|
||||||
end
|
end
|
||||||
|
|
||||||
webhook_events.where.not(event: @events).destroy_all
|
webhook_events.where.not(event: @events).destroy_all
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def destroy_events_when_all_events_enabled
|
||||||
|
return unless all_events
|
||||||
|
|
||||||
|
webhook_events.destroy_all
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -63,7 +63,7 @@
|
|||||||
|
|
||||||
%ul.domainList__properties
|
%ul.domainList__properties
|
||||||
- if domain.verified?
|
- if domain.verified?
|
||||||
%li.domainList__verificationTime Verified on #{domain.verified_at.to_s(:long)}
|
%li.domainList__verificationTime Verified on #{domain.verified_at.to_fs(:long)}
|
||||||
- else
|
- else
|
||||||
%li= link_to "Verify this domain", [:verify, organization, @server, domain], :class => "domainList__verificationLink"
|
%li= link_to "Verify this domain", [:verify, organization, @server, domain], :class => "domainList__verificationLink"
|
||||||
%li.domainList__links
|
%li.domainList__links
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
%p
|
%p
|
||||||
This message has been held. By releasing the message, we will allow it to continue on its way to its destination.
|
This message has been held. By releasing the message, we will allow it to continue on its way to its destination.
|
||||||
- if @message.hold_expiry
|
- if @message.hold_expiry
|
||||||
It will be held until #{@message.hold_expiry.to_s(:long)}.
|
It will be held until #{@message.hold_expiry.to_fs(:long)}.
|
||||||
%p.buttonSet
|
%p.buttonSet
|
||||||
= link_to "Release message", retry_organization_server_message_path(organization, @server, message.id), :class => "button button--small", :remote => true, :method => :post
|
= link_to "Release message", retry_organization_server_message_path(organization, @server, message.id), :class => "button button--small", :remote => true, :method => :post
|
||||||
= link_to "Cancel hold", cancel_hold_organization_server_message_path(organization, @server, message.id), :class => "button button--small button--danger", :remote => true, :method => :post
|
= link_to "Cancel hold", cancel_hold_organization_server_message_path(organization, @server, message.id), :class => "button button--small button--danger", :remote => true, :method => :post
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
%li.deliveryList__item
|
%li.deliveryList__item
|
||||||
.deliveryList__top
|
.deliveryList__top
|
||||||
.deliveryList__time
|
.deliveryList__time
|
||||||
= delivery.timestamp.to_s(:long)
|
= delivery.timestamp.to_fs(:long)
|
||||||
.deliveryList__status
|
.deliveryList__status
|
||||||
- if delivery.sent_with_ssl
|
- if delivery.sent_with_ssl
|
||||||
= image_tag 'icons/lock.svg', :class => 'deliveryList__secure'
|
= image_tag 'icons/lock.svg', :class => 'deliveryList__secure'
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
%dd= message.mail_from || "none"
|
%dd= message.mail_from || "none"
|
||||||
|
|
||||||
.messageList__meta
|
.messageList__meta
|
||||||
%p.messageList__timestamp= message.timestamp.in_time_zone.to_s(:long)
|
%p.messageList__timestamp= message.timestamp.in_time_zone.to_fs(:long)
|
||||||
%p.messageList__status
|
%p.messageList__status
|
||||||
- if message.read?
|
- if message.read?
|
||||||
%span.label.label--purple Opened
|
%span.label.label--purple Opened
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
= link_to @message.rcpt_to || "[blank]", send("#{@message.scope}_organization_server_messages_path", organization, @server, :query => "to: #{@message.rcpt_to}"), :class => 'u-link'
|
= link_to @message.rcpt_to || "[blank]", send("#{@message.scope}_organization_server_messages_path", organization, @server, :query => "to: #{@message.rcpt_to}"), :class => 'u-link'
|
||||||
%dl
|
%dl
|
||||||
%dt Received
|
%dt Received
|
||||||
%dd= @message.timestamp.in_time_zone.to_s(:long)
|
%dd= @message.timestamp.in_time_zone.to_fs(:long)
|
||||||
|
|
||||||
.navBar.navBar--tertiary
|
.navBar.navBar--tertiary
|
||||||
%ul
|
%ul
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
- for entry in @entries.reverse
|
- for entry in @entries.reverse
|
||||||
- if entry.is_a?(Postal::MessageDB::Delivery)
|
- if entry.is_a?(Postal::MessageDB::Delivery)
|
||||||
%li.messageActivity__event
|
%li.messageActivity__event
|
||||||
%p.messageActivity__timestamp= entry.timestamp.to_s(:long)
|
%p.messageActivity__timestamp= entry.timestamp.to_fs(:long)
|
||||||
.messageActivity__details.messageActivity--detailsDelivery
|
.messageActivity__details.messageActivity--detailsDelivery
|
||||||
%p.messageActivity__subject
|
%p.messageActivity__subject
|
||||||
=# entry.status.underscore.humanize
|
=# entry.status.underscore.humanize
|
||||||
@@ -21,20 +21,20 @@
|
|||||||
|
|
||||||
- elsif entry.is_a?(Postal::MessageDB::Click)
|
- elsif entry.is_a?(Postal::MessageDB::Click)
|
||||||
%li.messageActivity__event
|
%li.messageActivity__event
|
||||||
%p.messageActivity__timestamp= entry.timestamp.to_s(:long)
|
%p.messageActivity__timestamp= entry.timestamp.to_fs(:long)
|
||||||
.messageActivity__details.messageActivity--detailsClick
|
.messageActivity__details.messageActivity--detailsClick
|
||||||
%p.messageActivity__subject Click for #{entry.url}
|
%p.messageActivity__subject Click for #{entry.url}
|
||||||
%p.messageActivity__extra Clicked from #{entry.ip_address} (#{entry.user_agent})
|
%p.messageActivity__extra Clicked from #{entry.ip_address} (#{entry.user_agent})
|
||||||
|
|
||||||
- elsif entry.is_a?(Postal::MessageDB::Load)
|
- elsif entry.is_a?(Postal::MessageDB::Load)
|
||||||
%li.messageActivity__event
|
%li.messageActivity__event
|
||||||
%p.messageActivity__timestamp= entry.timestamp.to_s(:long)
|
%p.messageActivity__timestamp= entry.timestamp.to_fs(:long)
|
||||||
.messageActivity__details.messageActivity--detailsLoad
|
.messageActivity__details.messageActivity--detailsLoad
|
||||||
%p.messageActivity__subject Message Viewed
|
%p.messageActivity__subject Message Viewed
|
||||||
%p.messageActivity__extra Opened from #{entry.ip_address} (#{entry.user_agent})
|
%p.messageActivity__extra Opened from #{entry.ip_address} (#{entry.user_agent})
|
||||||
|
|
||||||
%li.messageActivity__event
|
%li.messageActivity__event
|
||||||
%p.messageActivity__timestamp= @message.timestamp.to_s(:long)
|
%p.messageActivity__timestamp= @message.timestamp.to_fs(:long)
|
||||||
.messageActivity__details
|
.messageActivity__details
|
||||||
%p.messageActivity__subject
|
%p.messageActivity__subject
|
||||||
Message received by Postal
|
Message received by Postal
|
||||||
|
|||||||
@@ -22,9 +22,9 @@
|
|||||||
%p.suppressionList__address= link_to suppression['address'], outgoing_organization_server_messages_path(organization, @server, :query => "to: #{suppression['address']}")
|
%p.suppressionList__address= link_to suppression['address'], outgoing_organization_server_messages_path(organization, @server, :query => "to: #{suppression['address']}")
|
||||||
%p.suppressionList__reason= suppression['reason'].capitalize
|
%p.suppressionList__reason= suppression['reason'].capitalize
|
||||||
.suppressionList__right
|
.suppressionList__right
|
||||||
%p.suppressionList__timestamp Added #{Time.zone.at(suppression['timestamp']).to_s(:long)}
|
%p.suppressionList__timestamp Added #{Time.zone.at(suppression['timestamp']).to_fs(:long)}
|
||||||
%p.suppressionList__timestamp
|
%p.suppressionList__timestamp
|
||||||
Expires #{Time.zone.at(suppression['keep_until']).to_s(:long)}
|
Expires #{Time.zone.at(suppression['keep_until']).to_fs(:long)}
|
||||||
- if suppression['keep_until'] < Time.now.to_f
|
- if suppression['keep_until'] < Time.now.to_f
|
||||||
%span.u-red expired
|
%span.u-red expired
|
||||||
= render 'shared/message_db_pagination', :data => @suppressions, :name => "suppression"
|
= render 'shared/message_db_pagination', :data => @suppressions, :name => "suppression"
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
%li #{@first_date.strftime("%A at %l%P")} →
|
%li #{@first_date.strftime("%A at %l%P")} →
|
||||||
%li Today at #{Time.now.strftime("%l%P")}
|
%li Today at #{Time.now.strftime("%l%P")}
|
||||||
- else
|
- else
|
||||||
%li #{@first_date.to_date.to_s(:long)} →
|
%li #{@first_date.to_date.to_fs(:long)} →
|
||||||
%li Today
|
%li Today
|
||||||
|
|
||||||
.titleWithLinks.u-margin
|
.titleWithLinks.u-margin
|
||||||
@@ -44,4 +44,3 @@
|
|||||||
%li= link_to "View message queue", [:queue, organization, @server], :class => 'titleWithLinks__link'
|
%li= link_to "View message queue", [:queue, organization, @server], :class => 'titleWithLinks__link'
|
||||||
%li= link_to "View full e-mail history", [:outgoing, organization, @server, :messages], :class => 'titleWithLinks__link'
|
%li= link_to "View full e-mail history", [:outgoing, organization, @server, :messages], :class => 'titleWithLinks__link'
|
||||||
= render 'messages/list', :messages => @messages
|
= render 'messages/list', :messages => @messages
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ Bundler.require(*Rails.groups)
|
|||||||
module Postal
|
module Postal
|
||||||
class Application < Rails::Application
|
class Application < Rails::Application
|
||||||
|
|
||||||
config.load_defaults 6.0
|
config.load_defaults 7.0
|
||||||
|
|
||||||
# Disable most generators
|
# Disable most generators
|
||||||
config.generators do |g|
|
config.generators do |g|
|
||||||
|
|||||||
@@ -2,9 +2,6 @@
|
|||||||
|
|
||||||
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
|
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
|
||||||
|
|
||||||
$stdout.sync = true
|
|
||||||
$stderr.sync = true
|
|
||||||
|
|
||||||
require "bundler/setup" # Set up gems listed in the Gemfile.
|
require "bundler/setup" # Set up gems listed in the Gemfile.
|
||||||
|
|
||||||
require_relative "../lib/postal/config"
|
require_relative "../lib/postal/config"
|
||||||
|
|||||||
26
config/initializers/content_security_policy.rb
Normal file
26
config/initializers/content_security_policy.rb
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
# Be sure to restart your server when you modify this file.
|
||||||
|
|
||||||
|
# Define an application-wide content security policy.
|
||||||
|
# See the Securing Rails Applications Guide for more information:
|
||||||
|
# https://guides.rubyonrails.org/security.html#content-security-policy-header
|
||||||
|
|
||||||
|
# Rails.application.configure do
|
||||||
|
# config.content_security_policy do |policy|
|
||||||
|
# policy.default_src :self, :https
|
||||||
|
# policy.font_src :self, :https, :data
|
||||||
|
# policy.img_src :self, :https, :data
|
||||||
|
# policy.object_src :none
|
||||||
|
# policy.script_src :self, :https
|
||||||
|
# policy.style_src :self, :https
|
||||||
|
# # Specify URI for violation reports
|
||||||
|
# # policy.report_uri "/csp-violation-report-endpoint"
|
||||||
|
# end
|
||||||
|
#
|
||||||
|
# # Generate session nonces for permitted importmap and inline scripts
|
||||||
|
# config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s }
|
||||||
|
# config.content_security_policy_nonce_directives = %w(script-src)
|
||||||
|
#
|
||||||
|
# # Report violations without enforcing the policy.
|
||||||
|
# # config.content_security_policy_report_only = true
|
||||||
|
# end
|
||||||
@@ -2,5 +2,9 @@
|
|||||||
|
|
||||||
# Be sure to restart your server when you modify this file.
|
# Be sure to restart your server when you modify this file.
|
||||||
|
|
||||||
# Configure sensitive parameters which will be filtered from the log file.
|
# Configure parameters to be filtered from the log file. Use this to limit dissemination of
|
||||||
Rails.application.config.filter_parameters += [:password]
|
# sensitive information. See the ActiveSupport::ParameterFilter documentation for supported
|
||||||
|
# notations and behaviors.
|
||||||
|
Rails.application.config.filter_parameters += [
|
||||||
|
:passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
|
||||||
|
]
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
# Be sure to restart your server when you modify this file.
|
|
||||||
#
|
|
||||||
# This file contains migration options to ease your Rails 5.0 upgrade.
|
|
||||||
#
|
|
||||||
# Read the Rails 5.0 release notes for more info on each option.
|
|
||||||
|
|
||||||
# Enable per-form CSRF tokens. Previous versions had false.
|
|
||||||
Rails.application.config.action_controller.per_form_csrf_tokens = true
|
|
||||||
|
|
||||||
# Enable origin-checking CSRF mitigation. Previous versions had false.
|
|
||||||
Rails.application.config.action_controller.forgery_protection_origin_check = true
|
|
||||||
|
|
||||||
# Make Ruby 2.4 preserve the timezone of the receiver when calling `to_time`.
|
|
||||||
# Previous versions had false.
|
|
||||||
ActiveSupport.to_time_preserves_timezone = true
|
|
||||||
|
|
||||||
# Require `belongs_to` associations by default. Previous versions had false.
|
|
||||||
Rails.application.config.active_record.belongs_to_required_by_default = true
|
|
||||||
|
|
||||||
# Configure SSL options to enable HSTS with subdomains. Previous versions had false.
|
|
||||||
Rails.application.config.ssl_options = false
|
|
||||||
142
config/initializers/new_framework_defaults_7_0.rb
Normal file
142
config/initializers/new_framework_defaults_7_0.rb
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
# Be sure to restart your server when you modify this file.
|
||||||
|
#
|
||||||
|
# This file eases your Rails 7.0 framework defaults upgrade.
|
||||||
|
#
|
||||||
|
# Uncomment each configuration one by one to switch to the new default.
|
||||||
|
# Once your application is ready to run with all new defaults, you can remove
|
||||||
|
# this file and set the `config.load_defaults` to `7.0`.
|
||||||
|
#
|
||||||
|
# Read the Guide for Upgrading Ruby on Rails for more info on each option.
|
||||||
|
# https://guides.rubyonrails.org/upgrading_ruby_on_rails.html
|
||||||
|
|
||||||
|
# `button_to` view helper will render `<button>` element, regardless of whether
|
||||||
|
# or not the content is passed as the first argument or as a block.
|
||||||
|
# Rails.application.config.action_view.button_to_generates_button_tag = true
|
||||||
|
|
||||||
|
# `stylesheet_link_tag` view helper will not render the media attribute by default.
|
||||||
|
# Rails.application.config.action_view.apply_stylesheet_media_default = false
|
||||||
|
|
||||||
|
# Change the digest class for the key generators to `OpenSSL::Digest::SHA256`.
|
||||||
|
# Changing this default means invalidate all encrypted messages generated by
|
||||||
|
# your application and, all the encrypted cookies. Only change this after you
|
||||||
|
# rotated all the messages using the key rotator.
|
||||||
|
#
|
||||||
|
# See upgrading guide for more information on how to build a rotator.
|
||||||
|
# https://guides.rubyonrails.org/v7.0/upgrading_ruby_on_rails.html
|
||||||
|
# Rails.application.config.active_support.key_generator_hash_digest_class = OpenSSL::Digest::SHA256
|
||||||
|
|
||||||
|
# Change the digest class for ActiveSupport::Digest.
|
||||||
|
# Changing this default means that for example Etags change and
|
||||||
|
# various cache keys leading to cache invalidation.
|
||||||
|
# Rails.application.config.active_support.hash_digest_class = OpenSSL::Digest::SHA256
|
||||||
|
|
||||||
|
# Don't override ActiveSupport::TimeWithZone.name and use the default Ruby
|
||||||
|
# implementation.
|
||||||
|
# Rails.application.config.active_support.remove_deprecated_time_with_zone_name = true
|
||||||
|
|
||||||
|
# Calls `Rails.application.executor.wrap` around test cases.
|
||||||
|
# This makes test cases behave closer to an actual request or job.
|
||||||
|
# Several features that are normally disabled in test, such as Active Record query cache
|
||||||
|
# and asynchronous queries will then be enabled.
|
||||||
|
# Rails.application.config.active_support.executor_around_test_case = true
|
||||||
|
|
||||||
|
# Set both the `:open_timeout` and `:read_timeout` values for `:smtp` delivery method.
|
||||||
|
# Rails.application.config.action_mailer.smtp_timeout = 5
|
||||||
|
|
||||||
|
# The ActiveStorage video previewer will now use scene change detection to generate
|
||||||
|
# better preview images (rather than the previous default of using the first frame
|
||||||
|
# of the video).
|
||||||
|
# Rails.application.config.active_storage.video_preview_arguments =
|
||||||
|
# "-vf 'select=eq(n\\,0)+eq(key\\,1)+gt(scene\\,0.015),loop=loop=-1:size=2,trim=start_frame=1' -frames:v 1 -f image2"
|
||||||
|
|
||||||
|
# Automatically infer `inverse_of` for associations with a scope.
|
||||||
|
# Rails.application.config.active_record.automatic_scope_inversing = true
|
||||||
|
|
||||||
|
# Raise when running tests if fixtures contained foreign key violations
|
||||||
|
# Rails.application.config.active_record.verify_foreign_keys_for_fixtures = true
|
||||||
|
|
||||||
|
# Disable partial inserts.
|
||||||
|
# This default means that all columns will be referenced in INSERT queries
|
||||||
|
# regardless of whether they have a default or not.
|
||||||
|
# Rails.application.config.active_record.partial_inserts = false
|
||||||
|
|
||||||
|
# Protect from open redirect attacks in `redirect_back_or_to` and `redirect_to`.
|
||||||
|
# Rails.application.config.action_controller.raise_on_open_redirects = true
|
||||||
|
|
||||||
|
# Change the variant processor for Active Storage.
|
||||||
|
# Changing this default means updating all places in your code that
|
||||||
|
# generate variants to use image processing macros and ruby-vips
|
||||||
|
# operations. See the upgrading guide for detail on the changes required.
|
||||||
|
# The `:mini_magick` option is not deprecated; it's fine to keep using it.
|
||||||
|
# Rails.application.config.active_storage.variant_processor = :vips
|
||||||
|
|
||||||
|
# Enable parameter wrapping for JSON.
|
||||||
|
# Previously this was set in an initializer. It's fine to keep using that initializer if you've customized it.
|
||||||
|
# To disable parameter wrapping entirely, set this config to `false`.
|
||||||
|
# Rails.application.config.action_controller.wrap_parameters_by_default = true
|
||||||
|
|
||||||
|
# Specifies whether generated namespaced UUIDs follow the RFC 4122 standard for namespace IDs provided as a
|
||||||
|
# `String` to `Digest::UUID.uuid_v3` or `Digest::UUID.uuid_v5` method calls.
|
||||||
|
#
|
||||||
|
# See https://guides.rubyonrails.org/configuring.html#config-active-support-use-rfc4122-namespaced-uuids for
|
||||||
|
# more information.
|
||||||
|
# Rails.application.config.active_support.use_rfc4122_namespaced_uuids = true
|
||||||
|
|
||||||
|
# Change the default headers to disable browsers' flawed legacy XSS protection.
|
||||||
|
# Rails.application.config.action_dispatch.default_headers = {
|
||||||
|
# "X-Frame-Options" => "SAMEORIGIN",
|
||||||
|
# "X-XSS-Protection" => "0",
|
||||||
|
# "X-Content-Type-Options" => "nosniff",
|
||||||
|
# "X-Download-Options" => "noopen",
|
||||||
|
# "X-Permitted-Cross-Domain-Policies" => "none",
|
||||||
|
# "Referrer-Policy" => "strict-origin-when-cross-origin"
|
||||||
|
# }
|
||||||
|
|
||||||
|
# ** Please read carefully, this must be configured in config/application.rb **
|
||||||
|
# Change the format of the cache entry.
|
||||||
|
# Changing this default means that all new cache entries added to the cache
|
||||||
|
# will have a different format that is not supported by Rails 6.1 applications.
|
||||||
|
# Only change this value after your application is fully deployed to Rails 7.0
|
||||||
|
# and you have no plans to rollback.
|
||||||
|
# When you're ready to change format, add this to `config/application.rb` (NOT this file):
|
||||||
|
# config.active_support.cache_format_version = 7.0
|
||||||
|
|
||||||
|
# Cookie serializer: 2 options
|
||||||
|
#
|
||||||
|
# If you're upgrading and haven't set `cookies_serializer` previously, your cookie serializer
|
||||||
|
# is `:marshal`. The default for new apps is `:json`.
|
||||||
|
#
|
||||||
|
# Rails.application.config.action_dispatch.cookies_serializer = :json
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# To migrate an existing application to the `:json` serializer, use the `:hybrid` option.
|
||||||
|
#
|
||||||
|
# Rails transparently deserializes existing (Marshal-serialized) cookies on read and
|
||||||
|
# re-writes them in the JSON format.
|
||||||
|
#
|
||||||
|
# It is fine to use `:hybrid` long term; you should do that until you're confident *all* your cookies
|
||||||
|
# have been converted to JSON. To keep using `:hybrid` long term, move this config to its own
|
||||||
|
# initializer or to `config/application.rb`.
|
||||||
|
#
|
||||||
|
# Rails.application.config.action_dispatch.cookies_serializer = :hybrid
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# If your cookies can't yet be serialized to JSON, keep using `:marshal` for backward-compatibility.
|
||||||
|
#
|
||||||
|
# If you have configured the serializer elsewhere, you can remove this section of the file.
|
||||||
|
#
|
||||||
|
# See https://guides.rubyonrails.org/action_controller_overview.html#cookies for more information.
|
||||||
|
|
||||||
|
# Change the return value of `ActionDispatch::Request#content_type` to the Content-Type header without modification.
|
||||||
|
# Rails.application.config.action_dispatch.return_only_request_media_type_on_content_type = false
|
||||||
|
|
||||||
|
# Active Storage `has_many_attached` relationships will default to replacing the current collection instead of appending to it.
|
||||||
|
# Thus, to support submitting an empty collection, the `file_field` helper will render an hidden field `include_hidden` by default when `multiple_file_field_include_hidden` is set to `true`.
|
||||||
|
# See https://guides.rubyonrails.org/configuring.html#config-active-storage-multiple-file-field-include-hidden for more information.
|
||||||
|
# Rails.application.config.active_storage.multiple_file_field_include_hidden = true
|
||||||
|
|
||||||
|
# ** Please read carefully, this must be configured in config/application.rb (NOT this file) **
|
||||||
|
# Disables the deprecated #to_s override in some Ruby core classes
|
||||||
|
# See https://guides.rubyonrails.org/configuring.html#config-active-support-disable-to-s-conversion for more information.
|
||||||
|
# config.active_support.disable_to_s_conversion = true
|
||||||
12
config/initializers/permissions_policy.rb
Normal file
12
config/initializers/permissions_policy.rb
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
# Define an application-wide HTTP permissions policy. For further
|
||||||
|
# information see https://developers.google.com/web/updates/2018/06/feature-policy
|
||||||
|
#
|
||||||
|
# Rails.application.config.permissions_policy do |f|
|
||||||
|
# f.camera :none
|
||||||
|
# f.gyroscope :none
|
||||||
|
# f.microphone :none
|
||||||
|
# f.usb :none
|
||||||
|
# f.fullscreen :self
|
||||||
|
# f.payment :self, "https://secure.example.com"
|
||||||
|
# end
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
# This migration comes from authie (originally 20220502180100)
|
||||||
|
class AddTwoFactorRequiredToSessions < ActiveRecord::Migration[6.1]
|
||||||
|
|
||||||
|
def change
|
||||||
|
add_column :authie_sessions, :skip_two_factor, :boolean, default: false
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
# This migration comes from authie (originally 20230627165500)
|
||||||
|
class AddCountriesToAuthieSessions < ActiveRecord::Migration[6.1]
|
||||||
|
|
||||||
|
def change
|
||||||
|
add_column :authie_sessions, :login_ip_country, :string
|
||||||
|
add_column :authie_sessions, :two_factored_ip_country, :string
|
||||||
|
add_column :authie_sessions, :last_activity_ip_country, :string
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
161
db/schema.rb
161
db/schema.rb
@@ -10,23 +10,22 @@
|
|||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 2024_02_14_132253) do
|
ActiveRecord::Schema[7.0].define(version: 2024_02_23_141501) do
|
||||||
|
|
||||||
create_table "additional_route_endpoints", id: :integer, charset: "utf8mb4", collation: "utf8mb4_general_ci", force: :cascade do |t|
|
create_table "additional_route_endpoints", id: :integer, charset: "utf8mb4", collation: "utf8mb4_general_ci", force: :cascade do |t|
|
||||||
t.integer "route_id"
|
t.integer "route_id"
|
||||||
t.string "endpoint_type"
|
t.string "endpoint_type"
|
||||||
t.integer "endpoint_id"
|
t.integer "endpoint_id"
|
||||||
t.datetime "created_at", null: false
|
t.datetime "created_at", precision: nil, null: false
|
||||||
t.datetime "updated_at", null: false
|
t.datetime "updated_at", precision: nil, null: false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "address_endpoints", id: :integer, charset: "utf8mb4", collation: "utf8mb4_general_ci", force: :cascade do |t|
|
create_table "address_endpoints", id: :integer, charset: "utf8mb4", collation: "utf8mb4_general_ci", force: :cascade do |t|
|
||||||
t.integer "server_id"
|
t.integer "server_id"
|
||||||
t.string "uuid"
|
t.string "uuid"
|
||||||
t.string "address"
|
t.string "address"
|
||||||
t.datetime "last_used_at"
|
t.datetime "last_used_at", precision: nil
|
||||||
t.datetime "created_at", null: false
|
t.datetime "created_at", precision: nil, null: false
|
||||||
t.datetime "updated_at", null: false
|
t.datetime "updated_at", precision: nil, null: false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "authie_sessions", id: :integer, charset: "utf8mb4", collation: "utf8mb4_general_ci", force: :cascade do |t|
|
create_table "authie_sessions", id: :integer, charset: "utf8mb4", collation: "utf8mb4_general_ci", force: :cascade do |t|
|
||||||
@@ -35,23 +34,27 @@ ActiveRecord::Schema.define(version: 2024_02_14_132253) do
|
|||||||
t.integer "user_id"
|
t.integer "user_id"
|
||||||
t.boolean "active", default: true
|
t.boolean "active", default: true
|
||||||
t.text "data"
|
t.text "data"
|
||||||
t.datetime "expires_at"
|
t.datetime "expires_at", precision: nil
|
||||||
t.datetime "login_at"
|
t.datetime "login_at", precision: nil
|
||||||
t.string "login_ip"
|
t.string "login_ip"
|
||||||
t.datetime "last_activity_at"
|
t.datetime "last_activity_at", precision: nil
|
||||||
t.string "last_activity_ip"
|
t.string "last_activity_ip"
|
||||||
t.string "last_activity_path"
|
t.string "last_activity_path"
|
||||||
t.string "user_agent"
|
t.string "user_agent"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", precision: nil
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", precision: nil
|
||||||
t.string "user_type"
|
t.string "user_type"
|
||||||
t.integer "parent_id"
|
t.integer "parent_id"
|
||||||
t.datetime "two_factored_at"
|
t.datetime "two_factored_at", precision: nil
|
||||||
t.string "two_factored_ip"
|
t.string "two_factored_ip"
|
||||||
t.integer "requests", default: 0
|
t.integer "requests", default: 0
|
||||||
t.datetime "password_seen_at"
|
t.datetime "password_seen_at", precision: nil
|
||||||
t.string "token_hash"
|
t.string "token_hash"
|
||||||
t.string "host"
|
t.string "host"
|
||||||
|
t.boolean "skip_two_factor", default: false
|
||||||
|
t.string "login_ip_country"
|
||||||
|
t.string "two_factored_ip_country"
|
||||||
|
t.string "last_activity_ip_country"
|
||||||
t.index ["browser_id"], name: "index_authie_sessions_on_browser_id", length: 8
|
t.index ["browser_id"], name: "index_authie_sessions_on_browser_id", length: 8
|
||||||
t.index ["token"], name: "index_authie_sessions_on_token", length: 8
|
t.index ["token"], name: "index_authie_sessions_on_token", length: 8
|
||||||
t.index ["token_hash"], name: "index_authie_sessions_on_token_hash", length: 8
|
t.index ["token_hash"], name: "index_authie_sessions_on_token_hash", length: 8
|
||||||
@@ -64,9 +67,9 @@ ActiveRecord::Schema.define(version: 2024_02_14_132253) do
|
|||||||
t.string "type"
|
t.string "type"
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.text "options"
|
t.text "options"
|
||||||
t.datetime "last_used_at", precision: 6
|
t.datetime "last_used_at"
|
||||||
t.datetime "created_at", precision: 6
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at", precision: 6
|
t.datetime "updated_at"
|
||||||
t.boolean "hold", default: false
|
t.boolean "hold", default: false
|
||||||
t.string "uuid"
|
t.string "uuid"
|
||||||
end
|
end
|
||||||
@@ -77,11 +80,11 @@ ActiveRecord::Schema.define(version: 2024_02_14_132253) do
|
|||||||
t.string "name"
|
t.string "name"
|
||||||
t.string "verification_token"
|
t.string "verification_token"
|
||||||
t.string "verification_method"
|
t.string "verification_method"
|
||||||
t.datetime "verified_at"
|
t.datetime "verified_at", precision: nil
|
||||||
t.text "dkim_private_key"
|
t.text "dkim_private_key"
|
||||||
t.datetime "created_at", precision: 6
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at", precision: 6
|
t.datetime "updated_at"
|
||||||
t.datetime "dns_checked_at", precision: 6
|
t.datetime "dns_checked_at"
|
||||||
t.string "spf_status"
|
t.string "spf_status"
|
||||||
t.string "spf_error"
|
t.string "spf_error"
|
||||||
t.string "dkim_status"
|
t.string "dkim_status"
|
||||||
@@ -109,10 +112,10 @@ ActiveRecord::Schema.define(version: 2024_02_14_132253) do
|
|||||||
t.string "format"
|
t.string "format"
|
||||||
t.boolean "strip_replies", default: false
|
t.boolean "strip_replies", default: false
|
||||||
t.text "error"
|
t.text "error"
|
||||||
t.datetime "disabled_until", precision: 6
|
t.datetime "disabled_until"
|
||||||
t.datetime "last_used_at", precision: 6
|
t.datetime "last_used_at"
|
||||||
t.datetime "created_at", precision: 6
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at", precision: 6
|
t.datetime "updated_at"
|
||||||
t.boolean "include_attachments", default: true
|
t.boolean "include_attachments", default: true
|
||||||
t.integer "timeout"
|
t.integer "timeout"
|
||||||
end
|
end
|
||||||
@@ -121,8 +124,8 @@ ActiveRecord::Schema.define(version: 2024_02_14_132253) do
|
|||||||
t.integer "ip_pool_id"
|
t.integer "ip_pool_id"
|
||||||
t.string "ipv4"
|
t.string "ipv4"
|
||||||
t.string "ipv6"
|
t.string "ipv6"
|
||||||
t.datetime "created_at", precision: 6
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at", precision: 6
|
t.datetime "updated_at"
|
||||||
t.string "hostname"
|
t.string "hostname"
|
||||||
t.integer "priority"
|
t.integer "priority"
|
||||||
end
|
end
|
||||||
@@ -134,15 +137,15 @@ ActiveRecord::Schema.define(version: 2024_02_14_132253) do
|
|||||||
t.integer "ip_pool_id"
|
t.integer "ip_pool_id"
|
||||||
t.text "from_text"
|
t.text "from_text"
|
||||||
t.text "to_text"
|
t.text "to_text"
|
||||||
t.datetime "created_at", null: false
|
t.datetime "created_at", precision: nil, null: false
|
||||||
t.datetime "updated_at", null: false
|
t.datetime "updated_at", precision: nil, null: false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "ip_pools", id: :integer, charset: "utf8mb4", collation: "utf8mb4_general_ci", force: :cascade do |t|
|
create_table "ip_pools", id: :integer, charset: "utf8mb4", collation: "utf8mb4_general_ci", force: :cascade do |t|
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.string "uuid"
|
t.string "uuid"
|
||||||
t.datetime "created_at", precision: 6
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at", precision: 6
|
t.datetime "updated_at"
|
||||||
t.boolean "default", default: false
|
t.boolean "default", default: false
|
||||||
t.index ["uuid"], name: "index_ip_pools_on_uuid", length: 8
|
t.index ["uuid"], name: "index_ip_pools_on_uuid", length: 8
|
||||||
end
|
end
|
||||||
@@ -150,14 +153,14 @@ ActiveRecord::Schema.define(version: 2024_02_14_132253) do
|
|||||||
create_table "organization_ip_pools", id: :integer, charset: "utf8mb4", collation: "utf8mb4_general_ci", force: :cascade do |t|
|
create_table "organization_ip_pools", id: :integer, charset: "utf8mb4", collation: "utf8mb4_general_ci", force: :cascade do |t|
|
||||||
t.integer "organization_id"
|
t.integer "organization_id"
|
||||||
t.integer "ip_pool_id"
|
t.integer "ip_pool_id"
|
||||||
t.datetime "created_at", null: false
|
t.datetime "created_at", precision: nil, null: false
|
||||||
t.datetime "updated_at", null: false
|
t.datetime "updated_at", precision: nil, null: false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "organization_users", id: :integer, charset: "utf8mb4", collation: "utf8mb4_general_ci", force: :cascade do |t|
|
create_table "organization_users", id: :integer, charset: "utf8mb4", collation: "utf8mb4_general_ci", force: :cascade do |t|
|
||||||
t.integer "organization_id"
|
t.integer "organization_id"
|
||||||
t.integer "user_id"
|
t.integer "user_id"
|
||||||
t.datetime "created_at", precision: 6
|
t.datetime "created_at"
|
||||||
t.boolean "admin", default: false
|
t.boolean "admin", default: false
|
||||||
t.boolean "all_servers", default: true
|
t.boolean "all_servers", default: true
|
||||||
t.string "user_type"
|
t.string "user_type"
|
||||||
@@ -168,12 +171,12 @@ ActiveRecord::Schema.define(version: 2024_02_14_132253) do
|
|||||||
t.string "name"
|
t.string "name"
|
||||||
t.string "permalink"
|
t.string "permalink"
|
||||||
t.string "time_zone"
|
t.string "time_zone"
|
||||||
t.datetime "created_at", precision: 6
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at", precision: 6
|
t.datetime "updated_at"
|
||||||
t.integer "ip_pool_id"
|
t.integer "ip_pool_id"
|
||||||
t.integer "owner_id"
|
t.integer "owner_id"
|
||||||
t.datetime "deleted_at", precision: 6
|
t.datetime "deleted_at"
|
||||||
t.datetime "suspended_at", precision: 6
|
t.datetime "suspended_at"
|
||||||
t.string "suspension_reason"
|
t.string "suspension_reason"
|
||||||
t.index ["permalink"], name: "index_organizations_on_permalink", length: 8
|
t.index ["permalink"], name: "index_organizations_on_permalink", length: 8
|
||||||
t.index ["uuid"], name: "index_organizations_on_uuid", length: 8
|
t.index ["uuid"], name: "index_organizations_on_uuid", length: 8
|
||||||
@@ -184,10 +187,10 @@ ActiveRecord::Schema.define(version: 2024_02_14_132253) do
|
|||||||
t.integer "message_id"
|
t.integer "message_id"
|
||||||
t.string "domain"
|
t.string "domain"
|
||||||
t.string "locked_by"
|
t.string "locked_by"
|
||||||
t.datetime "locked_at", precision: 6
|
t.datetime "locked_at"
|
||||||
t.datetime "retry_after"
|
t.datetime "retry_after", precision: nil
|
||||||
t.datetime "created_at", precision: 6
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at", precision: 6
|
t.datetime "updated_at"
|
||||||
t.integer "ip_address_id"
|
t.integer "ip_address_id"
|
||||||
t.integer "attempts", default: 0
|
t.integer "attempts", default: 0
|
||||||
t.integer "route_id"
|
t.integer "route_id"
|
||||||
@@ -206,8 +209,8 @@ ActiveRecord::Schema.define(version: 2024_02_14_132253) do
|
|||||||
t.string "endpoint_type"
|
t.string "endpoint_type"
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.string "spam_mode"
|
t.string "spam_mode"
|
||||||
t.datetime "created_at", precision: 6
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at", precision: 6
|
t.datetime "updated_at"
|
||||||
t.string "token"
|
t.string "token"
|
||||||
t.string "mode"
|
t.string "mode"
|
||||||
t.index ["token"], name: "index_routes_on_token", length: 6
|
t.index ["token"], name: "index_routes_on_token", length: 6
|
||||||
@@ -215,7 +218,7 @@ ActiveRecord::Schema.define(version: 2024_02_14_132253) do
|
|||||||
|
|
||||||
create_table "scheduled_tasks", charset: "utf8mb4", collation: "utf8mb4_general_ci", force: :cascade do |t|
|
create_table "scheduled_tasks", charset: "utf8mb4", collation: "utf8mb4_general_ci", force: :cascade do |t|
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.datetime "next_run_after"
|
t.datetime "next_run_after", precision: nil
|
||||||
t.index ["name"], name: "index_scheduled_tasks_on_name", unique: true
|
t.index ["name"], name: "index_scheduled_tasks_on_name", unique: true
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -225,24 +228,24 @@ ActiveRecord::Schema.define(version: 2024_02_14_132253) do
|
|||||||
t.string "name"
|
t.string "name"
|
||||||
t.string "mode"
|
t.string "mode"
|
||||||
t.integer "ip_pool_id"
|
t.integer "ip_pool_id"
|
||||||
t.datetime "created_at", precision: 6
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at", precision: 6
|
t.datetime "updated_at"
|
||||||
t.string "permalink"
|
t.string "permalink"
|
||||||
t.integer "send_limit"
|
t.integer "send_limit"
|
||||||
t.datetime "deleted_at", precision: 6
|
t.datetime "deleted_at"
|
||||||
t.integer "message_retention_days"
|
t.integer "message_retention_days"
|
||||||
t.integer "raw_message_retention_days"
|
t.integer "raw_message_retention_days"
|
||||||
t.integer "raw_message_retention_size"
|
t.integer "raw_message_retention_size"
|
||||||
t.boolean "allow_sender", default: false
|
t.boolean "allow_sender", default: false
|
||||||
t.string "token"
|
t.string "token"
|
||||||
t.datetime "send_limit_approaching_at", precision: 6
|
t.datetime "send_limit_approaching_at"
|
||||||
t.datetime "send_limit_approaching_notified_at", precision: 6
|
t.datetime "send_limit_approaching_notified_at"
|
||||||
t.datetime "send_limit_exceeded_at", precision: 6
|
t.datetime "send_limit_exceeded_at"
|
||||||
t.datetime "send_limit_exceeded_notified_at", precision: 6
|
t.datetime "send_limit_exceeded_notified_at"
|
||||||
t.decimal "spam_threshold", precision: 8, scale: 2
|
t.decimal "spam_threshold", precision: 8, scale: 2
|
||||||
t.decimal "spam_failure_threshold", precision: 8, scale: 2
|
t.decimal "spam_failure_threshold", precision: 8, scale: 2
|
||||||
t.string "postmaster_address"
|
t.string "postmaster_address"
|
||||||
t.datetime "suspended_at", precision: 6
|
t.datetime "suspended_at"
|
||||||
t.decimal "outbound_spam_threshold", precision: 8, scale: 2
|
t.decimal "outbound_spam_threshold", precision: 8, scale: 2
|
||||||
t.text "domains_not_to_click_track"
|
t.text "domains_not_to_click_track"
|
||||||
t.string "suspension_reason"
|
t.string "suspension_reason"
|
||||||
@@ -262,10 +265,10 @@ ActiveRecord::Schema.define(version: 2024_02_14_132253) do
|
|||||||
t.string "ssl_mode"
|
t.string "ssl_mode"
|
||||||
t.integer "port"
|
t.integer "port"
|
||||||
t.text "error"
|
t.text "error"
|
||||||
t.datetime "disabled_until", precision: 6
|
t.datetime "disabled_until"
|
||||||
t.datetime "last_used_at", precision: 6
|
t.datetime "last_used_at"
|
||||||
t.datetime "created_at", precision: 6
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at", precision: 6
|
t.datetime "updated_at"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "statistics", id: :integer, charset: "utf8mb4", collation: "utf8mb4_general_ci", force: :cascade do |t|
|
create_table "statistics", id: :integer, charset: "utf8mb4", collation: "utf8mb4_general_ci", force: :cascade do |t|
|
||||||
@@ -279,12 +282,12 @@ ActiveRecord::Schema.define(version: 2024_02_14_132253) do
|
|||||||
t.text "certificate"
|
t.text "certificate"
|
||||||
t.text "intermediaries"
|
t.text "intermediaries"
|
||||||
t.text "key"
|
t.text "key"
|
||||||
t.datetime "expires_at"
|
t.datetime "expires_at", precision: nil
|
||||||
t.datetime "renew_after"
|
t.datetime "renew_after", precision: nil
|
||||||
t.string "verification_path"
|
t.string "verification_path"
|
||||||
t.string "verification_string"
|
t.string "verification_string"
|
||||||
t.datetime "created_at", null: false
|
t.datetime "created_at", precision: nil, null: false
|
||||||
t.datetime "updated_at", null: false
|
t.datetime "updated_at", precision: nil, null: false
|
||||||
t.index ["domain"], name: "index_track_certificates_on_domain", length: 8
|
t.index ["domain"], name: "index_track_certificates_on_domain", length: 8
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -293,11 +296,11 @@ ActiveRecord::Schema.define(version: 2024_02_14_132253) do
|
|||||||
t.integer "server_id"
|
t.integer "server_id"
|
||||||
t.integer "domain_id"
|
t.integer "domain_id"
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.datetime "dns_checked_at"
|
t.datetime "dns_checked_at", precision: nil
|
||||||
t.string "dns_status"
|
t.string "dns_status"
|
||||||
t.string "dns_error"
|
t.string "dns_error"
|
||||||
t.datetime "created_at", null: false
|
t.datetime "created_at", precision: nil, null: false
|
||||||
t.datetime "updated_at", null: false
|
t.datetime "updated_at", precision: nil, null: false
|
||||||
t.boolean "ssl_enabled", default: true
|
t.boolean "ssl_enabled", default: true
|
||||||
t.boolean "track_clicks", default: true
|
t.boolean "track_clicks", default: true
|
||||||
t.boolean "track_loads", default: true
|
t.boolean "track_loads", default: true
|
||||||
@@ -307,9 +310,9 @@ ActiveRecord::Schema.define(version: 2024_02_14_132253) do
|
|||||||
create_table "user_invites", id: :integer, charset: "utf8mb4", collation: "utf8mb4_general_ci", force: :cascade do |t|
|
create_table "user_invites", id: :integer, charset: "utf8mb4", collation: "utf8mb4_general_ci", force: :cascade do |t|
|
||||||
t.string "uuid"
|
t.string "uuid"
|
||||||
t.string "email_address"
|
t.string "email_address"
|
||||||
t.datetime "expires_at", precision: 6
|
t.datetime "expires_at"
|
||||||
t.datetime "created_at", precision: 6
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at", precision: 6
|
t.datetime "updated_at"
|
||||||
t.index ["uuid"], name: "index_user_invites_on_uuid", length: 12
|
t.index ["uuid"], name: "index_user_invites_on_uuid", length: 12
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -321,11 +324,11 @@ ActiveRecord::Schema.define(version: 2024_02_14_132253) do
|
|||||||
t.string "password_digest"
|
t.string "password_digest"
|
||||||
t.string "time_zone"
|
t.string "time_zone"
|
||||||
t.string "email_verification_token"
|
t.string "email_verification_token"
|
||||||
t.datetime "email_verified_at"
|
t.datetime "email_verified_at", precision: nil
|
||||||
t.datetime "created_at", precision: 6
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at", precision: 6
|
t.datetime "updated_at"
|
||||||
t.string "password_reset_token"
|
t.string "password_reset_token"
|
||||||
t.datetime "password_reset_token_valid_until"
|
t.datetime "password_reset_token_valid_until", precision: nil
|
||||||
t.boolean "admin", default: false
|
t.boolean "admin", default: false
|
||||||
t.index ["email_address"], name: "index_users_on_email_address", length: 8
|
t.index ["email_address"], name: "index_users_on_email_address", length: 8
|
||||||
t.index ["uuid"], name: "index_users_on_uuid", length: 8
|
t.index ["uuid"], name: "index_users_on_uuid", length: 8
|
||||||
@@ -334,7 +337,7 @@ ActiveRecord::Schema.define(version: 2024_02_14_132253) do
|
|||||||
create_table "webhook_events", id: :integer, charset: "utf8mb4", collation: "utf8mb4_general_ci", force: :cascade do |t|
|
create_table "webhook_events", id: :integer, charset: "utf8mb4", collation: "utf8mb4_general_ci", force: :cascade do |t|
|
||||||
t.integer "webhook_id"
|
t.integer "webhook_id"
|
||||||
t.string "event"
|
t.string "event"
|
||||||
t.datetime "created_at", precision: 6
|
t.datetime "created_at"
|
||||||
t.index ["webhook_id"], name: "index_webhook_events_on_webhook_id"
|
t.index ["webhook_id"], name: "index_webhook_events_on_webhook_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -346,11 +349,11 @@ ActiveRecord::Schema.define(version: 2024_02_14_132253) do
|
|||||||
t.string "uuid"
|
t.string "uuid"
|
||||||
t.text "payload"
|
t.text "payload"
|
||||||
t.integer "attempts", default: 0
|
t.integer "attempts", default: 0
|
||||||
t.datetime "retry_after", precision: 6
|
t.datetime "retry_after"
|
||||||
t.text "error"
|
t.text "error"
|
||||||
t.datetime "created_at", precision: 6
|
t.datetime "created_at"
|
||||||
t.string "locked_by"
|
t.string "locked_by"
|
||||||
t.datetime "locked_at"
|
t.datetime "locked_at", precision: nil
|
||||||
t.index ["locked_by"], name: "index_webhook_requests_on_locked_by"
|
t.index ["locked_by"], name: "index_webhook_requests_on_locked_by"
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -359,19 +362,19 @@ ActiveRecord::Schema.define(version: 2024_02_14_132253) do
|
|||||||
t.string "uuid"
|
t.string "uuid"
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.string "url"
|
t.string "url"
|
||||||
t.datetime "last_used_at"
|
t.datetime "last_used_at", precision: nil
|
||||||
t.boolean "all_events", default: false
|
t.boolean "all_events", default: false
|
||||||
t.boolean "enabled", default: true
|
t.boolean "enabled", default: true
|
||||||
t.boolean "sign", default: true
|
t.boolean "sign", default: true
|
||||||
t.datetime "created_at", precision: 6
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at", precision: 6
|
t.datetime "updated_at"
|
||||||
t.index ["server_id"], name: "index_webhooks_on_server_id"
|
t.index ["server_id"], name: "index_webhooks_on_server_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "worker_roles", charset: "utf8mb4", collation: "utf8mb4_general_ci", force: :cascade do |t|
|
create_table "worker_roles", charset: "utf8mb4", collation: "utf8mb4_general_ci", force: :cascade do |t|
|
||||||
t.string "role"
|
t.string "role"
|
||||||
t.string "worker"
|
t.string "worker"
|
||||||
t.datetime "acquired_at"
|
t.datetime "acquired_at", precision: nil
|
||||||
t.index ["role"], name: "index_worker_roles_on_role", unique: true
|
t.index ["role"], name: "index_worker_roles_on_role", unique: true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
$stdout.sync = true
|
||||||
|
$stderr.sync = true
|
||||||
|
|
||||||
require_relative "../config/environment"
|
require_relative "../config/environment"
|
||||||
SMTPServer::Server.new(debug: true).run
|
SMTPServer::Server.new(debug: true).run
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
#!/usr/bin/env ruby
|
#!/usr/bin/env ruby
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
$stdout.sync = true
|
||||||
|
$stderr.sync = true
|
||||||
|
|
||||||
require_relative "../config/environment"
|
require_relative "../config/environment"
|
||||||
Worker::Process.new.run
|
Worker::Process.new.run
|
||||||
|
|||||||
المرجع في مشكلة جديدة
حظر مستخدم