Projects
home:rottame:yggdra_agents
mail_agent
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 6
View file
mail_agent.spec
Deleted
@@ -1,115 +0,0 @@ -Name: mail_agent -Version: 1.0.0 -Release: 0 -Summary: Mailserver Agent -License: Apache-2.0 -Group: Development/Languages/Ruby -URL: https://intercom.it -Source: %{name}-%{version}.tar.gz -BuildArch: noarch -BuildRequires: ruby-macros >= 5 -BuildRequires: systemd-rpm-macros -Requires: rubygem(ruby:2.5.0:tomte-agents:1.1) >= 1.1.0 -Requires: rubygem(ruby:2.5.0:activeresource-hel) -Requires: rubygem(ruby:2.5.0:sentry-raven) -Requires: rubygem(ruby:2.5.0:pry) -Requires: rubygem(ruby:2.5.0:kyotocabinet) -Requires: rubygem(ruby:2.5.0:mysql2) - -%description -Mail agent DB provisioning agent - -%prep - -%setup - -%build - -%install -%make_install -install -D -m 0644 support/mail_agent.service %{buildroot}%{_unitdir}/mail_agent.service -install -D -m 0644 support/mail_agent.tempfiles %{buildroot}%{_tmpfilesdir}/mail_agent.conf -ln -s /usr/sbin/service %{buildroot}%{_sbindir}/rcmail_agent - -%pre -%{_bindir}/getent group tomte >/dev/null || %{_sbindir}/groupadd -r tomte -%{_bindir}/getent passwd tomte >/dev/null || %{_sbindir}/useradd -r -d %{_localstatedir}/lib/tomte -s /bin/false -c "tomte agent" -g tomte tomte -%service_add_pre mail_agent.service -exit 0 - -%preun -%service_del_preun mail_agent.service -exit 0 - -%post -%tmpfiles_create %_tmpfilesdir/mail_agent.conf -%service_add_post mail_agent.service -exit 0 - -%postun -%service_del_postun mail_agent.service -exit 0 - -%files -%defattr(-, root, root) - -%dir %{_sysconfdir}/tomte - -%dir /usr/lib/mail_agent -%dir /usr/lib/mail_agent/bin -%dir /usr/lib/mail_agent/lib -%dir /usr/lib/mail_agent/lib/mail_agent -%dir /usr/lib/mail_agent/lib/mail_agent/models -%dir /usr/lib/mail_agent/lib/mail_agent/models/amavis -%dir /usr/lib/mail_agent/lib/mail_agent/models/email -%dir /usr/lib/mail_agent/lib/mail_agent/models/rate_limit -%dir /usr/lib/mail_agent/lib/mail_agent/models/cluebringer -%dir /usr/lib/mail_agent/lib/mail_agent/ygg -%dir /usr/lib/mail_agent/lib/mail_agent/ygg/simple_service -%dir /usr/lib/mail_agent/lib/mail_agent/ygg/simple_service/email -%dir /usr/lib/mail_agent/lib/mail_agent/ygg/simple_service/email/domain -%dir /usr/lib/mail_agent/lib/tomte -%dir /usr/lib/mail_agent/lib/tomte/agents -%dir /usr/lib/mail_agent/lib/tomte/workers - -%attr(0700, tomte, tomte) %dir %{_localstatedir}/lib/tomte - -%config(noreplace) %{_sysconfdir}/tomte/tomte.yml -%config(noreplace) %{_sysconfdir}/tomte/mail_agent.yml - -%{_unitdir}/mail_agent.service -%{_tmpfilesdir}/mail_agent.conf - -%{_sbindir}/rcmail_agent -%attr(0755, root, root) %{_sbindir}/mail_agent -%attr(0755, root, root) /usr/lib/mail_agent/bin/mail_agent - -/usr/lib/mail_agent/lib/mail_agent/models.rb -/usr/lib/mail_agent/lib/mail_agent/models/amavis.rb -/usr/lib/mail_agent/lib/mail_agent/models/amavis/user.rb -/usr/lib/mail_agent/lib/mail_agent/models/email.rb -/usr/lib/mail_agent/lib/mail_agent/models/email/domain.rb -/usr/lib/mail_agent/lib/mail_agent/models/email/forward.rb -/usr/lib/mail_agent/lib/mail_agent/models/email/box.rb -/usr/lib/mail_agent/lib/mail_agent/models/rate_limit.rb -/usr/lib/mail_agent/lib/mail_agent/models/rate_limit/authenticated_identity.rb -/usr/lib/mail_agent/lib/mail_agent/models/rate_limit/client_address.rb -/usr/lib/mail_agent/lib/mail_agent/models/rate_limit/policy.rb -/usr/lib/mail_agent/lib/mail_agent/models/rate_limit/tracker.rb -/usr/lib/mail_agent/lib/mail_agent/models/cluebringer/policy.rb -/usr/lib/mail_agent/lib/mail_agent/models/cluebringer/policy_group.rb -/usr/lib/mail_agent/lib/mail_agent/models/cluebringer/policy_group_member.rb -/usr/lib/mail_agent/lib/mail_agent/models/cluebringer/quotas_tracking.rb -/usr/lib/mail_agent/lib/mail_agent/models/cluebringer.rb -/usr/lib/mail_agent/lib/mail_agent/ygg.rb -/usr/lib/mail_agent/lib/mail_agent/ygg/simple_service/email/box.rb -/usr/lib/mail_agent/lib/mail_agent/ygg/simple_service/email/domain.rb -/usr/lib/mail_agent/lib/mail_agent/ygg/simple_service/email/domain/alias.rb -/usr/lib/mail_agent/lib/mail_agent/ygg/simple_service/email/relay_extension.rb -/usr/lib/mail_agent/lib/tomte/agents/mail_agent.rb -/usr/lib/mail_agent/lib/tomte/workers/mail_worker_pubsub.rb -/usr/lib/mail_agent/lib/mail_agent.rb - -%ghost /run/mail_agent - -%changelog
View file
mail_agent-1.0.0.tar.gz/.
Deleted
-(directory)
View file
mail_agent-1.0.0.tar.gz/.gitignore
Deleted
@@ -1,39 +0,0 @@ -# Documentation -doc -.yardoc -.yardopts - -# Mac -**/.DS_Store - -# Eclipse -*/.project -.project - -# IntelliJ -.idea - -# Redcar -*/.redcar -.redcar - -# Rubinius -*.rbc - -# Backup -*~ -_*.rb - -# build packages -pkg - -config/*.yml - -.bundle -.ruby-gemset - -log/*.log - -vendor - -tmp \ No newline at end of file
View file
mail_agent-1.0.0.tar.gz/Dockerfile
Deleted
@@ -1,46 +0,0 @@ -FROM opensuse/leap:15.1 -RUN zypper -n ar http://repos.obs.intercom.it/home:/rottame:/rubygems/openSUSE_Leap_15.1/ vhosts-ng -RUN zypper -n --gpg-auto-import-keys ref -RUN zypper -n in ruby2.5-rubygem-activesupport-5.2 \ - ruby2.5-rubygem-amq-protocol \ - ruby2.5-rubygem-amqp \ - ruby2.5-rubygem-awesome_print \ - ruby2.5-rubygem-bson \ - ruby2.5-rubygem-bson_ext \ - ruby2.5-rubygem-bundler \ - ruby2.5-rubygem-case \ - ruby2.5-rubygem-coderay \ - ruby2.5-rubygem-concurrent-ruby \ - ruby2.5-rubygem-diff-lcs \ - ruby2.5-rubygem-eventmachine \ - ruby2.5-rubygem-i18n \ - ruby2.5-rubygem-json \ - ruby2.5-rubygem-kyotocabinet \ - ruby2.5-rubygem-method_source \ - ruby2.5-rubygem-mime-types \ - ruby2.5-rubygem-mime-types-data \ - ruby2.5-rubygem-minitest \ - ruby2.5-rubygem-pry \ - ruby2.5-rubygem-publisher \ - ruby2.5-rubygem-rake-12_0 \ - ruby2.5-rubygem-rspec \ - ruby2.5-rubygem-rspec-core \ - ruby2.5-rubygem-rspec-expectations \ - ruby2.5-rubygem-rspec-mocks \ - ruby2.5-rubygem-rspec-support \ - ruby2.5-rubygem-thor \ - ruby2.5-rubygem-thread_safe \ - ruby2.5-rubygem-tomte-core \ - ruby2.5-rubygem-tomte-protocol \ - ruby2.5-rubygem-tzinfo \ - ruby2.5-rubygem-uuidtools \ - ruby2.5-rubygem-wml-compat \ - ruby2.5-rubygem-ygg_provisioner \ - ruby2.5-rubygem-zeitwerk \ - ruby2.5-rubygem-activeresource-hel \ - ruby2.5-rubygem-sentry-raven \ - ruby2.5-rubygem-mysql2-0_4 \ - vim iputils bind-utils -RUN mkdir /var/lib/hel-agent/ -RUN mkdir /mail_agent -WORKDIR /mail_agent \ No newline at end of file
View file
mail_agent-1.0.0.tar.gz/Makefile
Deleted
@@ -1,108 +0,0 @@ -PHONY: docker-image devel shell install bin-script rpm-src - -PREFIX ?= /usr -DESTDIR ?= -VERSION=1.0.0 - -docker-image: - docker build -t mail_agent -f Dockerfile . -devel: docker-image - docker run -ti --rm \ - -v ${PWD}:/mail_agent \ - --add-host=hel.dev.me:10.0.3.100 \ - --add-host=hel.local.me:192.168.193.198 \ - --add-host=hel.staging.me:192.168.193.197 \ - mail_agent \ - ./bin/mail_agent -e development -D - -shell: docker-image - docker run -ti --rm \ - -v ${PWD}:/mail_agent \ - --add-host=hel.dev.me:10.0.3.100 \ - --add-host=hel.local.me:192.168.193.198 \ - --add-host=hel.staging.me:192.168.193.197 \ - mail_agent \ - bash - -bin-script: - mkdir -p tmp - cp bin/mail_agent.sh.in tmp/mail_agent.sh - sed -i "s/PREFIX/$(subst /,\\/,$(PREFIX))/g" tmp/mail_agent.sh - -install: bin-script - install -d -m 0755 $(DESTDIR)/etc/tomte - install -d -m 0755 $(DESTDIR)$(PREFIX)/sbin - install -d -m 0755 $(DESTDIR)$(PREFIX)/lib/mail_agent - install -d -m 0755 $(DESTDIR)/var/lib/tomte - - install -d -m 0755 $(DESTDIR)$(PREFIX)/lib - install -d -m 0755 $(DESTDIR)$(PREFIX)/lib/mail_agent/bin/ - install -d -m 0755 $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/ - install -d -m 0755 $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent - install -d -m 0755 $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/models - install -d -m 0755 $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/models/amavis - install -d -m 0755 $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/models/email - install -d -m 0755 $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/models/rate_limit - install -d -m 0755 $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/models/cluebringer - install -d -m 0755 $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/ygg - install -d -m 0755 $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/ygg/simple_service - install -d -m 0755 $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/ygg/simple_service/email - install -d -m 0755 $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/ygg/simple_service/email/domain - install -d -m 0755 $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/tomte - install -d -m 0755 $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/tomte/agents - install -d -m 0755 $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/tomte/workers - - install -d -m 0755 $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/tomte/workers - - install -m 0644 config/tomte.yml.sample $(DESTDIR)/etc/tomte/tomte.yml - install -m 0644 config/mail_agent.yml.sample $(DESTDIR)/etc/tomte/mail_agent.yml - - install -m 0755 tmp/mail_agent.sh $(DESTDIR)$(PREFIX)/sbin/mail_agent - install -m 0755 bin/mail_agent $(DESTDIR)$(PREFIX)/lib/mail_agent/bin/mail_agent - - install -m 0644 lib/mail_agent/models.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/models.rb - install -m 0644 lib/mail_agent/models/amavis.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/models/amavis.rb - install -m 0644 lib/mail_agent/models/amavis/user.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/models/amavis/user.rb - install -m 0644 lib/mail_agent/models/email.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/models/email.rb - install -m 0644 lib/mail_agent/models/email/domain.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/models/email/domain.rb - install -m 0644 lib/mail_agent/models/email/forward.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/models/email/forward.rb - install -m 0644 lib/mail_agent/models/email/box.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/models/email/box.rb - install -m 0644 lib/mail_agent/models/rate_limit.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/models/rate_limit.rb - install -m 0644 lib/mail_agent/models/rate_limit/authenticated_identity.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/models/rate_limit/authenticated_identity.rb - install -m 0644 lib/mail_agent/models/rate_limit/client_address.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/models/rate_limit/client_address.rb - install -m 0644 lib/mail_agent/models/rate_limit/policy.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/models/rate_limit/policy.rb - install -m 0644 lib/mail_agent/models/rate_limit/tracker.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/models/rate_limit/tracker.rb - install -m 0644 lib/mail_agent/models/cluebringer/policy.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/models/cluebringer/policy.rb - install -m 0644 lib/mail_agent/models/cluebringer/policy_group.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/models/cluebringer/policy_group.rb - install -m 0644 lib/mail_agent/models/cluebringer/policy_group_member.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/models/cluebringer/policy_group_member.rb - install -m 0644 lib/mail_agent/models/cluebringer/quotas_tracking.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/models/cluebringer/quotas_tracking.rb - install -m 0644 lib/mail_agent/models/cluebringer.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/models/cluebringer.rb - install -m 0644 lib/mail_agent/ygg.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/ygg.rb - install -m 0644 lib/mail_agent/ygg/simple_service/email/box.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/ygg/simple_service/email/box.rb - install -m 0644 lib/mail_agent/ygg/simple_service/email/domain.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/ygg/simple_service/email/domain.rb - install -m 0644 lib/mail_agent/ygg/simple_service/email/domain/alias.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/ygg/simple_service/email/domain/alias.rb - install -m 0644 lib/mail_agent/ygg/simple_service/email/relay_extension.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent/ygg/simple_service/email/relay_extension.rb - install -m 0644 lib/tomte/agents/mail_agent.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/tomte/agents/mail_agent.rb - install -m 0644 lib/tomte/workers/mail_worker_pubsub.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/tomte/workers/mail_worker_pubsub.rb - install -m 0644 lib/mail_agent.rb $(DESTDIR)$(PREFIX)/lib/mail_agent/lib/mail_agent.rb - -define _copy_files -for file in $(git ls-files); do - mkdir -p "$(dirname "tmp/rpm-src/mail_agent-1.0.0/${file}")"; - echo cp "${file}" "$(dirname "tmp/rpm-src/mail_agent-1.0.0/${file}")"; - cp "${file}" "$(dirname "tmp/rpm-src/mail_agent-1.0.0/${file}")"; -done; -endef -export copy_files = $(value _copy_files) - -rpm-src: - rm -rf tmp/rpm-src/mail_agent-${VERSION} - rm -rf tmp/rpm-src/mail_agent-${VERSION}.tar.gz - mkdir -p tmp/rpm-src/mail_agent - @ eval "$$copy_files" - mv tmp/rpm-src/mail_agent tmp/rpm-src/mail_agent-${VERSION} - tar czf tmp/rpm-src/mail_agent-${VERSION}.tar.gz -C tmp/rpm-src mail_agent-${VERSION} - rm -rf tmp/rpm-src/mail_agent-${VERSION} - cp mail_agent.spec.in tmp/rpm-src - sed -i "s/SRC_VERSION/${VERSION}/g" tmp/rpm-src/mail_agent.spec.in - mv tmp/rpm-src/mail_agent.spec.in tmp/rpm-src/mail_agent.spec
View file
mail_agent-1.0.0.tar.gz/bin
Deleted
-(directory)
View file
mail_agent-1.0.0.tar.gz/bin/mail_agent
Deleted
@@ -1,12 +0,0 @@ -#!/usr/bin/ruby - -require 'rubygems' -#require 'bundler/setup' - -require "tomte/agents" - -# -# just starts the agent now -# -Tomte::Agents::Framework.setup(:async => true, :application => 'mail_agent') -Tomte::Agent::MailAgent::new(:argv => ARGV).run! \ No newline at end of file
View file
mail_agent-1.0.0.tar.gz/bin/mail_agent.sh.in
Deleted
@@ -1,3 +0,0 @@ -#!/bin/sh - -exec PREFIX/lib/mail_agent/bin/mail_agent $@ \ No newline at end of file
View file
mail_agent-1.0.0.tar.gz/config
Deleted
-(directory)
View file
mail_agent-1.0.0.tar.gz/config/mail_agent.yml.sample
Deleted
@@ -1,135 +0,0 @@ -development: - core: - log_level: debug - debug: false - hel: - host: HEL_ADDRESS - username: HEL_USERNAME - password: HEL_PASSWORD - raven: - dsn: - database: - email: - adapter: mysql2 - encoding: utf8 - database: DATABASE - pool: 5 - host: DATABASE_ADDRESS - username: DATABASE_USERNAME - password: DATABASE_PASSWORD - #reconnect: false - #socket: /tmp/mysql.sock - rate_limit: - adapter: mysql2 - encoding: utf8 - database: DATABASE - pool: 5 - host: DATABASE_ADDRESS - username: DATABASE_USERNAME - password: DATABASE_PASSWORD - #reconnect: false - #socket: /tmp/mysql.sock - cluebringer: - adapter: mysql2 - encoding: utf8 - database: DATABASE - pool: 5 - host: DATABASE_ADDRESS - username: DATABASE_USERNAME - password: DATABASE_PASSWORD - #reconnect: false - #socket: /tmp/mysql.sock - amavis: - adapter: mysql2 - encoding: utf8 - database: DATABASE - pool: 5 - host: DATABASE_ADDRESS - username: DATABASE_USERNAME - password: DATABASE_PASSWORD - #reconnect: false - #socket: /tmp/mysql.sock - -production: - core: - log_level: info - debug: false - hel: - host: HEL_ADDRESS - username: HEL_USERNAME - password: HEL_PASSWORD - raven: - dsn: - database: - email: - adapter: mysql2 - encoding: utf8 - database: DATABASE - pool: 5 - host: DATABASE_ADDRESS - username: DATABASE_USERNAME - password: DATABASE_PASSWORD - #reconnect: false - #socket: /tmp/mysql.sock - rate_limit: - adapter: mysql2 - encoding: utf8 - database: DATABASE - pool: 5 - host: DATABASE_ADDRESS - username: DATABASE_USERNAME - password: DATABASE_PASSWORD - #reconnect: false - #socket: /tmp/mysql.sock - cluebringer: - adapter: mysql2 - encoding: utf8 - database: DATABASE - pool: 5 - host: DATABASE_ADDRESS - username: DATABASE_USERNAME - password: DATABASE_PASSWORD - #reconnect: false - #socket: /tmp/mysql.sock - amavis: - adapter: mysql2 - encoding: utf8 - database: DATABASE - pool: 5 - host: DATABASE_ADDRESS - username: DATABASE_USERNAME - password: DATABASE_PASSWORD - #reconnect: false - #socket: /tmp/mysql.sock - -test: - core: - log_level: debug - debug: false - hel: - host: HEL_ADDRESS - username: HEL_USERNAME - password: HEL_PASSWORD - raven: - dsn: - database: - email: - adapter: mysql2 - encoding: utf8 - database: mail - pool: 5 - host: DATABASE_ADDRESS - username: DATABASE_USERNAME - password: DATABASE_PASSWORD - #reconnect: false - #socket: /tmp/mysql.sock - rate_limit: - adapter: mysql2 - encoding: utf8 - database: smtp_out_ng - pool: 5 - host: DATABASE_ADDRESS - username: DATABASE_USERNAME - password: DATABASE_PASSWORD - #reconnect: false - #socket: /tmp/mysql.sock
View file
mail_agent-1.0.0.tar.gz/lib
Deleted
-(directory)
View file
mail_agent-1.0.0.tar.gz/lib/mail_agent
Deleted
-(directory)
View file
mail_agent-1.0.0.tar.gz/lib/mail_agent.rb
Deleted
@@ -1,111 +0,0 @@ -$:.unshift File::dirname(__FILE__) -require 'mail_agent/models' -require 'mail_agent/ygg' -#require 'tomte/workers/mail_worker_pubsub' - -module MailAgent - class BulkSync - attr_accessor :domains, :boxes, :relext - def initialize - load_data - end - - def load_data - self.domains ||= Ygg::SimpleService::Email::Domain.view(:provisioning).all - self.boxes ||= Ygg::SimpleService::Email::Box.view(:provisioning).all - self.relext ||= Ygg::SimpleService::Email::RelayExtension.view(:provisioning).all - end - - def sync - load_data - sync_domains - sync_boxes - #sync_rate_limit - sync_rate_limit_cluebringer - rescue - ex = $! - if defined?(Raven) - Raven.capture_exception(ex) - end - raise ex - end - - - protected - - def sync_domains - Models::Email::Domain.transaction do - ygg_pks = - domains.each do | domain | - ygg_pks << domain.uuid if domain.create_or_update_db_domain! - end - - db_pks = Models::Email::Domain.all.map(&:uuid) - old = db_pks - ygg_pks - - if old.any? - old = Models::Email::Domain.where(uuid: old) - doms = old.map(&:domain).map{|d| "@#{d}"} - Models::Amavis::User.where(email: doms).map(&:destroy) - old.map(&:destroy!) - end - end - end - - def sync_boxes - Models::Email::Box.transaction do - ygg_pks = - boxes.each do | box | - ygg_pks << box.uuid if box.create_or_update_db_box! - end - - relext.each do | ext | - ygg_pks << ext.uuid if ext.create_or_update_db_box! - end - - db_pks = Models::Email::Box.all.map(&:uuid) - old = db_pks - ygg_pks - - if old.any? - old = Models::Email::Box.where(uuid: old) - fqdas = old.map(&:fqda) - Models::Amavis::User.where(email: fqdas).map(&:destroy) - old.map(&:destroy!) - end - end - end - -# def sync_rate_limit -# Models::RateLimit::Policy.transaction do -# uuids = -# -# relext.each do | ext | -# uuids << ext.uuid if ext.create_or_update_db_extension! -# end -# -# db_uuids = Models::RateLimit::ClientAddress.all.map(&:notes) -# old = db_uuids - uuids -# Models::RateLimit::ClientAddress.where(notes: old).all.map(&:destroy!) if old.any? -# -# db_uuids = Models::RateLimit::AuthenticatedIdentity.all.map(&:notes) -# old = db_uuids - uuids -# Models::RateLimit::AuthenticatedIdentity.where(notes: old).all.map(&:destroy!) if old.any? -# end -# end - - def sync_rate_limit_cluebringer - Models::Cluebringer::Policy.transaction do - Models::Cluebringer::PolicyGroup.build_default! - uuids = - - relext.each do | ext | - uuids << ext.uuid if ext.create_or_update_db_extension! - end - - db_uuids = Models::Cluebringer::PolicyGroupMember.managed.all.map(&:uuid).compact - old = db_uuids - uuids - Models::Cluebringer::PolicyGroupMember.where_uuid(old).destroy_all if old.any? - end - end - end -end \ No newline at end of file
View file
mail_agent-1.0.0.tar.gz/lib/mail_agent/models
Deleted
-(directory)
View file
mail_agent-1.0.0.tar.gz/lib/mail_agent/models.rb
Deleted
@@ -1,10 +0,0 @@ -require 'active_record' - -module MailAgent - module Models - autoload :Email, 'mail_agent/models/email' - autoload :Amavis, 'mail_agent/models/amavis' - #autoload :RateLimit, 'mail_agent/models/rate_limit' - autoload :Cluebringer, 'mail_agent/models/cluebringer' - end -end
View file
mail_agent-1.0.0.tar.gz/lib/mail_agent/models/amavis
Deleted
-(directory)
View file
mail_agent-1.0.0.tar.gz/lib/mail_agent/models/cluebringer
Deleted
-(directory)
View file
mail_agent-1.0.0.tar.gz/lib/mail_agent/models/cluebringer/policy_group_member.rb
Deleted
@@ -1,79 +0,0 @@ - -module MailAgent - module Models - module Cluebringer - class PolicyGroupMember < MailAgent::Models::Cluebringer::Base - self.primary_key = 'ID' - self.table_name = 'policy_group_members' - - belongs_to :group, - class_name: 'MailAgent::Models::Cluebringer::PolicyGroup', - primary_key: 'ID', - foreign_key: 'PolicyGroupID' - - scope :managed, -> { where arel_table:Comment.matches('hel:%') } - - before_destroy :reset_quota_trackings - - def self.find_by_hel(object) - self.managed.where_uuid(object.uuid).first - end - - def self.where_uuid(uuid) - uuid = uuid.flatten - uuid = uuid.map{|u| u ? "hel:#{u}" : u} - self.where(Comment: uuid) - end - - def self.create_or_update_with_hel!(ext) - raise "#{ext.to_s} isn't a Ygg::SimpleService::Email::RelayExtension" unless ext.is_a?(Ygg::SimpleService::Email::RelayExtension) - pg = PolicyGroup.get(ext.rate_limit, ext.is_address?) - member = if ext.is_address? - ext.ip - elsif ext.is_identity? - "$#{ext.login}" - end - - pgm = self.find_or_initialize_by(Member: member) # maybe exists a manual entry - - unless pgm.persisted? && pgm.PolicyGroupID == pg.ID - key = if ext.is_address? - "SenderIP:#{ext.ip}/32" unless ext.ip =~ /\// - "SenderIP:#{ext.ip}" if ext.ip =~ /\// - else - "SASLUsername:#{ext.login}" - end - QuotasTracking.where(TrackKey: key).delete_all - end - - pgm.attributes = { - PolicyGroupID: pg.ID, - Member: member, - Disabled: !!(ext.on_hold || ext.domain_on_hold), - Comment: "hel:#{ext.uuid}" - } - - pgm.save! - pgm - end - - def uuid - self.Comment.gsub(/\Ahel:/, '') if self.Comment =~ /\Ahel:/ - end - - protected - - def reset_quota_trackings - member = self.Member.gsub(/\A\$/, '') - key = if member =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/ - "SenderIP:#{member}/32" unless member =~ /\// - "SenderIP:#{member}" if member =~ /\// - else - "SASLUsername:#{member}" - end - QuotasTracking.where(TrackKey: key).delete_all - end - end - end - end -end
View file
mail_agent-1.0.0.tar.gz/lib/mail_agent/models/email
Deleted
-(directory)
View file
mail_agent-1.0.0.tar.gz/lib/mail_agent/models/rate_limit
Deleted
-(directory)
View file
mail_agent-1.0.0.tar.gz/lib/mail_agent/models/rate_limit.rb
Deleted
@@ -1,15 +0,0 @@ - -module MailAgent - module Models - module RateLimit - class Base < ActiveRecord::Base - self.abstract_class = true - end - - autoload :AuthenticatedIdentity, 'mail_agent/models/rate_limit/authenticated_identity' - autoload :ClientAddress, 'mail_agent/models/rate_limit/client_address' - autoload :Policy, 'mail_agent/models/rate_limit/policy' - autoload :Tracker, 'mail_agent/models/rate_limit/tracker' - end - end -end \ No newline at end of file
View file
mail_agent-1.0.0.tar.gz/lib/mail_agent/models/rate_limit/authenticated_identity.rb
Deleted
@@ -1,41 +0,0 @@ - -module MailAgent - module Models - module RateLimit - class AuthenticatedIdentity < RateLimit::Base - belongs_to :policy - belongs_to :tracker - - def self.create_or_update_with_hel!(object, policy) - raise "#{object.to_s} isn't a Ygg::SimpleService::Email::RelayExtension" unless object.is_a?(Ygg::SimpleService::Email::RelayExtension) - record = find_by_hel(object) - record.destroy! if record && !object.is_identity? - return false unless object.is_identity? - - record ||= new - record.identity = object.login - record.notes = object.uuid - record.disabled = false - record.static = false - record.policy_id = policy.id - record.save! - record - end - - def self.find_by_hel(object) - raise "#{object.to_s} isn't a Ygg::SimpleService::Email::RelayExtension" unless object.is_a?(Ygg::SimpleService::Email::RelayExtension) - where(notes: object.uuid).first - end - - # SQL foreign key contstraint violation - def destroy! - self.class.transaction do - trk = self.tracker - super - trk.destroy! if trk - end - end - end - end - end -end \ No newline at end of file
View file
mail_agent-1.0.0.tar.gz/lib/mail_agent/models/rate_limit/client_address.rb
Deleted
@@ -1,41 +0,0 @@ - -module MailAgent - module Models - module RateLimit - class ClientAddress < RateLimit::Base - belongs_to :policy - belongs_to :tracker - - def self.create_or_update_with_hel!(object, policy) - raise "#{object.to_s} isn't a Ygg::SimpleService::Email::RelayExtension" unless object.is_a?(Ygg::SimpleService::Email::RelayExtension) - record = find_by_hel(object) - record.destroy! if record && !object.is_address? - return false unless object.is_address? - - record ||= new - record.address = object.ip - record.notes = object.uuid - record.disabled = false - record.static = false - record.policy_id = policy.id - record.save! - record - end - - def self.find_by_hel(object) - raise "#{object.to_s} isn't a Ygg::SimpleService::Email::RelayExtension" unless object.is_a?(Ygg::SimpleService::Email::RelayExtension) - where(notes: object.uuid).first - end - - # SQL foreign key contstraint violation - def destroy! - self.class.transaction do - trk = self.tracker - super - trk.destroy! if trk - end - end - end - end - end -end \ No newline at end of file
View file
mail_agent-1.0.0.tar.gz/lib/mail_agent/models/rate_limit/policy.rb
Deleted
@@ -1,40 +0,0 @@ - -module MailAgent - module Models - module RateLimit - class Policy < RateLimit::Base - has_many :authenticated_identities - - has_many :client_addresses - - def is_default? - name.strip =~ /\Adefault/ - end - - def not_default? - !is_default? - end - - def self.find_by_hel(object) - raise "#{object.to_s} isn't a Ygg::SimpleService::Email::RelayExtension" unless object.is_a?(Ygg::SimpleService::Email::RelayExtension) - policy = self.where(name: object.rate_limit).first - end - - def create_or_update_extension_with_hel!(object) - raise "#{object.to_s} isn't a Ygg::SimpleService::Email::RelayExtension" unless object.is_a?(Ygg::SimpleService::Email::RelayExtension) - if is_default? - record = MailAgent::Models::RateLimit::AuthenticatedIdentity.find_by_hel(object) - record.destroy! if record - record = MailAgent::Models::RateLimit::ClientAddress.find_by_hel(object) - record.destroy! if record - false - else - rec1 = MailAgent::Models::RateLimit::AuthenticatedIdentity.create_or_update_with_hel!(object, self) - rec2 = MailAgent::Models::RateLimit::ClientAddress.create_or_update_with_hel!(object, self) - rec1 || rec2 - end - end - end - end - end -end \ No newline at end of file
View file
mail_agent-1.0.0.tar.gz/lib/mail_agent/models/rate_limit/tracker.rb
Deleted
@@ -1,11 +0,0 @@ - -module MailAgent - module Models - module RateLimit - class Tracker < RateLimit::Base - has_one :client_address - has_one :authenticated_identity - end - end - end -end \ No newline at end of file
View file
mail_agent-1.0.0.tar.gz/lib/mail_agent/ygg
Deleted
-(directory)
View file
mail_agent-1.0.0.tar.gz/lib/mail_agent/ygg/simple_service
Deleted
-(directory)
View file
mail_agent-1.0.0.tar.gz/lib/mail_agent/ygg/simple_service/email
Deleted
-(directory)
View file
mail_agent-1.0.0.tar.gz/lib/mail_agent/ygg/simple_service/email/domain
Deleted
-(directory)
View file
mail_agent-1.0.0.tar.gz/lib/mail_agent/ygg/simple_service/email/relay_extension.rb
Deleted
@@ -1,72 +0,0 @@ -module Ygg - module SimpleService - module Email - class RelayExtension < ActiveResource::Hel::Resource - self.load_remote_schema = true - self.timeout = 120 - - def create_or_update_db_box! - destroy_db_box! unless is_credential? - ::MailAgent::Models::Email::Box.create_or_update_with_hel!(self) if is_credential? - end - - def destroy_db_box! - record = ::MailAgent::Models::Email::Box.find_by_hel(self) - record.destroy! if record - end - - def create_or_update_db_extension! - #create_or_update_db_extension_rate_limit! - create_or_update_db_extension_cluebringer! - end - - def destroy_db_extension! - #destroy_db_extension_rate_limit! - destroy_db_extension_cluebringer! - end - - def is_address? - self.ip.present? && self.login.blank? - end - - def is_identity? - self.ip.blank? && self.login.present? - end - - def is_mailbox? - is_identity? && self.real_box == true - end - - def is_credential? - is_identity? && self.real_box != true - end - - protected - - - def create_or_update_db_extension_rate_limit! - policy = ::MailAgent::Models::RateLimit::Policy.find_by_hel(self) - if policy - policy.create_or_update_extension_with_hel!(self) - end - end - - def destroy_db_extension_rate_limit! - record = ::MailAgent::Models::RateLimit::AuthenticatedIdentity.find_by_hel(self) - record.destroy! if record - record = ::MailAgent::Models::RateLimit::ClientAddress.find_by_hel(self) - record.destroy! if record - end - - def create_or_update_db_extension_cluebringer! - ::MailAgent::Models::Cluebringer::PolicyGroupMember.create_or_update_with_hel!(self) - end - - def destroy_db_extension_cluebringer! - record = ::MailAgent::Models::Cluebringer::PolicyGroupMember.find_by_hel(self) - record.destroy! if record - end - end - end - end -end \ No newline at end of file
View file
mail_agent-1.0.0.tar.gz/lib/tomte
Deleted
-(directory)
View file
mail_agent-1.0.0.tar.gz/lib/tomte/agents
Deleted
-(directory)
View file
mail_agent-1.0.0.tar.gz/lib/tomte/agents/mail_agent.rb
Deleted
@@ -1,61 +0,0 @@ - -# Tomte, a framework for distributed agents. -# Copyright (c) 2010-2012, Lele Forzani, windmillmedia. All Rights Reserved. -# -# Author:: Lele Forzani <lele@windmill.it> -# License:: You can redistribute it and/or modify it under the terms of the LICENSE file. - -require 'mail_agent' - -module Tomte::Agent - class MailAgent < Tomte::Agent::Async - - DEFAULT_MAIL_AGENT_OPTIONS = { - } - - read_configuration 'mail_agent.yml', :path => :application, :queue => :before - read_configuration 'mail_agent.yml', :path => :system - read_configuration 'config/agent.yml', :path => :cwd - read_configuration 'mail_agent.yml', :path => :cwd - - caption "Mail Agent" - help_text "Whohoho!" - - base_configuration :mail, DEFAULT_MAIL_AGENT_OPTIONS - - has_worker :mail, :class => 'Tomte::Workers::MailWorkerPubsub', :file => 'tomte/workers/mail_worker_pubsub.rb' - - - private - - def init(options = {}) - log.debug '+ Init: setup ActiveRecord' - ActiveRecord::Base.logger = log - ::MailAgent::Models::Email::Base.establish_connection config:database:email - #::MailAgent::Models::RateLimit::Base.establish_connection config:database:rate_limit - ::MailAgent::Models::Amavis::Base.establish_connection config:database:amavis - ::MailAgent::Models::Cluebringer::Base.establish_connection config:database:cluebringer - - if config:raven && config:raven:dsn - require 'raven' - Raven.configure do | c | - c.dsn = config:raven:dsn - end - end - - log.debug '+ Init: setup ActiveResource::Hel' - #ActiveResource::Hel::Resource.site = config:hel:host - ActiveResource::Hel::Resource.configurations = { - hel: { - site: config:hel:host, - identity: config:hel:username, - secret: config:hel:password - } - } - ActiveResource::Hel::Resource.use_configuration :hel - ActiveResource::Hel::Resource.logger = log - end - - end -end -
View file
mail_agent-1.0.0.tar.gz/lib/tomte/workers
Deleted
-(directory)
View file
mail_agent-1.0.0.tar.gz/lib/tomte/workers/mail_worker_pubsub.rb
Deleted
@@ -1,82 +0,0 @@ -module Tomte::Workers - class MailWorkerPubsub < Tomte::Worker - - bus :service, :enveloper => Tomte::Protocol::Enveloper::Generic do |ep| - consumer = ep.consumer :queue => "ygg.email.events.#{Tomte.config:local:host}", :ack => false - consumer.connect! do |c| - c.declare_exchange('ygg.email.events', :topic, :auto_delete => true) do - c.bind('ygg.email.events') - c.consume { log.info "ready to receive messages on ygg.email.events" } - end - - consumer.prefetch 1 - c.consume { log.info "ready to receive messages" } - - log.debug '+ Sync database' - @sync.sync - @sync = nil - end - - consumer.on_delivery do |metadata, message| - log.debug "received message" - log.debug message.ai - ygg_obj = load_ygg_obj message - case ygg_obj - when Ygg::SimpleService::Email::Box - case message'events' - when 'U', 'UC', 'C' then - ygg_obj.create_or_update_db_box! - when 'D' then - ygg_obj.destroy_db_box! - end - when Ygg::SimpleService::Email::Domain - case message'events' - when 'U', 'UC', 'C' then - ygg_obj.create_or_update_db_domain! - when 'D' then - ygg_obj.destroy_db_domain! - end - when Ygg::SimpleService::Email::RelayExtension - case message'events' - when 'U', 'UC', 'C' then - ygg_obj.create_or_update_db_box! - ygg_obj.create_or_update_db_extension! - when 'D' then - ygg_obj.destroy_db_box! - ygg_obj.destroy_db_extension! - end - else - log.error "* Unhandled object type #{ygg_obj.class.name}" - end - rescue - ex = $! - if defined?(Raven) - Raven.extra_context(message: message, metadata: metadata.attributes) do - Raven.capture_exception(ex) - end - else - raise ex - end - end - end - - def init(options = {}) - log.debug '+ Fetch service data' - @sync = ::MailAgent::BulkSync.new - end - - protected - - def load_ygg_obj(data) - if data:model - klass = data:model.constantize - obj = klass.new(data:object) - end - obj - rescue - log.error '* ' + $!.to_s - log.error '* ' + $!.backtrace.join("\n* ") - nil - end - end -end \ No newline at end of file
View file
mail_agent-1.0.0.tar.gz/mail_agent
Deleted
-(directory)
View file
mail_agent-1.0.0.tar.gz/mail_agent.spec.in
Deleted
@@ -1,115 +0,0 @@ -Name: mail_agent -Version: 1.0.0 -Release: 0 -Summary: Mailserver Agent -License: Apache-2.0 -Group: Development/Languages/Ruby -URL: https://intercom.it -Source: %{name}-%{version}.tar.gz -BuildArch: noarch -BuildRequires: ruby-macros >= 5 -BuildRequires: systemd-rpm-macros -Requires: rubygem(ruby:2.5.0:tomte-agents:1.1) >= 1.1.0 -Requires: rubygem(ruby:2.5.0:activeresource-hel) -Requires: rubygem(ruby:2.5.0:sentry-raven) -Requires: rubygem(ruby:2.5.0:pry) -Requires: rubygem(ruby:2.5.0:kyotocabinet) -Requires: rubygem(ruby:2.5.0:mysql2) - -%description -Mail agent DB provisioning agent - -%prep - -%setup - -%build - -%install -%make_install -install -D -m 0644 support/mail_agent.service %{buildroot}%{_unitdir}/mail_agent.service -install -D -m 0644 support/mail_agent.tempfiles %{buildroot}%{_tmpfilesdir}/mail_agent.conf -ln -s /usr/sbin/service %{buildroot}%{_sbindir}/rcmail_agent - -%pre -%{_bindir}/getent group tomte >/dev/null || %{_sbindir}/groupadd -r tomte -%{_bindir}/getent passwd tomte >/dev/null || %{_sbindir}/useradd -r -d %{_localstatedir}/lib/tomte -s /bin/false -c "tomte agent" -g tomte tomte -%service_add_pre mail_agent.service -exit 0 - -%preun -%service_del_preun mail_agent.service -exit 0 - -%post -%tmpfiles_create %_tmpfilesdir/mail_agent.conf -%service_add_post mail_agent.service -exit 0 - -%postun -%service_del_postun mail_agent.service -exit 0 - -%files -%defattr(-, root, root) - -%dir %{_sysconfdir}/tomte - -%dir /usr/lib/mail_agent -%dir /usr/lib/mail_agent/bin -%dir /usr/lib/mail_agent/lib -%dir /usr/lib/mail_agent/lib/mail_agent -%dir /usr/lib/mail_agent/lib/mail_agent/models -%dir /usr/lib/mail_agent/lib/mail_agent/models/amavis -%dir /usr/lib/mail_agent/lib/mail_agent/models/email -%dir /usr/lib/mail_agent/lib/mail_agent/models/rate_limit -%dir /usr/lib/mail_agent/lib/mail_agent/models/cluebringer -%dir /usr/lib/mail_agent/lib/mail_agent/ygg -%dir /usr/lib/mail_agent/lib/mail_agent/ygg/simple_service -%dir /usr/lib/mail_agent/lib/mail_agent/ygg/simple_service/email -%dir /usr/lib/mail_agent/lib/mail_agent/ygg/simple_service/email/domain -%dir /usr/lib/mail_agent/lib/tomte -%dir /usr/lib/mail_agent/lib/tomte/agents -%dir /usr/lib/mail_agent/lib/tomte/workers - -%attr(0700, tomte, tomte) %dir %{_localstatedir}/lib/tomte - -%config(noreplace) %{_sysconfdir}/tomte/tomte.yml -%config(noreplace) %{_sysconfdir}/tomte/mail_agent.yml - -%{_unitdir}/mail_agent.service -%{_tmpfilesdir}/mail_agent.conf - -%{_sbindir}/rcmail_agent -%attr(0755, root, root) %{_sbindir}/mail_agent -%attr(0755, root, root) /usr/lib/mail_agent/bin/mail_agent - -/usr/lib/mail_agent/lib/mail_agent/models.rb -/usr/lib/mail_agent/lib/mail_agent/models/amavis.rb -/usr/lib/mail_agent/lib/mail_agent/models/amavis/user.rb -/usr/lib/mail_agent/lib/mail_agent/models/email.rb -/usr/lib/mail_agent/lib/mail_agent/models/email/domain.rb -/usr/lib/mail_agent/lib/mail_agent/models/email/forward.rb -/usr/lib/mail_agent/lib/mail_agent/models/email/box.rb -/usr/lib/mail_agent/lib/mail_agent/models/rate_limit.rb -/usr/lib/mail_agent/lib/mail_agent/models/rate_limit/authenticated_identity.rb -/usr/lib/mail_agent/lib/mail_agent/models/rate_limit/client_address.rb -/usr/lib/mail_agent/lib/mail_agent/models/rate_limit/policy.rb -/usr/lib/mail_agent/lib/mail_agent/models/rate_limit/tracker.rb -/usr/lib/mail_agent/lib/mail_agent/models/cluebringer/policy.rb -/usr/lib/mail_agent/lib/mail_agent/models/cluebringer/policy_group.rb -/usr/lib/mail_agent/lib/mail_agent/models/cluebringer/policy_group_member.rb -/usr/lib/mail_agent/lib/mail_agent/models/cluebringer/quotas_tracking.rb -/usr/lib/mail_agent/lib/mail_agent/models/cluebringer.rb -/usr/lib/mail_agent/lib/mail_agent/ygg.rb -/usr/lib/mail_agent/lib/mail_agent/ygg/simple_service/email/box.rb -/usr/lib/mail_agent/lib/mail_agent/ygg/simple_service/email/domain.rb -/usr/lib/mail_agent/lib/mail_agent/ygg/simple_service/email/domain/alias.rb -/usr/lib/mail_agent/lib/mail_agent/ygg/simple_service/email/relay_extension.rb -/usr/lib/mail_agent/lib/tomte/agents/mail_agent.rb -/usr/lib/mail_agent/lib/tomte/workers/mail_worker_pubsub.rb -/usr/lib/mail_agent/lib/mail_agent.rb - -%ghost /run/mail_agent - -%changelog
View file
mail_agent-1.0.0.tar.gz/support
Deleted
-(directory)
View file
mail_agent-1.1.0.gem/checksums.yaml.gz
Added
@@ -0,0 +1,7 @@ +--- +SHA256: + metadata.gz: 3051e1b9ec28d442be83018fff8b08073f2dd90b1f3ba97e3ee689b6853c80e1 + data.tar.gz: 68c91eac5553ea0c77170d53eb97b747d17a4062e9f839fb1c3e912bcff418fc +SHA512: + metadata.gz: 0ea9379ca510ab191d234472e3c2f3907f6c7edff3da571c738a671dab877b6983630aac435fa073462235cb3c420fe2d5b986fcaa48cb2346c4afa4d07bf09e + data.tar.gz: 8c5157f24995d6d857efb7362ca6b422ea88b60f9fd5f1d93d34adb6160f9e421137544afa2496a2ff15a465bf37aa53ade34bfe251700e8f21d9b05f3aac79d
View file
mail_agent-1.1.0.gem/data.tar.gz
Added
+(unknown type gemdata)
View file
mail_agent-1.1.0.gem/data/.gitignore
Added
@@ -0,0 +1,41 @@ +# Documentation +doc +.yardoc +.yardopts + +# Mac +**/.DS_Store + +# Eclipse +*/.project +.project + +# IntelliJ +.idea + +# Redcar +*/.redcar +.redcar + +# Rubinius +*.rbc + +# Backup +*~ +_*.rb + +# build packages +pkg + +config/*.yml + +.bundle +.ruby-gemset + +log/*.log + +vendor + +tmp + +*.gem \ No newline at end of file
View file
mail_agent-1.1.0.gem/data/Dockerfile
Added
@@ -0,0 +1,21 @@ +FROM opensuse/leap:15.4 +RUN zypper -n ar http://repos.obs.intercom.it/home:/rottame:/rubygems/15.4/ rubygems +RUN zypper -n --gpg-auto-import-keys ref +RUN zypper -n in ruby \ + vim iputils bind-utils \ + ruby2.5-rubygem-tomte-core \ + ruby2.5-rubygem-mysql2-0_4 \ + ruby2.5-rubygem-sentry-raven \ + ruby2.5-rubygem-activesupport-5.2 \ + ruby2.5-rubygem-tomte-protocol \ + ruby2.5-rubygem-ygg_provisioner \ + ruby2.5-rubygem-activeresource-hel + +RUN groupadd -g 1000 user +RUN useradd -u 1000 -g 1000 -d /home/user -m user + +RUN mkdir /var/lib/hel-agent/ +RUN mkdir /mail_agent +WORKDIR /mail_agent + +USER user \ No newline at end of file
View file
mail_agent-1.1.0.gem/data/Makefile
Added
@@ -0,0 +1,33 @@ +.PHONY: shell + +$(eval VERSION = $(shell grep VERSION lib/mail_agent/version.rb | sed -r 's/^.*"(.*?)".*/\1/g')) + +tmp: Makefile + mkdir -p tmp + mkdir -p tmp/home + touch tmp + +tmp/dev-image: tmp Dockerfile + docker build --no-cache -t mail_agent-dev -f Dockerfile . + touch tmp/dev-image + +shell: tmp/dev-image + docker run -ti --rm \ + --add-host=hel.dev.me:host-gateway \ + --add-host=host.docker.internal:host-gateway \ + -v ${PWD}/tmp/home:/home/user \ + -v ${PWD}:/mail_agent \ + mail_agent-dev \ + bash + +rpm-sources: + rm -f mail_agent-*.gem + mkdir -p rpm_sources + gem build mail_agent.gemspec + mv mail_agent-${VERSION}.gem rpm_sources/ + cp support/mail_agent.service rpm_sources/mail_agent.service + cp support/mail_agent.tempfiles rpm_sources/mail_agent.tempfiles + cp config/mail_agent.yml.sample rpm_sources/mail_agent.yml + cp config/tomte.yml.sample rpm_sources/tomte.yml + cp mail_agent.spec.in rpm_sources/rubygem-mail_agent.spec + sed -i s/VERSION/${VERSION}/g rpm_sources/rubygem-mail_agent.spec
View file
mail_agent-1.1.0.gem/data/bin/mail_agent
Added
@@ -0,0 +1,10 @@ +#!/usr/bin/ruby + +require 'rubygems' +require "tomte/agents" + +# +# just starts the agent now +# +Tomte::Agents::Framework.setup(:async => true, :application => 'mail_agent') +Tomte::Agent::MailAgent::new(:argv => ARGV).run! \ No newline at end of file
View file
mail_agent-1.1.0.gem/data/bin/mail_agent_shell
Changed
(renamed from bin/mail_agent_shell)
View file
mail_agent-1.1.0.gem/data/config/mail_agent.yml.sample
Added
@@ -0,0 +1,135 @@ +development: + core: + log_level: debug + debug: false + hel: + host: HEL_ADDRESS + username: HEL_USERNAME + password: HEL_PASSWORD + raven: + dsn: + database: + email: + adapter: mysql2 + encoding: utf8 + database: DATABASE + pool: 5 + host: DATABASE_ADDRESS + username: DATABASE_USERNAME + password: DATABASE_PASSWORD + #reconnect: false + #socket: /tmp/mysql.sock + rate_limit: + adapter: mysql2 + encoding: utf8 + database: DATABASE + pool: 5 + host: DATABASE_ADDRESS + username: DATABASE_USERNAME + password: DATABASE_PASSWORD + #reconnect: false + #socket: /tmp/mysql.sock + policyd: + adapter: mysql2 + encoding: utf8 + database: DATABASE + pool: 5 + host: DATABASE_ADDRESS + username: DATABASE_USERNAME + password: DATABASE_PASSWORD + #reconnect: false + #socket: /tmp/mysql.sock + amavis: + adapter: mysql2 + encoding: utf8 + database: DATABASE + pool: 5 + host: DATABASE_ADDRESS + username: DATABASE_USERNAME + password: DATABASE_PASSWORD + #reconnect: false + #socket: /tmp/mysql.sock + +production: + core: + log_level: info + debug: false + hel: + host: HEL_ADDRESS + username: HEL_USERNAME + password: HEL_PASSWORD + raven: + dsn: + database: + email: + adapter: mysql2 + encoding: utf8 + database: DATABASE + pool: 5 + host: DATABASE_ADDRESS + username: DATABASE_USERNAME + password: DATABASE_PASSWORD + #reconnect: false + #socket: /tmp/mysql.sock + rate_limit: + adapter: mysql2 + encoding: utf8 + database: DATABASE + pool: 5 + host: DATABASE_ADDRESS + username: DATABASE_USERNAME + password: DATABASE_PASSWORD + #reconnect: false + #socket: /tmp/mysql.sock + cluebringer: + adapter: mysql2 + encoding: utf8 + database: DATABASE + pool: 5 + host: DATABASE_ADDRESS + username: DATABASE_USERNAME + password: DATABASE_PASSWORD + #reconnect: false + #socket: /tmp/mysql.sock + amavis: + adapter: mysql2 + encoding: utf8 + database: DATABASE + pool: 5 + host: DATABASE_ADDRESS + username: DATABASE_USERNAME + password: DATABASE_PASSWORD + #reconnect: false + #socket: /tmp/mysql.sock + +test: + core: + log_level: debug + debug: false + hel: + host: HEL_ADDRESS + username: HEL_USERNAME + password: HEL_PASSWORD + raven: + dsn: + database: + email: + adapter: mysql2 + encoding: utf8 + database: mail + pool: 5 + host: DATABASE_ADDRESS + username: DATABASE_USERNAME + password: DATABASE_PASSWORD + #reconnect: false + #socket: /tmp/mysql.sock + rate_limit: + adapter: mysql2 + encoding: utf8 + database: smtp_out_ng + pool: 5 + host: DATABASE_ADDRESS + username: DATABASE_USERNAME + password: DATABASE_PASSWORD + #reconnect: false + #socket: /tmp/mysql.sock
View file
mail_agent-1.1.0.gem/data/config/tomte.yml.sample
Changed
(renamed from config/tomte.yml.sample)
View file
mail_agent-1.1.0.gem/data/lib/mail_agent.rb
Added
@@ -0,0 +1,100 @@ +$:.unshift File::dirname(__FILE__) +require 'mail_agent/models' +require 'mail_agent/ygg' +require 'mail_agent/version' +#require 'tomte/workers/mail_worker_pubsub' + +module MailAgent + class BulkSync + attr_accessor :domains, :boxes, :relext + def initialize + load_data + end + + def load_data + self.domains ||= Ygg::SimpleService::Email::Domain.view(:provisioning).all + self.boxes ||= Ygg::SimpleService::Email::Box.view(:provisioning).all + self.relext ||= Ygg::SimpleService::Email::RelayExtension.view(:provisioning).all + end + + def sync + load_data + sync_domains + sync_boxes + sync_policyd + rescue + ex = $! + if defined?(Raven) + Raven.capture_exception(ex) + end + raise ex + end + + + protected + + def sync_domains + Models::Email::Domain.transaction do + ygg_pks = + domains.each do | domain | + ygg_pks << domain.uuid if domain.create_or_update_db_domain! + end + + db_pks = Models::Email::Domain.all.map(&:uuid) + old = db_pks - ygg_pks + + if old.any? + old = Models::Email::Domain.where(uuid: old) + doms = old.map(&:domain).map{|d| "@#{d}"} + Models::Amavis::User.where(email: doms).map(&:destroy) + old.map(&:destroy!) + end + end + end + + def sync_boxes + Models::Email::Box.transaction do + ygg_pks = + boxes.each do | box | + ygg_pks << box.uuid if box.create_or_update_db_box! + end + + relext.each do | ext | + ygg_pks << ext.uuid if ext.create_or_update_db_box! + end + + db_pks = Models::Email::Box.all.map(&:uuid) + old = db_pks - ygg_pks + + if old.any? + old = Models::Email::Box.where(uuid: old) + fqdas = old.map(&:fqda) + Models::Amavis::User.where(email: fqdas).map(&:destroy) + old.map(&:destroy!) + end + end + end + + def sync_policyd + Models::Policyd::Policy.transaction do + + uuids = relext.inject({identities: , addresses: }) do | m, ext | + if ext.create_or_update_db_extension! + m:identities << "hel:#{ext.uuid}" if ext.is_identity? + m:addresses << "hel:#{ext.uuid}" if ext.is_address? + end + m + end + + uuids.each do | k, list | + if list.any? + case(k) + when :identities then Models::Policyd::AuthenticatedIdentity.where.not(notes: list).destroy_all + when :addresses then Models::Policyd::ClientAddress.where.not(notes: list).destroy_all + end + end + end + end + end + end +end \ No newline at end of file
View file
mail_agent-1.1.0.gem/data/lib/mail_agent/models.rb
Added
@@ -0,0 +1,10 @@ +require 'active_record' + +module MailAgent + module Models + autoload :Email, 'mail_agent/models/email' + autoload :Amavis, 'mail_agent/models/amavis' + autoload :Policyd, 'mail_agent/models/policyd' + autoload :Cluebringer, 'mail_agent/models/cluebringer' + end +end
View file
mail_agent-1.1.0.gem/data/lib/mail_agent/models/amavis.rb
Changed
(renamed from lib/mail_agent/models/amavis.rb)
View file
mail_agent-1.1.0.gem/data/lib/mail_agent/models/amavis/user.rb
Changed
(renamed from lib/mail_agent/models/amavis/user.rb)
View file
mail_agent-1.1.0.gem/data/lib/mail_agent/models/cluebringer.rb
Changed
(renamed from lib/mail_agent/models/cluebringer.rb)
View file
mail_agent-1.1.0.gem/data/lib/mail_agent/models/cluebringer/policy.rb
Changed
(renamed from lib/mail_agent/models/cluebringer/policy.rb)
View file
mail_agent-1.1.0.gem/data/lib/mail_agent/models/cluebringer/policy_group.rb
Changed
(renamed from lib/mail_agent/models/cluebringer/policy_group.rb)
View file
mail_agent-1.1.0.gem/data/lib/mail_agent/models/cluebringer/policy_group_member.rb
Added
@@ -0,0 +1,79 @@ + +module MailAgent + module Models + module Cluebringer + class PolicyGroupMember < MailAgent::Models::Cluebringer::Base + self.primary_key = 'ID' + self.table_name = 'policy_group_members' + + belongs_to :group, + class_name: 'MailAgent::Models::Cluebringer::PolicyGroup', + primary_key: 'ID', + foreign_key: 'PolicyGroupID' + + scope :managed, -> { where arel_table:Comment.matches('hel:%') } + + before_destroy :reset_quota_trackings + + def self.find_by_hel(object) + self.managed.where_uuid(object.uuid).first + end + + def self.where_uuid(uuid) + uuid = uuid.flatten + uuid = uuid.map{|u| u ? "hel:#{u}" : u} + self.where(Comment: uuid) + end + + def self.create_or_update_with_hel!(ext) + raise "#{ext.to_s} isn't a Ygg::SimpleService::Email::RelayExtension" unless ext.is_a?(Ygg::SimpleService::Email::RelayExtension) + pg = PolicyGroup.get(ext.rate_limit, ext.is_address?) + member = if ext.is_address? + ext.ip + elsif ext.is_identity? + "$#{ext.login}" + end + + pgm = self.find_or_initialize_by(Member: member) # maybe exists a manual entry + + unless pgm.persisted? && pgm.PolicyGroupID == pg.ID + key = if ext.is_address? + "SenderIP:#{ext.ip}/32" unless ext.ip =~ /\// + "SenderIP:#{ext.ip}" if ext.ip =~ /\// + else + "SASLUsername:#{ext.login}" + end + QuotasTracking.where(TrackKey: key).delete_all if key + end + + pgm.attributes = { + PolicyGroupID: pg.ID, + Member: member, + Disabled: !!(ext.on_hold || ext.domain_on_hold), + Comment: "hel:#{ext.uuid}" + } + + pgm.save! + pgm + end + + def uuid + self.Comment.gsub(/\Ahel:/, '') if self.Comment =~ /\Ahel:/ + end + + protected + + def reset_quota_trackings + member = self.Member.gsub(/\A\$/, '') + key = if member =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/ + "SenderIP:#{member}/32" unless member =~ /\// + "SenderIP:#{member}" if member =~ /\// + else + "SASLUsername:#{member}" + end + QuotasTracking.where(TrackKey: key).delete_all if key + end + end + end + end +end
View file
mail_agent-1.1.0.gem/data/lib/mail_agent/models/cluebringer/quotas_tracking.rb
Changed
(renamed from lib/mail_agent/models/cluebringer/quotas_tracking.rb)
View file
mail_agent-1.1.0.gem/data/lib/mail_agent/models/email.rb
Changed
(renamed from lib/mail_agent/models/email.rb)
View file
mail_agent-1.1.0.gem/data/lib/mail_agent/models/email/box.rb
Changed
(renamed from lib/mail_agent/models/email/box.rb)
View file
mail_agent-1.1.0.gem/data/lib/mail_agent/models/email/domain.rb
Changed
(renamed from lib/mail_agent/models/email/domain.rb)
View file
mail_agent-1.1.0.gem/data/lib/mail_agent/models/email/forward.rb
Changed
(renamed from lib/mail_agent/models/email/forward.rb)
View file
mail_agent-1.1.0.gem/data/lib/mail_agent/models/policyd.rb
Added
@@ -0,0 +1,16 @@ + +module MailAgent + module Models + module Policyd + class Base < ActiveRecord::Base + self.abstract_class = true + end + + autoload :AuthenticatedIdentity, 'mail_agent/models/policyd/authenticated_identity' + autoload :ClientAddress, 'mail_agent/models/policyd/client_address' + #autoload :NetworkAddress, 'mail_agent/models/policyd/network_address' + autoload :Policy, 'mail_agent/models/policyd/policy' + autoload :Tracker, 'mail_agent/models/policyd/tracker' + end + end +end \ No newline at end of file
View file
mail_agent-1.1.0.gem/data/lib/mail_agent/models/policyd/authenticated_identity.rb
Added
@@ -0,0 +1,52 @@ + +module MailAgent + module Models + module Policyd + class AuthenticatedIdentity < Policyd::Base + belongs_to :policy + belongs_to :tracker + + def self.create_or_update_with_hel!(object) + raise "#{object.to_s} isn't a Ygg::SimpleService::Email::RelayExtension" unless object.is_a?(Ygg::SimpleService::Email::RelayExtension) + record = find_by_hel(object) + record.destroy! if record && !object.is_identity? + return false unless object.is_identity? + + record ||= new + record.identity = object.login + record.notes = "hel:#{object.uuid}" + record.disabled = false + record.static = false + record.policy_id = Policyd::Policy.find_policy_id(object.rate_limit) + record.save! + record + end + + def self.find_by_hel(object) + raise "#{object.to_s} isn't a Ygg::SimpleService::Email::RelayExtension" unless object.is_a?(Ygg::SimpleService::Email::RelayExtension) + find_by(notes: "hel:#{object.uuid}") + end + + after_destroy do + self.tracker&.destroy! + end + + before_create do + self.tracker = Tracker.create unless tracker + end + + def disable!(reason) + self.disabled = true + self.disable_date = Time.now + self.disable_reason = reason + save_changes + end + + + def reset_tracker! + tracker.reset! + end + end + end + end +end \ No newline at end of file
View file
mail_agent-1.1.0.gem/data/lib/mail_agent/models/policyd/client_address.rb
Added
@@ -0,0 +1,52 @@ + +module MailAgent + module Models + module Policyd + class ClientAddress < Policyd::Base + belongs_to :policy + belongs_to :tracker + + def self.create_or_update_with_hel!(object) + raise "#{object.to_s} isn't a Ygg::SimpleService::Email::RelayExtension" unless object.is_a?(Ygg::SimpleService::Email::RelayExtension) + record = find_by_hel(object) + record.destroy! if record && !object.is_address? + return false unless object.is_address? + + record ||= new + record.address = object.ip + record.notes = "hel:#{object.uuid}" + record.disabled = false + record.static = false + record.policy_id = Policyd::Policy.find_policy_id(object.rate_limit) + record.save! + record + end + + def self.find_by_hel(object) + raise "#{object.to_s} isn't a Ygg::SimpleService::Email::RelayExtension" unless object.is_a?(Ygg::SimpleService::Email::RelayExtension) + find_by(notes: "hel:#{object.uuid}") + end + + after_destroy do + self.tracker&.destroy! + end + + before_create do + self.tracker = Tracker.create unless tracker + end + + def disable!(reason) + self.disabled = true + self.disable_date = Time.now + self.disable_reason = reason + save_changes + end + + + def reset_tracker! + tracker.reset! + end + end + end + end +end \ No newline at end of file
View file
mail_agent-1.1.0.gem/data/lib/mail_agent/models/policyd/policy.rb
Added
@@ -0,0 +1,56 @@ + +module MailAgent + module Models + module Policyd + class Policy < Policyd::Base + has_many :authenticated_identities + + has_many :client_addresses + + POLICIES = %w(default default_for_addresses default_for_identities 128 512 1k 4k 12k trusted) + OLD_POLICIES = { + 'usr_128_h' => '128', + 'usr_512_h' => '512', + 'usr_1k_h' => '1k', + 'usr_4k_h' => '4k', + 'usr_12k_h' => '12k', + } + + def self.find_policy_id(policy) + name = policy + name = OLD_POLICIESpolicy if OLD_POLICIES.keys.include?(policy) + name = nil unless POLICIES.include?(name) + Policyd::Policy.find_by(name: name)&.id + end + + def is_default? + name.strip =~ /\Adefault/ + end + + def not_default? + !is_default? + end + + def self.find_by_hel(object) + raise "#{object.to_s} isn't a Ygg::SimpleService::Email::RelayExtension" unless object.is_a?(Ygg::SimpleService::Email::RelayExtension) + policy = self.where(name: object.rate_limit).first + end + + def create_or_update_extension_with_hel!(object) + raise "#{object.to_s} isn't a Ygg::SimpleService::Email::RelayExtension" unless object.is_a?(Ygg::SimpleService::Email::RelayExtension) + if is_default? + record = MailAgent::Models::Policyd::AuthenticatedIdentity.find_by_hel(object) + record.destroy! if record + record = MailAgent::Models::Policyd::ClientAddress.find_by_hel(object) + record.destroy! if record + false + else + rec1 = MailAgent::Models::Policyd::AuthenticatedIdentity.create_or_update_with_hel!(object, self) + rec2 = MailAgent::Models::Policyd::ClientAddress.create_or_update_with_hel!(object, self) + rec1 || rec2 + end + end + end + end + end +end \ No newline at end of file
View file
mail_agent-1.1.0.gem/data/lib/mail_agent/models/policyd/tracker.rb
Added
@@ -0,0 +1,26 @@ + +module MailAgent + module Models + module Policyd + class Tracker < Policyd::Base + has_one :client_address + has_one :authenticated_identity + + serialize :heuristics + + before_create do + self.first_seen = Time.now + self.last_update = Time.now + end + + def reset! + self.count = 0 unless count.blank? + self.recipients = 0 unless recipients.blank? + self.volume = 0 unless volume.blank? + self.last_update = Time.now + save! + end + end + end + end +end \ No newline at end of file
View file
mail_agent-1.1.0.gem/data/lib/mail_agent/version.rb
Added
@@ -0,0 +1,3 @@ +module MailAgent + VERSION = "1.1.0" +end \ No newline at end of file
View file
mail_agent-1.1.0.gem/data/lib/mail_agent/ygg.rb
Changed
(renamed from lib/mail_agent/ygg.rb)
View file
mail_agent-1.1.0.gem/data/lib/mail_agent/ygg/simple_service/email/box.rb
Changed
(renamed from lib/mail_agent/ygg/simple_service/email/box.rb)
View file
mail_agent-1.1.0.gem/data/lib/mail_agent/ygg/simple_service/email/domain.rb
Changed
(renamed from lib/mail_agent/ygg/simple_service/email/domain.rb)
View file
mail_agent-1.1.0.gem/data/lib/mail_agent/ygg/simple_service/email/domain/alias.rb
Changed
(renamed from lib/mail_agent/ygg/simple_service/email/domain/alias.rb)
View file
mail_agent-1.1.0.gem/data/lib/mail_agent/ygg/simple_service/email/relay_extension.rb
Added
@@ -0,0 +1,72 @@ +module Ygg + module SimpleService + module Email + class RelayExtension < ActiveResource::Hel::Resource + self.load_remote_schema = true + self.timeout = 120 + + def create_or_update_db_box! + destroy_db_box! unless is_credential? + ::MailAgent::Models::Email::Box.create_or_update_with_hel!(self) if is_credential? + end + + def destroy_db_box! + record = ::MailAgent::Models::Email::Box.find_by_hel(self) + record.destroy! if record + end + + def create_or_update_db_extension! + create_or_update_db_extension_policyd! + create_or_update_db_extension_cluebringer! + end + + def destroy_db_extension! + destroy_db_extension_policyd! + destroy_db_extension_cluebringer! + end + + def is_address? + self.ip.present? && self.login.blank? + end + + def is_identity? + self.ip.blank? && self.login.present? + end + + def is_mailbox? + is_identity? && self.real_box == true + end + + def is_credential? + is_identity? && self.real_box != true + end + + protected + + def create_or_update_db_extension_policyd! + if is_address? + ::MailAgent::Models::Policyd::ClientAddress.create_or_update_with_hel!(self) + else is_identity? + ::MailAgent::Models::Policyd::AuthenticatedIdentity.create_or_update_with_hel!(self) + end + end + + def destroy_db_extension_policyd! + record = ::MailAgent::Models::Policyd::AuthenticatedIdentity.find_by_hel(self) + record.destroy! if record + record = ::MailAgent::Models::Policyd::ClientAddress.find_by_hel(self) + record.destroy! if record + end + + def create_or_update_db_extension_cluebringer! + ::MailAgent::Models::Cluebringer::PolicyGroupMember.create_or_update_with_hel!(self) + end + + def destroy_db_extension_cluebringer! + record = ::MailAgent::Models::Cluebringer::PolicyGroupMember.find_by_hel(self) + record.destroy! if record + end + end + end + end +end \ No newline at end of file
View file
mail_agent-1.1.0.gem/data/lib/tomte/agents/mail_agent.rb
Added
@@ -0,0 +1,61 @@ + +# Tomte, a framework for distributed agents. +# Copyright (c) 2010-2012, Lele Forzani, windmillmedia. All Rights Reserved. +# +# Author:: Lele Forzani <lele@windmill.it> +# License:: You can redistribute it and/or modify it under the terms of the LICENSE file. + +require 'mail_agent' + +module Tomte::Agent + class MailAgent < Tomte::Agent::Async + + DEFAULT_MAIL_AGENT_OPTIONS = { + } + + read_configuration 'mail_agent.yml', :path => :application, :queue => :before + read_configuration 'mail_agent.yml', :path => :system + read_configuration 'config/agent.yml', :path => :cwd + read_configuration 'mail_agent.yml', :path => :cwd + + caption "Mail Agent" + help_text "Whohoho!" + + base_configuration :mail, DEFAULT_MAIL_AGENT_OPTIONS + + has_worker :mail, :class => 'Tomte::Workers::MailWorkerPubsub', :file => 'tomte/workers/mail_worker_pubsub.rb' + + + private + + def init(options = {}) + log.debug '+ Init: setup ActiveRecord' + ActiveRecord::Base.logger = log + ::MailAgent::Models::Email::Base.establish_connection config:database:email + ::MailAgent::Models::Amavis::Base.establish_connection config:database:amavis + ::MailAgent::Models::Policyd::Base.establish_connection config:database:policyd + ::MailAgent::Models::Cluebringer::Base.establish_connection config:database:cluebringer + + if config:raven && config:raven:dsn + require 'raven' + Raven.configure do | c | + c.dsn = config:raven:dsn + end + end + + log.debug '+ Init: setup ActiveResource::Hel' + ActiveResource::Hel::Resource.configurations = { + hel: { + site: config:hel:host, + identity: config:hel:username, + secret: config:hel:password + } + } + ActiveResource::Hel::Resource.ssl_options = {verify_mode: OpenSSL::SSL::VERIFY_NONE} + ActiveResource::Hel::Resource.use_configuration :hel + ActiveResource::Hel::Resource.logger = log + end + + end +end +
View file
mail_agent-1.1.0.gem/data/lib/tomte/workers/mail_worker_pubsub.rb
Added
@@ -0,0 +1,81 @@ +module Tomte::Workers + class MailWorkerPubsub < Tomte::Worker + + bus :service, :enveloper => Tomte::Protocol::Enveloper::Generic do |ep| + consumer = ep.consumer :queue => "ygg.email.events.#{Tomte.config:local:host}", :ack => false + consumer.connect! do |c| + c.declare_exchange('ygg.email.events', :topic, :auto_delete => true) do + c.bind('ygg.email.events') + c.consume { log.info "ready to receive messages on ygg.email.events" } + end + + consumer.prefetch 1 + + log.debug '+ Sync database' + @sync.sync + @sync = nil + end + + consumer.on_delivery do |metadata, message| + log.debug "received message" + log.debug message.ai + ygg_obj = load_ygg_obj message + case ygg_obj + when Ygg::SimpleService::Email::Box + case message'events' + when /U/, /C/ then + ygg_obj.create_or_update_db_box! + when /D/ then + ygg_obj.destroy_db_box! + end + when Ygg::SimpleService::Email::Domain + case message'events' + when /U/, /C/ then + ygg_obj.create_or_update_db_domain! + when /D/ then + ygg_obj.destroy_db_domain! + end + when Ygg::SimpleService::Email::RelayExtension + case message'events' + when /U/, /C/ then + ygg_obj.create_or_update_db_box! + ygg_obj.create_or_update_db_extension! + when /D/ then + ygg_obj.destroy_db_box! + ygg_obj.destroy_db_extension! + end + else + log.error "* Unhandled object type #{ygg_obj.class.name}" + end + rescue + ex = $! + if defined?(Raven) + Raven.extra_context(message: message, metadata: metadata.attributes) do + Raven.capture_exception(ex) + end + else + raise ex + end + end + end + + def init(options = {}) + log.debug '+ Fetch service data' + @sync = ::MailAgent::BulkSync.new + end + + protected + + def load_ygg_obj(data) + if data:model + klass = data:model.constantize + obj = klass.new(data:object) + end + obj + rescue + log.error '* ' + $!.to_s + log.error '* ' + $!.backtrace.join("\n* ") + nil + end + end +end \ No newline at end of file
View file
mail_agent-1.1.0.gem/data/mail_agent.gemspec
Added
@@ -0,0 +1,37 @@ +# coding: utf-8 +lib = File.expand_path('../lib', __FILE__) +$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) +require 'mail_agent/version' + +Gem::Specification.new do |spec| + spec.name = "mail_agent" + spec.version = MailAgent::VERSION + spec.authors = "Angelo Grossini" + spec.email = "angelo@intercom.it" + spec.description = %q{Intercom mail provisioning agent} + spec.summary = %q{Mail agent} + spec.homepage = "https://intercom.it" + spec.license = "MIT" + + spec.files = `git ls-files`.split($/) + spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } + spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) + spec.require_paths = "lib" + + + spec.add_dependency "tomte-agents", '~> 1.1.1' + spec.add_dependency "tomte-core", '~> 1.2.1' + spec.add_dependency "tomte-protocol", '~> 1.2.0' + spec.add_dependency "mysql2", '~> 0.4' + spec.add_dependency "activesupport", '~> 5.2.0' + spec.add_dependency "ygg_provisioner", '~> 1.4.1' + spec.add_dependency "activeresource-hel", '~> 0.5.0' + spec.add_dependency "sentry-raven", '~> 0' + + #spec.add_development_dependency "sqlite3" + #spec.add_development_dependency "bundler", "~> 1.3" + #spec.add_development_dependency "rake" + #spec.add_development_dependency "pry" + #spec.add_development_dependency "rspec" + #spec.add_development_dependency "timecop" +end
View file
mail_agent-1.1.0.gem/data/mail_agent.spec.in
Added
@@ -0,0 +1,84 @@ +%define mod_name mail_agent +%define mod_full_name %{mod_name}-%{version} + +Name: rubygem-mail_agent +Version: VERSION +Release: 0 +Summary: Mailserver Agent +License: Apache-2.0 +Group: Development/Languages/Ruby +URL: https://intercom.it +Source: %{mod_full_name}.gem +Source1: mail_agent.service +Source2: mail_agent.tempfiles +Source3: mail_agent.yml +Source4: tomte.yml +BuildRequires: %{ruby >= 1.9} +BuildRequires: %{rubygem gem2rpm} +BuildRequires: ruby-macros >= 5 + +%description +Mail agent DB provisioning agent + +%package -n mail_agent +Summary: Mailserver Agent +Group: System/Daemons +Requires: rubygem(%{mod_name}) = %{version} + +%description -n mail_agent +Mail agent DB provisioning agent + +%prep + +%build + +%install +%gem_install \ + --symlink-binaries \ + -f + +install -d %{buildroot}%{_sbindir} +install -d %{buildroot}%{_sysconfdir}/tomte +install -d %{buildroot}%{_localstatedir}/lib/tomte + +install -D -m 0644 %{SOURCE1} %{buildroot}%{_unitdir}/mail_agent.service +install -D -m 0644 %{SOURCE2} %{buildroot}%{_tmpfilesdir}/mail_agent.conf +ln -s /usr/sbin/service %{buildroot}%{_sbindir}/rcmail_agent +install -D -m 0644 %{SOURCE3} %{buildroot}%{_sysconfdir}/tomte/mail_agent.yml +install -D -m 0644 %{SOURCE4} %{buildroot}%{_sysconfdir}/tomte/tomte.yml + +%gem_packages + +%files -n mail_agent +%dir %{_sysconfdir}/tomte +%attr(0700, tomte, tomte) %dir %{_localstatedir}/lib/tomte + +%config(noreplace) %{_sysconfdir}/tomte/mail_agent.yml +%config(noreplace) %{_sysconfdir}/tomte/tomte.yml + +%{_unitdir}/mail_agent.service +%{_tmpfilesdir}/mail_agent.conf + +%{_sbindir}/rcmail_agent +%ghost /run/mail_agent + +%pre -n mail_agent +%{_bindir}/getent group tomte >/dev/null || %{_sbindir}/groupadd -r tomte +%{_bindir}/getent passwd tomte >/dev/null || %{_sbindir}/useradd -r -d %{_localstatedir}/lib/tomte -s /bin/false -c "intercom mail policyd" -g tomte tomte +%service_add_pre mail_agent.service +exit 0 + +%preun -n mail_agent +%service_del_preun mail_agent.service +exit 0 + +%post -n mail_agent +%tmpfiles_create %_tmpfilesdir/mailserver_agent.conf +%service_add_post mail_agent.service +exit 0 + +%postun -n mail_agent +%service_del_postun mail_agent.service +exit 0 + +%changelog
View file
mail_agent-1.1.0.gem/data/schema.sql
Changed
(renamed from schema.sql)
View file
mail_agent-1.1.0.gem/data/support/mail_agent.service
Changed
(renamed from support/mail_agent.service)
View file
mail_agent-1.1.0.gem/data/support/mail_agent.tempfiles
Changed
(renamed from support/mail_agent.tempfiles)
View file
mail_agent-1.1.0.gem/data/test.rb
Changed
(renamed from test.rb)
View file
mail_agent-1.1.0.gem/metadata.gz
Added
@@ -0,0 +1,196 @@ +--- !ruby/object:Gem::Specification +name: mail_agent +version: !ruby/object:Gem::Version + version: 1.1.0 +platform: ruby +authors: +- Angelo Grossini +autorequire: +bindir: bin +cert_chain: +date: 2022-11-18 00:00:00.000000000 Z +dependencies: +- !ruby/object:Gem::Dependency + name: tomte-agents + requirement: !ruby/object:Gem::Requirement + requirements: + - - "~>" + - !ruby/object:Gem::Version + version: 1.1.1 + type: :runtime + prerelease: false + version_requirements: !ruby/object:Gem::Requirement + requirements: + - - "~>" + - !ruby/object:Gem::Version + version: 1.1.1 +- !ruby/object:Gem::Dependency + name: tomte-core + requirement: !ruby/object:Gem::Requirement + requirements: + - - "~>" + - !ruby/object:Gem::Version + version: 1.2.1 + type: :runtime + prerelease: false + version_requirements: !ruby/object:Gem::Requirement + requirements: + - - "~>" + - !ruby/object:Gem::Version + version: 1.2.1 +- !ruby/object:Gem::Dependency + name: tomte-protocol + requirement: !ruby/object:Gem::Requirement + requirements: + - - "~>" + - !ruby/object:Gem::Version + version: 1.2.0 + type: :runtime + prerelease: false + version_requirements: !ruby/object:Gem::Requirement + requirements: + - - "~>" + - !ruby/object:Gem::Version + version: 1.2.0 +- !ruby/object:Gem::Dependency + name: mysql2 + requirement: !ruby/object:Gem::Requirement + requirements: + - - "~>" + - !ruby/object:Gem::Version + version: '0.4' + type: :runtime + prerelease: false + version_requirements: !ruby/object:Gem::Requirement + requirements: + - - "~>" + - !ruby/object:Gem::Version + version: '0.4' +- !ruby/object:Gem::Dependency + name: activesupport + requirement: !ruby/object:Gem::Requirement + requirements: + - - "~>" + - !ruby/object:Gem::Version + version: 5.2.0 + type: :runtime + prerelease: false + version_requirements: !ruby/object:Gem::Requirement + requirements: + - - "~>" + - !ruby/object:Gem::Version + version: 5.2.0 +- !ruby/object:Gem::Dependency + name: ygg_provisioner + requirement: !ruby/object:Gem::Requirement + requirements: + - - "~>" + - !ruby/object:Gem::Version + version: 1.4.1 + type: :runtime + prerelease: false + version_requirements: !ruby/object:Gem::Requirement + requirements: + - - "~>" + - !ruby/object:Gem::Version + version: 1.4.1 +- !ruby/object:Gem::Dependency + name: activeresource-hel + requirement: !ruby/object:Gem::Requirement + requirements: + - - "~>" + - !ruby/object:Gem::Version + version: 0.5.0 + type: :runtime + prerelease: false + version_requirements: !ruby/object:Gem::Requirement + requirements: + - - "~>" + - !ruby/object:Gem::Version + version: 0.5.0 +- !ruby/object:Gem::Dependency + name: sentry-raven + requirement: !ruby/object:Gem::Requirement + requirements: + - - "~>" + - !ruby/object:Gem::Version + version: '0' + type: :runtime + prerelease: false + version_requirements: !ruby/object:Gem::Requirement + requirements: + - - "~>" + - !ruby/object:Gem::Version + version: '0' +description: Intercom mail provisioning agent +email: +- angelo@intercom.it +executables: +- mail_agent +- mail_agent_shell +extensions: +extra_rdoc_files: +files: +- ".gitignore" +- Dockerfile +- Makefile +- bin/mail_agent +- bin/mail_agent_shell +- config/mail_agent.yml.sample +- config/tomte.yml.sample +- lib/mail_agent.rb +- lib/mail_agent/models.rb +- lib/mail_agent/models/amavis.rb +- lib/mail_agent/models/amavis/user.rb +- lib/mail_agent/models/cluebringer.rb +- lib/mail_agent/models/cluebringer/policy.rb +- lib/mail_agent/models/cluebringer/policy_group.rb +- lib/mail_agent/models/cluebringer/policy_group_member.rb +- lib/mail_agent/models/cluebringer/quotas_tracking.rb +- lib/mail_agent/models/email.rb +- lib/mail_agent/models/email/box.rb +- lib/mail_agent/models/email/domain.rb +- lib/mail_agent/models/email/forward.rb +- lib/mail_agent/models/policyd.rb +- lib/mail_agent/models/policyd/authenticated_identity.rb +- lib/mail_agent/models/policyd/client_address.rb +- lib/mail_agent/models/policyd/policy.rb +- lib/mail_agent/models/policyd/tracker.rb +- lib/mail_agent/version.rb +- lib/mail_agent/ygg.rb +- lib/mail_agent/ygg/simple_service/email/box.rb +- lib/mail_agent/ygg/simple_service/email/domain.rb +- lib/mail_agent/ygg/simple_service/email/domain/alias.rb +- lib/mail_agent/ygg/simple_service/email/relay_extension.rb +- lib/tomte/agents/mail_agent.rb +- lib/tomte/workers/mail_worker_pubsub.rb +- mail_agent.gemspec +- mail_agent.spec.in +- schema.sql +- support/mail_agent.service +- support/mail_agent.tempfiles +- test.rb +homepage: https://intercom.it +licenses: +- MIT +metadata: {} +post_install_message: +rdoc_options: +require_paths: +- lib +required_ruby_version: !ruby/object:Gem::Requirement + requirements: + - - ">=" + - !ruby/object:Gem::Version + version: '0' +required_rubygems_version: !ruby/object:Gem::Requirement + requirements: + - - ">=" + - !ruby/object:Gem::Version + version: '0' +requirements: +rubygems_version: 3.3.5 +signing_key: +specification_version: 4 +summary: Mail agent +test_files:
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.