From 1ac47de706b0d63c38914e3674e4c6cb54592450 Mon Sep 17 00:00:00 2001 From: Jez Caudle Date: Thu, 9 May 2024 12:01:45 +0100 Subject: [PATCH] Added postmaster@ and abuse@ to virtuals when you create a domain. Hard coded at the moment. --- Gemfile | 6 +- Gemfile.lock | 166 ++++++++++++++++++------------------- README.md | 5 +- app/models/domain.rb | 8 ++ config/puma.rb | 2 +- test/models/domain_test.rb | 13 ++- 6 files changed, 107 insertions(+), 93 deletions(-) diff --git a/Gemfile b/Gemfile index 47ffc19..b9e6b30 100644 --- a/Gemfile +++ b/Gemfile @@ -1,10 +1,10 @@ source "https://rubygems.org" git_source(:github) { |repo| "https://github.com/#{repo}.git" } -ruby "3.2.3" +ruby "3.3.0" # Bundle edge Rails instead: gem "rails", github: "rails/rails", branch: "main" -gem "rails", "7.1.3" +gem "rails", "7.1.3.2" gem 'devise' @@ -15,7 +15,7 @@ gem "sprockets-rails" gem "mysql2", "~> 0.5" # Use the Puma web server [https://github.com/puma/puma] -gem "puma", "~> 5.0" +gem "puma", "~> 6.0" # Use JavaScript with ESM import maps [https://github.com/rails/importmap-rails] gem "importmap-rails" diff --git a/Gemfile.lock b/Gemfile.lock index 86fc22b..34574e3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,35 +1,35 @@ GEM remote: https://rubygems.org/ specs: - actioncable (7.1.3) - actionpack (= 7.1.3) - activesupport (= 7.1.3) + actioncable (7.1.3.2) + actionpack (= 7.1.3.2) + activesupport (= 7.1.3.2) nio4r (~> 2.0) websocket-driver (>= 0.6.1) zeitwerk (~> 2.6) - actionmailbox (7.1.3) - actionpack (= 7.1.3) - activejob (= 7.1.3) - activerecord (= 7.1.3) - activestorage (= 7.1.3) - activesupport (= 7.1.3) + actionmailbox (7.1.3.2) + actionpack (= 7.1.3.2) + activejob (= 7.1.3.2) + activerecord (= 7.1.3.2) + activestorage (= 7.1.3.2) + activesupport (= 7.1.3.2) mail (>= 2.7.1) net-imap net-pop net-smtp - actionmailer (7.1.3) - actionpack (= 7.1.3) - actionview (= 7.1.3) - activejob (= 7.1.3) - activesupport (= 7.1.3) + actionmailer (7.1.3.2) + actionpack (= 7.1.3.2) + actionview (= 7.1.3.2) + activejob (= 7.1.3.2) + activesupport (= 7.1.3.2) mail (~> 2.5, >= 2.5.4) net-imap net-pop net-smtp rails-dom-testing (~> 2.2) - actionpack (7.1.3) - actionview (= 7.1.3) - activesupport (= 7.1.3) + actionpack (7.1.3.2) + actionview (= 7.1.3.2) + activesupport (= 7.1.3.2) nokogiri (>= 1.8.5) racc rack (>= 2.2.4) @@ -37,35 +37,35 @@ GEM rack-test (>= 0.6.3) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) - actiontext (7.1.3) - actionpack (= 7.1.3) - activerecord (= 7.1.3) - activestorage (= 7.1.3) - activesupport (= 7.1.3) + actiontext (7.1.3.2) + actionpack (= 7.1.3.2) + activerecord (= 7.1.3.2) + activestorage (= 7.1.3.2) + activesupport (= 7.1.3.2) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.1.3) - activesupport (= 7.1.3) + actionview (7.1.3.2) + activesupport (= 7.1.3.2) builder (~> 3.1) erubi (~> 1.11) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) - activejob (7.1.3) - activesupport (= 7.1.3) + activejob (7.1.3.2) + activesupport (= 7.1.3.2) globalid (>= 0.3.6) - activemodel (7.1.3) - activesupport (= 7.1.3) - activerecord (7.1.3) - activemodel (= 7.1.3) - activesupport (= 7.1.3) + activemodel (7.1.3.2) + activesupport (= 7.1.3.2) + activerecord (7.1.3.2) + activemodel (= 7.1.3.2) + activesupport (= 7.1.3.2) timeout (>= 0.4.0) - activestorage (7.1.3) - actionpack (= 7.1.3) - activejob (= 7.1.3) - activerecord (= 7.1.3) - activesupport (= 7.1.3) + activestorage (7.1.3.2) + actionpack (= 7.1.3.2) + activejob (= 7.1.3.2) + activerecord (= 7.1.3.2) + activesupport (= 7.1.3.2) marcel (~> 1.0) - activesupport (7.1.3) + activesupport (7.1.3.2) base64 bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) @@ -79,7 +79,7 @@ GEM public_suffix (>= 2.0.2, < 6.0) base64 (0.2.0) bcrypt (3.1.20) - bigdecimal (3.1.6) + bigdecimal (3.1.8) bindex (0.8.1) bootsnap (1.18.3) msgpack (~> 1.2) @@ -97,31 +97,30 @@ GEM connection_pool (2.4.1) crass (1.0.6) date (3.3.4) - debug (1.9.1) + debug (1.9.2) irb (~> 1.10) reline (>= 0.3.8) - devise (4.9.3) + devise (4.9.4) bcrypt (~> 3.0) orm_adapter (~> 0.1) railties (>= 4.1.0) responders warden (~> 1.2.3) - drb (2.2.0) - ruby2_keywords + drb (2.2.1) erubi (1.12.0) globalid (1.2.1) activesupport (>= 6.1) - i18n (1.14.1) + i18n (1.14.5) concurrent-ruby (~> 1.0) importmap-rails (2.0.1) actionpack (>= 6.0.0) activesupport (>= 6.0.0) railties (>= 6.0.0) io-console (0.7.2) - irb (1.11.1) - rdoc + irb (1.13.1) + rdoc (>= 4.0.0) reline (>= 0.4.2) - jbuilder (2.11.5) + jbuilder (2.12.0) actionview (>= 5.0.0) activesupport (>= 5.0.0) loofah (2.22.0) @@ -132,35 +131,35 @@ GEM net-imap net-pop net-smtp - marcel (1.0.2) + marcel (1.0.4) matrix (0.4.2) mini_mime (1.1.5) - mini_portile2 (2.8.5) - minitest (5.21.2) + mini_portile2 (2.8.6) + minitest (5.22.3) msgpack (1.7.2) mutex_m (0.2.0) - mysql2 (0.5.5) - net-imap (0.4.9.1) + mysql2 (0.5.6) + net-imap (0.4.11) date net-protocol net-pop (0.1.2) net-protocol net-protocol (0.2.2) timeout - net-smtp (0.4.0.1) + net-smtp (0.5.0) net-protocol - nio4r (2.7.0) - nokogiri (1.16.0) + nio4r (2.7.3) + nokogiri (1.16.4) mini_portile2 (~> 2.8.2) racc (~> 1.4) orm_adapter (0.5.0) psych (5.1.2) stringio - public_suffix (5.0.4) - puma (5.6.8) + public_suffix (5.0.5) + puma (6.4.2) nio4r (~> 2.0) racc (1.7.3) - rack (3.0.9) + rack (3.0.10) rack-session (2.0.0) rack (>= 3.0.0) rack-test (2.1.0) @@ -168,20 +167,20 @@ GEM rackup (2.1.0) rack (>= 3) webrick (~> 1.8) - rails (7.1.3) - actioncable (= 7.1.3) - actionmailbox (= 7.1.3) - actionmailer (= 7.1.3) - actionpack (= 7.1.3) - actiontext (= 7.1.3) - actionview (= 7.1.3) - activejob (= 7.1.3) - activemodel (= 7.1.3) - activerecord (= 7.1.3) - activestorage (= 7.1.3) - activesupport (= 7.1.3) + rails (7.1.3.2) + actioncable (= 7.1.3.2) + actionmailbox (= 7.1.3.2) + actionmailer (= 7.1.3.2) + actionpack (= 7.1.3.2) + actiontext (= 7.1.3.2) + actionview (= 7.1.3.2) + activejob (= 7.1.3.2) + activemodel (= 7.1.3.2) + activerecord (= 7.1.3.2) + activestorage (= 7.1.3.2) + activesupport (= 7.1.3.2) bundler (>= 1.15.0) - railties (= 7.1.3) + railties (= 7.1.3.2) rails-dom-testing (2.2.0) activesupport (>= 5.0.0) minitest @@ -189,27 +188,26 @@ GEM rails-html-sanitizer (1.6.0) loofah (~> 2.21) nokogiri (~> 1.14) - railties (7.1.3) - actionpack (= 7.1.3) - activesupport (= 7.1.3) + railties (7.1.3.2) + actionpack (= 7.1.3.2) + activesupport (= 7.1.3.2) irb rackup (>= 1.0.0) rake (>= 12.2) thor (~> 1.0, >= 1.2.2) zeitwerk (~> 2.6) - rake (13.1.0) - rdoc (6.6.2) + rake (13.2.1) + rdoc (6.6.3.1) psych (>= 4.0.0) regexp_parser (2.9.0) - reline (0.4.2) + reline (0.5.6) io-console (~> 0.5) responders (3.1.1) actionpack (>= 5.2) railties (>= 5.2) rexml (3.2.6) - ruby2_keywords (0.0.5) rubyzip (2.3.2) - selenium-webdriver (4.17.0) + selenium-webdriver (4.20.1) base64 (~> 0.2) rexml (~> 3.2, >= 3.2.5) rubyzip (>= 1.2.2, < 3.0) @@ -224,9 +222,9 @@ GEM stimulus-rails (1.3.3) railties (>= 6.0.0) stringio (3.1.0) - thor (1.3.0) + thor (1.3.1) timeout (0.4.1) - turbo-rails (1.5.0) + turbo-rails (2.0.5) actionpack (>= 6.0.0) activejob (>= 6.0.0) railties (>= 6.0.0) @@ -250,7 +248,7 @@ GEM websocket-extensions (0.1.5) xpath (3.2.0) nokogiri (~> 1.8) - zeitwerk (2.6.12) + zeitwerk (2.6.13) PLATFORMS x86_64-openbsd @@ -263,8 +261,8 @@ DEPENDENCIES importmap-rails jbuilder mysql2 (~> 0.5) - puma (~> 5.0) - rails (= 7.1.3) + puma (~> 6.0) + rails (= 7.1.3.2) selenium-webdriver sprockets-rails stimulus-rails @@ -274,7 +272,7 @@ DEPENDENCIES webdrivers RUBY VERSION - ruby 3.2.3p157 + ruby 3.3.0p0 BUNDLED WITH 2.3.26 diff --git a/README.md b/README.md index 66a629f..4282e65 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,9 @@ Is derived from https://github.com/OpenSMTPD/OpenSMTPD-extras/blob/master/extras ## Prerequisites -* Ruby version - 3.2.2p53 -* Rails 7.0.5.1 +* Ruby version - 3.2.3 + +* Rails 7.1.3 * System dependencies diff --git a/app/models/domain.rb b/app/models/domain.rb index 2bff786..fd47f47 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -1,6 +1,14 @@ class Domain < ApplicationRecord + after_create :create_abuse_postmaster + has_many :credentials, dependent: :destroy has_many :virtuals, dependent: :destroy validates :domain, presence: true validates :domain, uniqueness: true + + private + def create_abuse_postmaster + Virtual.create(email: "abuse@#{self.domain}", destination: "jez@warwickhunt.com", domain_id: self.id) + Virtual.create(email: "postmaster@#{self.domain}", destination: "jez@warwickhunt.com", domain_id: self.id) + end end diff --git a/config/puma.rb b/config/puma.rb index 82943c0..bf3c4b6 100644 --- a/config/puma.rb +++ b/config/puma.rb @@ -41,4 +41,4 @@ pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" } # Allow puma to be restarted by `bin/rails restart` command. plugin :tmp_restart -bind 'tcp://0.0.0.0:3001' +bind 'tcp://0.0.0.0:3002' diff --git a/test/models/domain_test.rb b/test/models/domain_test.rb index 8b1a68f..207a022 100644 --- a/test/models/domain_test.rb +++ b/test/models/domain_test.rb @@ -3,16 +3,23 @@ require "test_helper" class DomainTest < ActiveSupport::TestCase test "domain can not be blank" do @d = Domain.new - assert !@d.save + assert_not @d.save end - test "domain can no tbe duplicated" do + test "domain can not be duplicated" do @d1 = Domain.new @d1.domain = "example.com" assert @d1.save @d2 = Domain.new @d2.domain = "example.com" - assert !@d2.save + assert_not @d2.save + end + + test "domain created with abuse and postmaster" do + @d = Domain.new(domain: "example.org.uk") + assert @d.save + + assert_equal(@d.virtuals.count,2) end end