1
0
مراية لـ https://github.com/postalserver/postal.git تم المزامنة 2026-04-21 06:08:09 +00:00

style(rubocop): fix all safe auto correctable offenses

هذا الالتزام موجود في:
Charlie Smurthwaite
2023-03-16 15:50:53 +00:00
الأصل 02c93a4850
التزام fd289c46fd
204 ملفات معدلة مع 2611 إضافات و2486 حذوفات

عرض الملف

@@ -1,4 +1,4 @@
require_relative 'boot'
require_relative "boot"
require "rails"
require "active_model/railtie"
@@ -14,6 +14,7 @@ Bundler.require(*Rails.groups)
module Postal
class Application < Rails::Application
# Disable most generators
config.generators do |g|
g.orm :active_record
@@ -27,12 +28,13 @@ module Postal
config.eager_load_namespaces << Postal
# Disable field_with_errors
config.action_view.field_error_proc = Proc.new { |t, i| t }
config.action_view.field_error_proc = proc { |t, i| t }
# Load the tracking server middleware
require 'postal/tracking_middleware'
require "postal/tracking_middleware"
config.middleware.use Postal::TrackingMiddleware
config.logger = Postal.logger_for(:rails)
end
end

عرض الملف

@@ -1,11 +1,11 @@
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"
Postal.check_config!
ENV['RAILS_ENV'] = Postal.config.rails&.environment || 'development'
ENV["RAILS_ENV"] = Postal.config.rails&.environment || "development"

عرض الملف

@@ -1,26 +1,26 @@
module Clockwork
configure do |config|
config[:tz] = 'UTC'
config[:tz] = "UTC"
config[:logger] = Postal.logger_for(:cron)
end
every 1.minute, 'every-1-minutes' do
every 1.minute, "every-1-minutes" do
RequeueWebhooksJob.queue(:main)
SendNotificationsJob.queue(:main)
end
every 1.hour, 'every-hour', :at => ['**:15'] do
every 1.hour, "every-hour", at: ["**:15"] do
CheckAllDNSJob.queue(:main)
ExpireHeldMessagesJob.queue(:main)
CleanupAuthieSessionsJob.queue(:main)
end
every 1.hour, 'every-hour', :at => ['**:45'] do
every 1.hour, "every-hour", at: ["**:45"] do
PruneWebhookRequestsJob.queue(:main)
end
every 1.day, 'every-day', :at => ['03:00'] do
every 1.day, "every-day", at: ["03:00"] do
ProcessMessageRetentionJob.queue(:main)
PruneSuppressionListsJob.queue(:main)
end

عرض الملف

@@ -1,5 +1,5 @@
# Load the Rails application.
require_relative 'application'
require_relative "application"
# Initialize the Rails application.
Rails.application.initialize!

عرض الملف

@@ -13,12 +13,12 @@ Rails.application.configure do
config.consider_all_requests_local = true
# Enable/disable caching. By default caching is disabled.
if Rails.root.join('tmp/caching-dev.txt').exist?
if Rails.root.join("tmp/caching-dev.txt").exist?
config.action_controller.perform_caching = true
config.cache_store = :memory_store
config.public_file_server.headers = {
'Cache-Control' => 'public, max-age=172800'
"Cache-Control" => "public, max-age=172800"
}
else
config.action_controller.perform_caching = false

عرض الملف

@@ -34,7 +34,6 @@ Rails.application.configure do
# config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
# config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
# config.force_ssl = true
@@ -43,7 +42,7 @@ Rails.application.configure do
config.log_level = :info
# Prepend all log lines with the following tags.
config.log_tags = [ :request_id ]
config.log_tags = [:request_id]
# Use a different cache store in production.
# config.cache_store = :mem_cache_store
@@ -65,7 +64,7 @@ Rails.application.configure do
config.active_support.deprecation = :notify
# Use default logging formatter so that PID and timestamp are not suppressed.
config.log_formatter = ::Logger::Formatter.new
config.log_formatter = Logger::Formatter.new
# Use a different logger for distributed setups.
# require 'syslog/logger'

عرض الملف

@@ -15,7 +15,7 @@ Rails.application.configure do
# Configure public file server for tests with Cache-Control for performance.
config.public_file_server.enabled = true
config.public_file_server.headers = {
'Cache-Control' => 'public, max-age=3600'
"Cache-Control" => "public, max-age=3600"
}
# Show full error reports and disable caching.

عرض الملف

@@ -1,7 +1,7 @@
# Be sure to restart your server when you modify this file.
# Version of your assets, change this if you want to expire all your assets.
Rails.application.config.assets.version = '1.0'
Rails.application.config.assets.version = "1.0"
# Add additional assets to the asset load path
# Rails.application.config.assets.paths << Emoji.images_path

