1
0
مراية لـ https://github.com/postalserver/postal.git تم المزامنة 2025-12-01 05:43:04 +00:00

chore: Upgrade to Ruby 3.2.1 & Rails 6.0

* chore: upgrade to rails 6.0

* chore: upgrade ruby to 3.2.1

* chore: upgrade bundler

* chore: upgrade execjs

* chore: upgrade to rails 6.1

* chore: switch to sentry-ruby from raven

* chore: add extra platforms to gemfile
هذا الالتزام موجود في:
Adam Cooke
2023-04-06 11:40:45 +01:00
ملتزم من قبل GitHub
الأصل 363ceff822
التزام 957b784658
25 ملفات معدلة مع 285 إضافات و243 حذوفات

عرض الملف

@@ -1 +1,2 @@
2.7.7 3.2.1

عرض الملف

@@ -1,4 +1,4 @@
FROM ruby:2.7.7-bullseye AS base FROM ruby:3.2.1-bullseye AS base
SHELL ["/bin/bash", "-o", "pipefail", "-c"] SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN apt-get update \ RUN apt-get update \
@@ -31,7 +31,7 @@ RUN mkdir -p /opt/postal/app /opt/postal/config
WORKDIR /opt/postal/app WORKDIR /opt/postal/app
# Install bundler # Install bundler
RUN gem install bundler -v 2.4.7 --no-doc RUN gem install bundler -v 2.4.9 --no-doc
# Install the latest and active gem dependencies and re-run # Install the latest and active gem dependencies and re-run
# the appropriate commands to handle installs. # the appropriate commands to handle installs.

14
Gemfile
عرض الملف

@@ -1,5 +1,5 @@
source "https://rubygems.org" source "https://rubygems.org"
gem "authie", "~> 3.0" gem "authie"
gem "autoprefixer-rails" gem "autoprefixer-rails"
gem "basic_ssl" gem "basic_ssl"
gem "bcrypt" gem "bcrypt"
@@ -15,25 +15,27 @@ gem "gelf"
gem "haml" gem "haml"
gem "hashie" gem "hashie"
gem "highline", require: false gem "highline", require: false
gem "execjs", '~> 2.7', "< 2.8"
gem "jwt" gem "jwt"
gem "kaminari" gem "kaminari"
gem "mail", git: "https://github.com/mikel/mail.git", branch: "2-7-stable" gem "mail"
gem "moonrope" gem "moonrope"
gem "mysql2" gem "mysql2"
gem "nifty-utils" gem "nifty-utils"
gem "nilify_blanks" gem "nilify_blanks"
gem "nio4r" gem "nio4r"
gem "puma" gem "puma"
gem "rails", "= 5.2.8.1" gem "rails", "= 6.1.7.3"
gem "resolv", "~> 0.2.1" gem "resolv", "~> 0.2.1"
gem "secure_headers" gem "secure_headers"
gem "sentry-raven" gem 'sentry-rails'
gem 'sentry-ruby'
gem "turbolinks", "~> 5" gem "turbolinks", "~> 5"
group :development, :assets do group :development, :assets do
gem "coffee-rails", "~> 4.2" gem "coffee-rails", "~> 5.0"
gem "jquery-rails" gem "jquery-rails"
gem "sass-rails", "~> 5.0" gem "sass-rails"
gem "uglifier", ">= 1.3.0" gem "uglifier", ">= 1.3.0"
end end

عرض الملف

