# Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/ class SMIMESupport < ActiveRecord::Migration[5.2] def up # return if it's a new setup return if !Setting.exists?(name: 'system_init_done') Setting.create_if_not_exists( title: 'S/MIME integration', name: 'smime_integration', area: 'Integration::Switch', description: 'Defines if S/MIME encryption is enabled or not.', options: { form: [ { display: '', null: true, name: 'smime_integration', tag: 'boolean', options: { true => 'yes', false => 'no', }, }, ], }, state: false, preferences: { prio: 1, authentication: true, permission: ['admin.integration'], }, frontend: true ) Setting.create_if_not_exists( title: 'S/MIME config', name: 'smime_config', area: 'Integration::SMIME', description: 'Defines the S/MIME config.', options: {}, state: {}, preferences: { prio: 2, permission: ['admin.integration'], }, frontend: true, ) Setting.create_if_not_exists( title: 'Defines postmaster filter.', name: '0016_postmaster_filter_smime', area: 'Postmaster::PreFilter', description: 'Defines postmaster filter to handle secure mailing.', options: {}, state: 'Channel::Filter::SecureMailing', frontend: false ) create_table :smime_certificates do |t| t.string :subject, limit: 500, null: false t.string :doc_hash, limit: 250, null: false t.string :fingerprint, limit: 250, null: false t.string :modulus, limit: 1024, null: false t.datetime :not_before_at, null: true # rubocop:disable Zammad/ExistsDateTimePrecision t.datetime :not_after_at, null: true # rubocop:disable Zammad/ExistsDateTimePrecision t.binary :raw, limit: 10.megabytes, null: false t.binary :private_key, limit: 10.megabytes, null: true t.string :private_key_secret, limit: 500, null: true t.timestamps limit: 3, null: false end add_index :smime_certificates, [:fingerprint], unique: true add_index :smime_certificates, [:modulus] add_index :smime_certificates, [:subject] end end