عرض الملف

@@ -12,13 +12,13 @@
# These inflection rules are supported but not enabled by default:
ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.acronym 'API'
inflect.acronym 'SMTP'
inflect.acronym 'IP'
inflect.acronym 'DNS'
inflect.acronym 'UUID'
inflect.acronym 'HTTP'
inflect.acronym 'DB'
inflect.acronym 'MX'
inflect.acronym 'DKIM'
inflect.acronym "API"
inflect.acronym "SMTP"
inflect.acronym "IP"
inflect.acronym "DNS"
inflect.acronym "UUID"
inflect.acronym "HTTP"
inflect.acronym "DB"
inflect.acronym "MX"
inflect.acronym "DKIM"
end

عرض الملف

@@ -1,37 +1,38 @@
require 'mail'
require "mail"
module Mail
module Encodings
# Handle windows-1258 as windows-1252 when decoding
def Encodings.q_value_decode(str)
str = str.sub(/\=\?windows-?1258\?/i, '\=?windows-1252?')
def self.q_value_decode(str)
str = str.sub(/=\?windows-?1258\?/i, '\=?windows-1252?')
RubyVer.q_value_decode(str)
end
def Encodings.b_value_decode(str)
str = str.sub(/\=\?windows-?1258\?/i, '\=?windows-1252?')
def self.b_value_decode(str)
str = str.sub(/=\?windows-?1258\?/i, '\=?windows-1252?')
RubyVer.b_value_decode(str)
end
end
class Message
## Extract plain text body of message
def plain_body
if self.multipart? and self.text_part
self.text_part.decoded
elsif self.mime_type == 'text/plain' || self.mime_type.nil?
self.decoded
else
nil
if multipart? and text_part
text_part.decoded
elsif mime_type == "text/plain" || mime_type.nil?
decoded
end
end
## Extract HTML text body of message
def html_body
if self.multipart? and self.html_part
self.html_part.decoded
elsif self.mime_type == 'text/html'
self.decoded
else
nil
if multipart? and html_part
html_part.decoded
elsif mime_type == "text/html"
decoded
end
end
@@ -46,9 +47,21 @@ module Mail
# Returns the filename of the attachment (if it exists) or returns nil
# Make up a filename for rfc822 attachments if it isn't specified
def find_attachment
content_type_name = header[:content_type].filename rescue nil
content_disp_name = header[:content_disposition].filename rescue nil
content_loc_name = header[:content_location].location rescue nil
content_type_name = begin
header[:content_type].filename
rescue StandardError
nil
end
content_disp_name = begin
header[:content_disposition].filename
rescue StandardError
nil
end
content_loc_name = begin
header[:content_location].location
rescue StandardError
nil
end
if content_type && content_type_name
filename = content_type_name
@@ -56,56 +69,73 @@ module Mail
filename = content_disp_name
elsif content_location && content_loc_name
filename = content_loc_name
elsif self.mime_type == "message/rfc822"
filename = "#{rand(100000000)}.eml"
elsif mime_type == "message/rfc822"
filename = "#{rand(100_000_000)}.eml"
else
filename = nil
end
if filename
# Normal decode
filename = Mail::Encodings.decode_encode(filename, :decode) rescue filename
filename = begin
Mail::Encodings.decode_encode(filename, :decode)
rescue StandardError
filename
end
end
filename
end
def decode_body_as_text
body_text = decode_body
charset_tmp = Encoding.find(Ruby19.pick_encoding(charset)) rescue 'ASCII'
charset_tmp = 'Windows-1252' if charset_tmp.to_s =~ /windows-?1258/i
if charset_tmp == Encoding.find('UTF-7')
body_text.force_encoding('UTF-8')
decoded = body_text.gsub(/\+.*?\-/m) {|n|Base64.decode64(n[1..-2]+'===').force_encoding('UTF-16BE').encode('UTF-8')}
charset_tmp = begin
Encoding.find(Ruby19.pick_encoding(charset))
rescue StandardError
"ASCII"
end
charset_tmp = "Windows-1252" if charset_tmp.to_s =~ /windows-?1258/i
if charset_tmp == Encoding.find("UTF-7")
body_text.force_encoding("UTF-8")
decoded = body_text.gsub(/\+.*?-/m) { |n| Base64.decode64(n[1..-2] + "===").force_encoding("UTF-16BE").encode("UTF-8") }
else
body_text.force_encoding(charset_tmp)
decoded = body_text.encode("utf-8", :invalid => :replace, :undef => :replace)
decoded = body_text.encode("utf-8", invalid: :replace, undef: :replace)
end
decoded.valid_encoding? ? decoded : decoded.encode("utf-16le", :invalid => :replace, :undef => :replace).encode("utf-8")
decoded.valid_encoding? ? decoded : decoded.encode("utf-16le", invalid: :replace, undef: :replace).encode("utf-8")
end
end
# Handle attached emails as attachments
class AttachmentsList < Array
def initialize(parts_list)
@parts_list = parts_list
@content_disposition_type = 'attachment'
parts_list.map { |p|
@content_disposition_type = "attachment"
parts_list.map do |p|
(p.parts.empty? and p.attachment?) ? p : p.attachments
}.flatten.compact.each { |a| self << a }
end.flatten.compact.each { |a| self << a }
self
end
end
end
class Array
def decoded
return nil if self.empty?
return self.first.decoded
return nil if empty?
first.decoded
end
end
class NilClass
def decoded
nil
end
end