@@ -1,91 +1,108 @@
GIT
remote: https://github.com/mikel/mail.git
revision: 873aa3876efb372b9a0bb7319fe60a994cedfd05
branch: 2-7-stable
specs:
mail (2.7.2.edge)
mini_mime (>= 0.1.1)
GEM GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
actioncable (5.2.8.1) actioncable (6.1.7.3)
actionpack (= 5.2.8.1) actionpack (= 6.1.7.3)
activesupport (= 6.1.7.3)
nio4r (~> 2.0) nio4r (~> 2.0)
websocket-driver (>= 0.6.1) websocket-driver (>= 0.6.1)
actionmailer (5.2.8.1) actionmailbox (6.1.7.3)
actionpack (= 5.2.8.1) actionpack (= 6.1.7.3)
actionview (= 5.2.8.1) activejob (= 6.1.7.3)
activejob (= 5.2.8.1) activerecord (= 6.1.7.3)
activestorage (= 6.1.7.3)
activesupport (= 6.1.7.3)
mail (>= 2.7.1)
actionmailer (6.1.7.3)
actionpack (= 6.1.7.3)
actionview (= 6.1.7.3)
activejob (= 6.1.7.3)
activesupport (= 6.1.7.3)
mail (~> 2.5, >= 2.5.4) mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0) rails-dom-testing (~> 2.0)
actionpack (5.2.8.1) actionpack (6.1.7.3)
actionview (= 5.2.8.1) actionview (= 6.1.7.3)
activesupport (= 5.2.8.1) activesupport (= 6.1.7.3)
rack (~> 2.0, >= 2.0.8) rack (~> 2.0, >= 2.0.9)
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.0.2) rails-html-sanitizer (~> 1.0, >= 1.2.0)
actionview (5.2.8.1) actiontext (6.1.7.3)
activesupport (= 5.2.8.1) actionpack (= 6.1.7.3)
activerecord (= 6.1.7.3)
activestorage (= 6.1.7.3)
activesupport (= 6.1.7.3)
nokogiri (>= 1.8.5)
actionview (6.1.7.3)
activesupport (= 6.1.7.3)
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.0, >= 1.0.3) rails-html-sanitizer (~> 1.1, >= 1.2.0)
activejob (5.2.8.1) activejob (6.1.7.3)
activesupport (= 5.2.8.1) activesupport (= 6.1.7.3)
globalid (>= 0.3.6) globalid (>= 0.3.6)
activemodel (5.2.8.1) activemodel (6.1.7.3)
activesupport (= 5.2.8.1) activesupport (= 6.1.7.3)
activerecord (5.2.8.1) activerecord (6.1.7.3)
activemodel (= 5.2.8.1) activemodel (= 6.1.7.3)
activesupport (= 5.2.8.1) activesupport (= 6.1.7.3)
arel (>= 9.0) activestorage (6.1.7.3)
activestorage (5.2.8.1) actionpack (= 6.1.7.3)
actionpack (= 5.2.8.1) activejob (= 6.1.7.3)
activerecord (= 5.2.8.1) activerecord (= 6.1.7.3)
marcel (~> 1.0.0) activesupport (= 6.1.7.3)
activesupport (5.2.8.1) marcel (~> 1.0)
mini_mime (>= 1.1.0)
activesupport (6.1.7.3)
concurrent-ruby (~> 1.0, >= 1.0.2) concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 0.7, < 2) i18n (>= 1.6, < 2)
minitest (~> 5.1) minitest (>= 5.1)
tzinfo (~> 1.1) tzinfo (~> 2.0)
amq-protocol (2.3.0) zeitwerk (~> 2.3)
annotate (2.7.4) amq-protocol (2.3.2)
activerecord (>= 3.2, < 6.0) annotate (3.2.0)
rake (>= 10.4, < 13.0) activerecord (>= 3.2, < 8.0)
arel (9.0.0) rake (>= 10.4, < 14.0)
ast (2.4.2) ast (2.4.2)
authie (3.3.1) authie (3.4.0)
secure_random_string secure_random_string
autoprefixer-rails (9.1.3) autoprefixer-rails (10.4.13.0)
execjs execjs (~> 2)
basic_ssl (1.0.3) basic_ssl (1.0.3)
bcrypt (3.1.12) bcrypt (3.1.18)
builder (3.2.4) builder (3.2.4)
bunny (2.14.4) bunny (2.20.3)
amq-protocol (~> 2.3, >= 2.3.0) amq-protocol (~> 2.3, >= 2.3.1)
byebug (10.0.2) sorted_set (~> 1, >= 1.0.2)
changey (1.0.0) byebug (11.1.3)
activerecord (>= 4.2, < 6) changey (1.1.0)
activerecord (>= 4.2, < 7)
chronic (0.10.2) chronic (0.10.2)
clockwork (2.0.3) clockwork (3.0.2)
activesupport
tzinfo tzinfo
coffee-rails (4.2.2) coffee-rails (5.0.0)
coffee-script (>= 2.2.0) coffee-script (>= 2.2.0)
railties (>= 4.0.0) railties (>= 5.2.0)
coffee-script (2.4.1) coffee-script (2.4.1)
coffee-script-source coffee-script-source
execjs execjs
coffee-script-source (1.12.2) coffee-script-source (1.12.2)
concurrent-ruby (1.2.0) concurrent-ruby (1.2.2)
crass (1.0.6) crass (1.0.6)
database_cleaner (1.7.0) database_cleaner (2.0.2)
deep_merge (1.2.1) database_cleaner-active_record (>= 2, < 3)
diff-lcs (1.3) database_cleaner-active_record (2.1.0)
dotenv (2.7.6) activerecord (>= 5.a)
dotenv-rails (2.7.6) database_cleaner-core (~> 2.0.0)
dotenv (= 2.7.6) database_cleaner-core (2.0.1)
date (3.3.3)
deep_merge (1.2.2)
diff-lcs (1.5.0)
dotenv (2.8.1)
dotenv-rails (2.8.1)
dotenv (= 2.8.1)
railties (>= 3.2) railties (>= 3.2)
dynamic_form (1.1.4) dynamic_form (1.1.4)
encrypto_signo (1.0.0) encrypto_signo (1.0.0)
@@ -96,124 +113,139 @@ GEM
factory_bot_rails (4.11.1) factory_bot_rails (4.11.1)
factory_bot (~> 4.11.1) factory_bot (~> 4.11.1)
railties (>= 3.0.0) railties (>= 3.0.0)
faraday (0.15.2)
multipart-post (>= 1.2, < 3)
ffi (1.15.5) ffi (1.15.5)
foreman (0.85.0) foreman (0.87.2)
thor (~> 0.19.1) gelf (3.1.0)
gelf (3.0.0)
json json
globalid (1.1.0) globalid (1.1.0)
activesupport (>= 5.0) activesupport (>= 5.0)
haml (5.1.2) haml (6.1.1)
temple (>= 0.8.0) temple (>= 0.8.2)
thor
tilt tilt
hashie (3.6.0) hashie (5.0.0)
highline (2.0.0) highline (2.1.0)
i18n (1.12.0) i18n (1.12.0)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
jquery-rails (4.3.3) jquery-rails (4.5.1)
rails-dom-testing (>= 1, < 3) rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0) railties (>= 4.2.0)
thor (>= 0.14, < 2.0) thor (>= 0.14, < 2.0)
json (2.5.1) json (2.6.3)
jwt (2.1.0) jwt (2.7.0)
kaminari (1.2.1) kaminari (1.2.2)
activesupport (>= 4.1.0) activesupport (>= 4.1.0)
kaminari-actionview (= 1.2.1) kaminari-actionview (= 1.2.2)
kaminari-activerecord (= 1.2.1) kaminari-activerecord (= 1.2.2)
kaminari-core (= 1.2.1) kaminari-core (= 1.2.2)
kaminari-actionview (1.2.1) kaminari-actionview (1.2.2)
actionview actionview
kaminari-core (= 1.2.1) kaminari-core (= 1.2.2)
kaminari-activerecord (1.2.1) kaminari-activerecord (1.2.2)
activerecord activerecord
kaminari-core (= 1.2.1) kaminari-core (= 1.2.2)
kaminari-core (1.2.1) kaminari-core (1.2.2)
loofah (2.19.1) loofah (2.19.1)
crass (~> 1.0.2) crass (~> 1.0.2)
nokogiri (>= 1.5.9) nokogiri (>= 1.5.9)
mail (2.8.1)
mini_mime (>= 0.1.1)
net-imap
net-pop
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.2)
mini_portile2 (2.8.1) mini_portile2 (2.8.1)
minitest (5.17.0) minitest (5.18.0)
moonrope (2.0.2) moonrope (2.0.2)
deep_merge (~> 1.0) deep_merge (~> 1.0)
json json
rack (>= 1.4) rack (>= 1.4)
multipart-post (2.0.0) mysql2 (0.5.5)
mysql2 (0.5.3) net-imap (0.3.4)
date
net-protocol
net-pop (0.1.2)
net-protocol
net-protocol (0.2.1)
timeout
net-smtp (0.3.3)
net-protocol
nifty-utils (1.1.7) nifty-utils (1.1.7)
nilify_blanks (1.3.0) nilify_blanks (1.4.0)
activerecord (>= 3.0.0) activerecord (>= 4.0.0)
activesupport (>= 3.0.0) activesupport (>= 4.0.0)
nio4r (2.5.8) nio4r (2.5.8)
nokogiri (1.14.2) nokogiri (1.14.2)
mini_portile2 (~> 2.8.0) mini_portile2 (~> 2.8.0)
racc (~> 1.4) racc (~> 1.4)
nokogiri (1.14.2-arm64-darwin)
racc (~> 1.4)
nokogiri (1.14.2-x86_64-linux)
racc (~> 1.4)
parallel (1.22.1) parallel (1.22.1)
parser (3.2.1.1) parser (3.2.1.1)
ast (~> 2.4.1) ast (~> 2.4.1)
puma (6.1.0) puma (6.1.1)
nio4r (~> 2.0) nio4r (~> 2.0)
racc (1.6.2) racc (1.6.2)
rack (2.2.6.4) rack (2.2.6.4)
rack-test (2.0.2) rack-test (2.1.0)
rack (>= 1.3) rack (>= 1.3)
rails (5.2.8.1) rails (6.1.7.3)
actioncable (= 5.2.8.1) actioncable (= 6.1.7.3)
actionmailer (= 5.2.8.1) actionmailbox (= 6.1.7.3)
actionpack (= 5.2.8.1) actionmailer (= 6.1.7.3)
actionview (= 5.2.8.1) actionpack (= 6.1.7.3)
activejob (= 5.2.8.1) actiontext (= 6.1.7.3)
activemodel (= 5.2.8.1) actionview (= 6.1.7.3)
activerecord (= 5.2.8.1) activejob (= 6.1.7.3)
activestorage (= 5.2.8.1) activemodel (= 6.1.7.3)
activesupport (= 5.2.8.1) activerecord (= 6.1.7.3)
bundler (>= 1.3.0) activestorage (= 6.1.7.3)
railties (= 5.2.8.1) activesupport (= 6.1.7.3)
bundler (>= 1.15.0)
railties (= 6.1.7.3)
sprockets-rails (>= 2.0.0) sprockets-rails (>= 2.0.0)
rails-dom-testing (2.0.3) rails-dom-testing (2.0.3)
activesupport (>= 4.2.0) activesupport (>= 4.2.0)
nokogiri (>= 1.6) nokogiri (>= 1.6)
rails-html-sanitizer (1.5.0) rails-html-sanitizer (1.5.0)
loofah (~> 2.19, >= 2.19.1) loofah (~> 2.19, >= 2.19.1)
railties (5.2.8.1) railties (6.1.7.3)
actionpack (= 5.2.8.1) actionpack (= 6.1.7.3)
activesupport (= 5.2.8.1) activesupport (= 6.1.7.3)
method_source method_source
rake (>= 0.8.7) rake (>= 12.2)
thor (>= 0.19.0, < 2.0) thor (~> 1.0)
rainbow (3.1.1) rainbow (3.1.1)
rake (12.3.3) rake (13.0.6)
rb-fsevent (0.10.3) rbtree (0.4.6)
rb-inotify (0.9.10)
ffi (>= 0.5.0, < 2)
regexp_parser (2.7.0) regexp_parser (2.7.0)
resolv (0.2.1) resolv (0.2.2)
rexml (3.2.5) rexml (3.2.5)
rspec (3.8.0) rspec (3.12.0)
rspec-core (~> 3.8.0) rspec-core (~> 3.12.0)
rspec-expectations (~> 3.8.0) rspec-expectations (~> 3.12.0)
rspec-mocks (~> 3.8.0) rspec-mocks (~> 3.12.0)
rspec-core (3.8.0) rspec-core (3.12.1)
rspec-support (~> 3.8.0) rspec-support (~> 3.12.0)
rspec-expectations (3.8.1) rspec-expectations (3.12.2)
diff-lcs (>= 1.2.0, < 2.0) diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.8.0) rspec-support (~> 3.12.0)
rspec-mocks (3.8.0) rspec-mocks (3.12.4)
diff-lcs (>= 1.2.0, < 2.0) diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.8.0) rspec-support (~> 3.12.0)
rspec-rails (3.8.0) rspec-rails (6.0.1)
actionpack (>= 3.0) actionpack (>= 6.1)
activesupport (>= 3.0) activesupport (>= 6.1)
railties (>= 3.0) railties (>= 6.1)
rspec-core (~> 3.8.0) rspec-core (~> 3.11)
rspec-expectations (~> 3.8.0) rspec-expectations (~> 3.11)
rspec-mocks (~> 3.8.0) rspec-mocks (~> 3.11)
rspec-support (~> 3.8.0) rspec-support (~> 3.11)
rspec-support (3.8.0) rspec-support (3.12.0)
rubocop (1.48.1) rubocop (1.48.1)
json (~> 2.3) json (~> 2.3)
parallel (~> 1.10) parallel (~> 1.10)
@@ -231,50 +263,59 @@ GEM
rack (>= 1.1) rack (>= 1.1)
rubocop (>= 1.33.0, < 2.0) rubocop (>= 1.33.0, < 2.0)
ruby-progressbar (1.13.0) ruby-progressbar (1.13.0)
sass (3.5.7) sass-rails (6.0.0)
sass-listen (~> 4.0.0) sassc-rails (~> 2.1, >= 2.1.1)
sass-listen (4.0.0) sassc (2.4.0)
rb-fsevent (~> 0.9, >= 0.9.4) ffi (~> 1.9)
rb-inotify (~> 0.9, >= 0.9.7) sassc-rails (2.1.2)
sass-rails (5.0.7) railties (>= 4.0.0)
railties (>= 4.0.0, < 6) sassc (>= 2.0)
sass (~> 3.1) sprockets (> 3.0)
sprockets (>= 2.8, < 4.0) sprockets-rails
sprockets-rails (>= 2.0, < 4.0) tilt
tilt (>= 1.1, < 3) secure_headers (6.5.0)
secure_headers (6.3.0)
secure_random_string (1.0.0) secure_random_string (1.0.0)
sentry-raven (2.7.4) sentry-rails (5.8.0)
faraday (>= 0.7.6, < 1.0) railties (>= 5.0)
sprockets (3.7.2) sentry-ruby (~> 5.8.0)
sentry-ruby (5.8.0)
concurrent-ruby (~> 1.0, >= 1.0.2)
set (1.0.3)
sorted_set (1.0.3)
rbtree
set (~> 1.0)
sprockets (4.2.0)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
rack (> 1, < 3) rack (>= 2.2.4, < 4)
sprockets-rails (3.4.2) sprockets-rails (3.4.2)
actionpack (>= 5.2) actionpack (>= 5.2)
activesupport (>= 5.2) activesupport (>= 5.2)
sprockets (>= 3.0.0) sprockets (>= 3.0.0)
temple (0.8.2) temple (0.10.0)
thor (0.19.4) thor (1.2.1)
thread_safe (0.3.6) tilt (2.1.0)
tilt (2.0.10) timeout (0.3.2)
turbolinks (5.2.0) turbolinks (5.2.1)
turbolinks-source (~> 5.2) turbolinks-source (~> 5.2)
turbolinks-source (5.2.0) turbolinks-source (5.2.0)
tzinfo (1.2.11) tzinfo (2.0.6)
thread_safe (~> 0.1) concurrent-ruby (~> 1.0)
uglifier (4.1.18) uglifier (4.2.0)
execjs (>= 0.3.0, < 3) execjs (>= 0.3.0, < 3)
unicode-display_width (2.4.2) unicode-display_width (2.4.2)
websocket-driver (0.7.5) websocket-driver (0.7.5)
websocket-extensions (>= 0.1.0) websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5) websocket-extensions (0.1.5)
zeitwerk (2.6.7)
PLATFORMS PLATFORMS
arm64-darwin-22
ruby ruby
x86_64-linux
DEPENDENCIES DEPENDENCIES
annotate annotate
authie (~> 3.0) authie
autoprefixer-rails autoprefixer-rails
basic_ssl basic_ssl
bcrypt bcrypt
@@ -283,11 +324,12 @@ DEPENDENCIES
changey changey
chronic chronic
clockwork clockwork
coffee-rails (~> 4.2) coffee-rails (~> 5.0)
database_cleaner database_cleaner
dotenv-rails dotenv-rails
dynamic_form dynamic_form
encrypto_signo encrypto_signo
execjs (~> 2.7, < 2.8)
factory_bot_rails (~> 4.0) factory_bot_rails (~> 4.0)
foreman foreman
gelf gelf
@@ -297,24 +339,25 @@ DEPENDENCIES
jquery-rails jquery-rails
jwt jwt
kaminari kaminari
mail! mail
moonrope moonrope
mysql2 mysql2
nifty-utils nifty-utils
nilify_blanks nilify_blanks
nio4r nio4r
puma puma
rails (= 5.2.8.1) rails (= 6.1.7.3)
resolv (~> 0.2.1) resolv (~> 0.2.1)
rspec rspec
rspec-rails rspec-rails
rubocop rubocop
rubocop-rails rubocop-rails
sass-rails (~> 5.0) sass-rails
secure_headers secure_headers
sentry-raven sentry-rails
sentry-ruby
turbolinks (~> 5) turbolinks (~> 5)
uglifier (>= 1.3.0) uglifier (>= 1.3.0)
BUNDLED WITH BUNDLED WITH
2.4.7 2.4.9

عرض الملف

@@ -1,3 +1,5 @@
//= link_tree ../images //= link_tree ../images
//= link_directory ../javascripts .js //= link_directory ../javascripts .js
//= link_directory ../stylesheets .css //= link_directory ../stylesheets .css
//= link application/application.css
//= link application/application.js

عرض الملف

@@ -424,8 +424,8 @@ class UnqueueMessageJob < Postal::Job
e.backtrace.each { |e| log("#{log_prefix} #{e}") } e.backtrace.each { |e| log("#{log_prefix} #{e}") }
queued_message.retry_later queued_message.retry_later
log "#{log_prefix} Queued message was unlocked" log "#{log_prefix} Queued message was unlocked"
if defined?(Raven) if defined?(Sentry)
Raven.capture_exception(e, extra: { job_id: self.id, server_id: queued_message.server_id, message_id: queued_message.message_id }) Sentry.capture_exception(e, extra: { job_id: self.id, server_id: queued_message.server_id, message_id: queued_message.message_id })
end end
if queued_message.message if queued_message.message
queued_message.message.create_delivery("Error", details: "An internal error occurred while sending this message. This message will be retried automatically. If this persists, contact support for assistance.", output: "#{e.class}: #{e.message}", log_id: "J-#{self.id}") queued_message.message.create_delivery("Error", details: "An internal error occurred while sending this message. This message will be retried automatically. If this persists, contact support for assistance.", output: "#{e.class}: #{e.message}", log_id: "J-#{self.id}")