عرض الملف

@@ -1,2 +1,2 @@
require 'postal'
require 'postal/message_db/mysql'
require "postal"
require "postal/message_db/mysql"

عرض الملف

@@ -1,5 +1,6 @@
module ActionView
module RecordIdentifier
def dom_id(record, prefix = nil)
if record.new_record?
dom_class(record, prefix || NEW)
@@ -8,5 +9,6 @@ module ActionView
"#{dom_class(record, prefix)}#{JOIN}#{id}"
end
end
end
end

عرض الملف

@@ -1,6 +1,6 @@
if Postal.config.rails&.secret_key
Rails.application.secrets.secret_key_base = Postal.config.rails.secret_key
else
$stderr.puts "No secret key was specified in the Postal config file. Using one for just this session"
warn "No secret key was specified in the Postal config file. Using one for just this session"
Rails.application.secrets.secret_key_base = SecureRandom.hex(128)
end

عرض الملف

@@ -1,10 +1,8 @@
SecureHeaders::Configuration.default do |config|
config.hsts = SecureHeaders::OPT_OUT
config.csp[:default_src] = []
config.csp[:script_src] = ["'self'"]
config.csp[:child_src] = ["'self'"]
config.csp[:connect_src] = ["'self'"]
end

عرض الملف

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

عرض الملف

@@ -1,3 +1,3 @@
# Be sure to restart your server when you modify this file.
Rails.application.config.session_store :cookie_store, key: '_postal_session'
Rails.application.config.session_store :cookie_store, key: "_postal_session"

عرض الملف

@@ -1,5 +1,5 @@
require 'postal/config'
require "postal/config"
if Postal.config&.smtp
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {:address => Postal.config.smtp.host, :user_name => Postal.config.smtp.username, :password => Postal.config.smtp.password, :port => Postal.config.smtp.port || 25}
ActionMailer::Base.smtp_settings = { address: Postal.config.smtp.host, user_name: Postal.config.smtp.username, password: Postal.config.smtp.password, port: Postal.config.smtp.port || 25 }
end

عرض الملف

@@ -1,10 +1,13 @@
class Net::SMTP::Response
def message
@string
end
end
class Net::SMTP
attr_accessor :source_address
def secure_socket?
@@ -19,7 +22,7 @@ class Net::SMTP
#
def rset
@error_occurred = false
getok('RSET')
getok("RSET")
end
def rset_errors
@@ -29,6 +32,7 @@ class Net::SMTP
private
def tcp_socket(address, port)
TCPSocket.open(address, port, self.source_address)
TCPSocket.open(address, port, source_address)
end
end

عرض الملف

@@ -1,9 +1,13 @@
module Rack
class Request
module Helpers
def trusted_proxy?(ip)
ip =~ /^127\.0\.0\.1$|^localhost$|^unix$$/i
end
end
end
end

عرض الملف

@@ -1,9 +1,9 @@
require_relative '../lib/postal/config'
require_relative "../lib/postal/config"
threads_count = Postal.config.web_server&.max_threads&.to_i || 5
threads threads_count, threads_count
bind_address = Postal.config.web_server&.bind_address || '127.0.0.1'
bind_port = Postal.config.web_server&.port&.to_i || ENV['PORT'] || 5000
bind_address = Postal.config.web_server&.bind_address || "127.0.0.1"
bind_port = Postal.config.web_server&.port&.to_i || ENV["PORT"] || 5000
bind "tcp://#{bind_address}:#{bind_port}"
environment Postal.config.rails&.environment || 'development'
environment Postal.config.rails&.environment || "development"
prune_bundler
quiet false

عرض الملف