عرض الملف

@@ -19,7 +19,7 @@ class AddressEndpoint < ApplicationRecord
has_many :routes, as: :endpoint has_many :routes, as: :endpoint
has_many :additional_route_endpoints, dependent: :destroy, as: :endpoint has_many :additional_route_endpoints, dependent: :destroy, as: :endpoint
validates :address, presence: true, format: { with: /@/ }, uniqueness: { scope: [:server_id], message: "has already been added" } validates :address, presence: true, format: { with: /@/ }, uniqueness: { scope: [:server_id], message: "has already been added", case_sensitive: false }
before_destroy :update_routes before_destroy :update_routes

عرض الملف

@@ -1,5 +1,8 @@
class User module HasAuthentication
extend ActiveSupport::Concern
included do
has_secure_password has_secure_password
validates :password, length: { minimum: 8, allow_blank: true } validates :password, length: { minimum: 8, allow_blank: true }
@@ -10,14 +13,17 @@ class User
self.password_reset_token_valid_until = nil self.password_reset_token_valid_until = nil
end end
end end
end
def self.authenticate(email_address, password) class_methods do
def authenticate(email_address, password)
user = where(email_address: email_address).first user = where(email_address: email_address).first
raise Postal::Errors::AuthenticationError, "InvalidEmailAddress" if user.nil? raise Postal::Errors::AuthenticationError, "InvalidEmailAddress" if user.nil?
raise Postal::Errors::AuthenticationError, "InvalidPassword" unless user.authenticate(password) raise Postal::Errors::AuthenticationError, "InvalidPassword" unless user.authenticate(password)
user user
end end
end
def authenticate_with_previous_password_first(unencrypted_password) def authenticate_with_previous_password_first(unencrypted_password)
if password_digest_changed? if password_digest_changed?

عرض الملف

@@ -1,6 +1,6 @@
require "resolv" require "resolv"
class Domain module HasDNSChecks
def dns_ok? def dns_ok?
spf_status == "OK" && dkim_status == "OK" && ["OK", "Missing"].include?(mx_status) && ["OK", "Missing"].include?(return_path_status) spf_status == "OK" && dkim_status == "OK" && ["OK", "Missing"].include?(mx_status) && ["OK", "Missing"].include?(return_path_status)

عرض الملف

@@ -23,7 +23,7 @@ class Credential < ApplicationRecord
TYPES = ["SMTP", "API", "SMTP-IP"] TYPES = ["SMTP", "API", "SMTP-IP"]
validates :key, presence: true, uniqueness: true validates :key, presence: true, uniqueness: { case_sensitive: false }
validates :type, inclusion: { in: TYPES } validates :type, inclusion: { in: TYPES }
validates :name, presence: true validates :name, presence: true
validate :validate_key_cannot_be_changed validate :validate_key_cannot_be_changed

عرض الملف

@@ -40,8 +40,7 @@ class Domain < ApplicationRecord
include HasUUID include HasUUID
require_dependency "domain/dns_checks" include HasDNSChecks
require_dependency "domain/dns_verification"
VERIFICATION_EMAIL_ALIASES = ["webmaster", "postmaster", "admin", "administrator", "hostmaster"] VERIFICATION_EMAIL_ALIASES = ["webmaster", "postmaster", "admin", "administrator", "hostmaster"]
@@ -52,7 +51,7 @@ class Domain < ApplicationRecord
VERIFICATION_METHODS = ["DNS", "Email"] VERIFICATION_METHODS = ["DNS", "Email"]
validates :name, presence: true, format: { with: /\A[a-z0-9\-.]*\z/ }, uniqueness: { scope: [:owner_type, :owner_id], message: "is already added" } validates :name, presence: true, format: { with: /\A[a-z0-9\-.]*\z/ }, uniqueness: { case_sensitive: false, scope: [:owner_type, :owner_id], message: "is already added" }
validates :verification_method, inclusion: { in: VERIFICATION_METHODS } validates :verification_method, inclusion: { in: VERIFICATION_METHODS }
random_string :dkim_identifier_string, type: :chars, length: 6, unique: true, upper_letters_only: true random_string :dkim_identifier_string, type: :chars, length: 6, unique: true, upper_letters_only: true
@@ -138,6 +137,22 @@ class Domain < ApplicationRecord
@resolver ||= Postal.config.general.use_local_ns_for_domains? ? Resolv::DNS.new : Resolv::DNS.new(nameserver: nameservers) @resolver ||= Postal.config.general.use_local_ns_for_domains? ? Resolv::DNS.new : Resolv::DNS.new(nameserver: nameservers)
end end
def dns_verification_string
"#{Postal.config.dns.domain_verify_prefix} #{verification_token}"
end
def verify_with_dns
return false unless verification_method == "DNS"
result = resolver.getresources(name, Resolv::DNS::Resource::IN::TXT)
if result.map { |d| d.data.to_s.strip }.include?(dns_verification_string)
self.verified_at = Time.now
save
else
false
end
end
private private
def get_nameservers def get_nameservers