@@ -1,20 +1,19 @@
Rails.application.routes.draw do
scope "org/:org_permalink", :as => 'organization' do
resources :domains, :only => [:index, :new, :create, :destroy] do
match :verify, :on => :member, :via => [:get, :post]
get :setup, :on => :member
post :check, :on => :member
scope "org/:org_permalink", as: "organization" do
resources :domains, only: [:index, :new, :create, :destroy] do
match :verify, on: :member, via: [:get, :post]
get :setup, on: :member
post :check, on: :member
end
resources :servers, :except => [:index] do
resources :domains, :only => [:index, :new, :create, :destroy] do
match :verify, :on => :member, :via => [:get, :post]
get :setup, :on => :member
post :check, :on => :member
resources :servers, except: [:index] do
resources :domains, only: [:index, :new, :create, :destroy] do
match :verify, on: :member, via: [:get, :post]
get :setup, on: :member
post :check, on: :member
end
resources :track_domains do
post :toggle_ssl, :on => :member
post :check, :on => :member
post :toggle_ssl, on: :member
post :check, on: :member
end
resources :credentials
resources :routes
@@ -23,70 +22,69 @@ Rails.application.routes.draw do
resources :address_endpoints
resources :ip_pool_rules
resources :messages do
get :incoming, :on => :collection
get :outgoing, :on => :collection
get :held, :on => :collection
get :activity, :on => :member
get :plain, :on => :member
get :html, :on => :member
get :html_raw, :on => :member
get :attachments, :on => :member
get :headers, :on => :member
get :attachment, :on => :member
get :download, :on => :member
get :spam_checks, :on => :member
post :retry, :on => :member
post :cancel_hold, :on => :member
get :suppressions, :on => :collection
delete :remove_from_queue, :on => :member
get :deliveries, :on => :member
get :incoming, on: :collection
get :outgoing, on: :collection
get :held, on: :collection
get :activity, on: :member
get :plain, on: :member
get :html, on: :member
get :html_raw, on: :member
get :attachments, on: :member
get :headers, on: :member
get :attachment, on: :member
get :download, on: :member
get :spam_checks, on: :member
post :retry, on: :member
post :cancel_hold, on: :member
get :suppressions, on: :collection
delete :remove_from_queue, on: :member
get :deliveries, on: :member
end
resources :webhooks do
get :history, :on => :collection
get 'history/:uuid', :on => :collection, :action => 'history_request', :as => 'history_request'
get :history, on: :collection
get "history/:uuid", on: :collection, action: "history_request", as: "history_request"
end
get :limits, :on => :member
get :retention, :on => :member
get :queue, :on => :member
get :spam, :on => :member
get :delete, :on => :member
get 'help/outgoing' => 'help#outgoing'
get 'help/incoming' => 'help#incoming'
get :advanced, :on => :member
post :suspend, :on => :member
post :unsuspend, :on => :member
get :limits, on: :member
get :retention, on: :member
get :queue, on: :member
get :spam, on: :member
get :delete, on: :member
get "help/outgoing" => "help#outgoing"
get "help/incoming" => "help#incoming"
get :advanced, on: :member
post :suspend, on: :member
post :unsuspend, on: :member
end
resources :ip_pool_rules
resources :ip_pools, :controller => 'organization_ip_pools' do
put :assignments, :on => :collection
resources :ip_pools, controller: "organization_ip_pools" do
put :assignments, on: :collection
end
root 'servers#index'
get 'settings' => 'organizations#edit'
patch 'settings' => 'organizations#update'
get 'delete' => 'organizations#delete'
delete 'delete' => 'organizations#destroy'
root "servers#index"
get "settings" => "organizations#edit"
patch "settings" => "organizations#update"
get "delete" => "organizations#delete"
delete "delete" => "organizations#destroy"
end
resources :organizations, :except => [:index]
resources :organizations, except: [:index]
resources :users
resources :ip_pools do
resources :ip_addresses
end
get 'settings' => 'user#edit'
patch 'settings' => 'user#update'
post 'persist' => 'sessions#persist'
get "settings" => "user#edit"
patch "settings" => "user#update"
post "persist" => "sessions#persist"
get 'login' => 'sessions#new'
post 'login' => 'sessions#create'
get 'login/token' => 'sessions#create_with_token'
delete 'logout' => 'sessions#destroy'
match 'login/reset' => 'sessions#begin_password_reset', :via => [:get, :post]
match 'login/reset/:token' => 'sessions#finish_password_reset', :via => [:get, :post]
get "login" => "sessions#new"
post "login" => "sessions#create"
get "login/token" => "sessions#create_with_token"
delete "logout" => "sessions#destroy"
match "login/reset" => "sessions#begin_password_reset", :via => [:get, :post]
match "login/reset/:token" => "sessions#finish_password_reset", :via => [:get, :post]
get "ip" => "sessions#ip"
get 'ip' => 'sessions#ip'
root 'organizations#index'
root "organizations#index"
end