عرض الملف

@@ -1,23 +0,0 @@
require "resolv"
class Domain
def dns_verification_string
"#{Postal.config.dns.domain_verify_prefix} #{verification_token}"
end
def verify_with_dns
return false unless verification_method == "DNS"
result = resolver.getresources(name, Resolv::DNS::Resource::IN::TXT)
if result.map { |d| d.data.to_s.strip }.include?(dns_verification_string)
self.verified_at = Time.now
save
else
false
end
end
end
# -*- SkipSchemaAnnotations

عرض الملف

@@ -31,7 +31,7 @@ class Organization < ApplicationRecord
include HasSoftDestroy include HasSoftDestroy
validates :name, presence: true validates :name, presence: true
validates :permalink, presence: true, format: { with: /\A[a-z0-9-]*\z/ }, uniqueness: true, exclusion: { in: RESERVED_PERMALINKS } validates :permalink, presence: true, format: { with: /\A[a-z0-9-]*\z/ }, uniqueness: { case_sensitive: false }, exclusion: { in: RESERVED_PERMALINKS }
validates :time_zone, presence: true validates :time_zone, presence: true
default_value :time_zone, -> { "UTC" } default_value :time_zone, -> { "UTC" }

عرض الملف

@@ -72,9 +72,9 @@ class Server < ApplicationRecord
default_value :spam_threshold, -> { Postal.config.general.default_spam_threshold } default_value :spam_threshold, -> { Postal.config.general.default_spam_threshold }
default_value :spam_failure_threshold, -> { Postal.config.general.default_spam_failure_threshold } default_value :spam_failure_threshold, -> { Postal.config.general.default_spam_failure_threshold }
validates :name, presence: true, uniqueness: { scope: :organization_id } validates :name, presence: true, uniqueness: { scope: :organization_id, case_sensitive: false }
validates :mode, inclusion: { in: MODES } validates :mode, inclusion: { in: MODES }
validates :permalink, presence: true, uniqueness: { scope: :organization_id }, format: { with: /\A[a-z0-9-]*\z/ }, exclusion: { in: RESERVED_PERMALINKS } validates :permalink, presence: true, uniqueness: { scope: :organization_id, case_sensitive: false }, format: { with: /\A[a-z0-9-]*\z/ }, exclusion: { in: RESERVED_PERMALINKS }
validate :validate_ip_pool_belongs_to_organization validate :validate_ip_pool_belongs_to_organization
before_validation(on: :create) do before_validation(on: :create) do

عرض الملف

@@ -27,8 +27,8 @@ class TrackDomain < ApplicationRecord
belongs_to :server belongs_to :server
belongs_to :domain belongs_to :domain
validates :name, presence: true, format: { with: /\A[a-z0-9-]+\z/ }, uniqueness: { scope: :domain_id, message: "is already added" } validates :name, presence: true, format: { with: /\A[a-z0-9-]+\z/ }, uniqueness: { scope: :domain_id, case_sensitive: false, message: "is already added" }
validates :domain_id, uniqueness: { scope: :server_id, message: "already has a track domain for this server" } validates :domain_id, uniqueness: { scope: :server_id, case_sensitive: false, message: "already has a track domain for this server" }
validate :validate_domain_belongs_to_server validate :validate_domain_belongs_to_server
scope :ok, -> { where(dns_status: "OK") } scope :ok, -> { where(dns_status: "OK") }

عرض الملف

@@ -27,11 +27,11 @@ class User < ApplicationRecord
include HasUUID include HasUUID
require_dependency "user/authentication" include HasAuthentication
validates :first_name, presence: true validates :first_name, presence: true
validates :last_name, presence: true validates :last_name, presence: true
validates :email_address, presence: true, uniqueness: true, format: { with: /@/, allow_blank: true } validates :email_address, presence: true, uniqueness: { case_sensitive: false }, format: { with: /@/, allow_blank: true }
validates :time_zone, presence: true validates :time_zone, presence: true
default_value :time_zone, -> { "UTC" } default_value :time_zone, -> { "UTC" }

عرض الملف

@@ -18,7 +18,7 @@ class UserInvite < ApplicationRecord
include HasUUID include HasUUID
validates :email_address, presence: true, uniqueness: true, format: { with: /@/, allow_blank: true } validates :email_address, presence: true, uniqueness: { case_sensitive: false }, format: { with: /@/, allow_blank: true }
has_many :organization_users, dependent: :destroy, as: :user has_many :organization_users, dependent: :destroy, as: :user
has_many :organizations, through: :organization_users has_many :organizations, through: :organization_users

عرض الملف

@@ -58,4 +58,3 @@
Powered by #{link_to "Postal", "https://postalserver.io", target: '_blank'} #{Postal.version}. Powered by #{link_to "Postal", "https://postalserver.io", target: '_blank'} #{Postal.version}.
%li= link_to "Documentation", "https://docs.postalserver.io", target: '_blank' %li= link_to "Documentation", "https://docs.postalserver.io", target: '_blank'
%li= link_to "Ask for help", "https://discussions.postalserver.io", target: '_blank' %li= link_to "Ask for help", "https://discussions.postalserver.io", target: '_blank'

عرض الملف

@@ -15,6 +15,8 @@ Bundler.require(*Rails.groups)
module Postal module Postal
class Application < Rails::Application class Application < Rails::Application
config.load_defaults 6.0
# Disable most generators # Disable most generators
config.generators do |g| config.generators do |g|
g.orm :active_record g.orm :active_record
@@ -36,5 +38,7 @@ module Postal
config.logger = Postal.logger_for(:rails) config.logger = Postal.logger_for(:rails)
config.hosts << Postal.config.web.host
end end
end end

عرض الملف

@@ -1,14 +1,7 @@
require "postal/config" require "postal/config"
if Postal.config.general&.exception_url if Postal.config.general&.exception_url
require "raven" Sentry.init do |config|
Raven.configure do |config|
config.dsn = Postal.config.general.exception_url config.dsn = Postal.config.general.exception_url
config.environments = ["production"]
if ENV["DEV_EXCEPTIONS"]
config.environments << "development"
end
config.silence_ready = true
config.tags = { process: ENV.fetch("PROC_NAME", nil) }
end end
end end

عرض الملف

@@ -50,8 +50,8 @@ module Postal
rescue StandardError => e rescue StandardError => e
raise if Rails.env.development? raise if Rails.env.development?
if defined?(Raven) if defined?(Sentry)
Raven.capture_exception(e) Sentry.capture_exception(e)
end end
@actioned = false @actioned = false
@tracked_links = 0 @tracked_links = 0

عرض الملف

@@ -197,8 +197,8 @@ module Postal
safe_rset safe_rset
rescue StandardError => e rescue StandardError => e
log "#{e.class}: #{e.message}" log "#{e.class}: #{e.message}"
if defined?(Raven) if defined?(Sentry)
Raven.capture_exception(e, extra: { log_id: @log_id, server_id: message.server.id, message_id: message.id }) Sentry.capture_exception(e, extra: { log_id: @log_id, server_id: message.server.id, message_id: message.id })
end end
result.type = "SoftFail" result.type = "SoftFail"
result.retry = true result.retry = true

عرض الملف

@@ -113,8 +113,8 @@ module Postal
monitor.value = client monitor.value = client
rescue StandardError => e rescue StandardError => e
# If something goes wrong, log as appropriate and disconnect the client # If something goes wrong, log as appropriate and disconnect the client
if defined?(Raven) if defined?(Sentry)
Raven.capture_exception(e, extra: { log_id: begin Sentry.capture_exception(e, extra: { log_id: begin
client.id client.id
rescue StandardError rescue StandardError
nil nil
@@ -227,8 +227,8 @@ module Postal
rescue StandardError => e rescue StandardError => e
# Something went wrong, log as appropriate # Something went wrong, log as appropriate
client_id = client ? client.id : "------" client_id = client ? client.id : "------"
if defined?(Raven) if defined?(Sentry)
Raven.capture_exception(e, extra: { log_id: begin Sentry.capture_exception(e, extra: { log_id: begin
client.id client.id
rescue StandardError rescue StandardError
nil nil

عرض الملف

@@ -44,7 +44,7 @@ module Postal
rescue StandardError => e rescue StandardError => e
# Somethign else went wrong. We don't want to stop the image loading though because # Somethign else went wrong. We don't want to stop the image loading though because
# this is our problem. Log this exception though. # this is our problem. Log this exception though.
Raven.capture_exception(e) if defined?(Raven) Sentry.capture_exception(e) if defined?(Sentry)
end end
source_image = request.params["src"] source_image = request.params["src"]

عرض الملف

@@ -69,8 +69,8 @@ module Postal
e.backtrace.each do |line| e.backtrace.each do |line|
logger.warn "[#{message['id']}] " + line logger.warn "[#{message['id']}] " + line
end end
if defined?(Raven) if defined?(Sentry)
Raven.capture_exception(e, extra: { job_id: message["id"] }) Sentry.capture_exception(e, extra: { job_id: message["id"] })
end end
ensure ensure
logger.info "[#{message['id']}] Finished processing \e[34m#{message['class_name']}\e[0m job in #{Time.now - start_time}s" logger.info "[#{message['id']}] Finished processing \e[34m#{message['class_name']}\e[0m job in #{Time.now - start_time}s"