trabajo-afectivo/app/controllers/channels_microsoft365_controller.rb
2022-01-01 14:38:12 +01:00

102 lines
3.1 KiB
Ruby

# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
class ChannelsMicrosoft365Controller < ApplicationController
prepend_before_action -> { authentication_check && authorize! }
def index
system_online_service = Setting.get('system_online_service')
assets = {}
external_credential_ids = []
ExternalCredential.where(name: 'microsoft365').each do |external_credential|
assets = external_credential.assets(assets)
external_credential_ids.push external_credential.id
end
channel_ids = []
Channel.where(area: 'Microsoft365::Account').order(:id).each do |channel|
assets = channel.assets(assets)
channel_ids.push channel.id
end
not_used_email_address_ids = []
EmailAddress.find_each do |email_address|
next if system_online_service && email_address.preferences && email_address.preferences['online_service_disable']
assets = email_address.assets(assets)
if !email_address.channel_id || !email_address.active || !Channel.exists?(email_address.channel_id)
not_used_email_address_ids.push email_address.id
end
end
render json: {
assets: assets,
not_used_email_address_ids: not_used_email_address_ids,
channel_ids: channel_ids,
external_credential_ids: external_credential_ids,
callback_url: ExternalCredential.callback_url('microsoft365'),
}
end
def enable
channel = Channel.find_by(id: params[:id], area: 'Microsoft365::Account')
channel.active = true
channel.save!
render json: {}
end
def disable
channel = Channel.find_by(id: params[:id], area: 'Microsoft365::Account')
channel.active = false
channel.save!
render json: {}
end
def destroy
channel = Channel.find_by(id: params[:id], area: 'Microsoft365::Account')
email = EmailAddress.find_by(channel_id: channel.id)
email&.destroy!
channel.destroy!
render json: {}
end
def group
channel = Channel.find_by(id: params[:id], area: 'Microsoft365::Account')
channel.group_id = params[:group_id]
channel.save!
render json: {}
end
def inbound
channel = Channel.find_by(id: params[:id], area: 'Microsoft365::Account')
%w[folder keep_on_server].each do |key|
channel.options[:inbound][:options][key] = params[:options][key]
end
channel.refresh_xoauth2!(force: true)
result = EmailHelper::Probe.inbound(channel.options[:inbound])
raise Exceptions::UnprocessableEntity, (result[:message_human] || result[:message]) if result[:result] == 'invalid'
channel.status_in = 'ok'
channel.status_out = 'ok'
channel.last_log_in = nil
channel.last_log_out = nil
if params.key?(:active)
channel.active = params[:active]
end
channel.save!
render json: {}
end
def rollback_migration
channel = Channel.find_by(id: params[:id], area: 'Microsoft365::Account')
raise __('Failed to find backup on channel!') if !channel.options[:backup_imap_classic]
channel.update!(channel.options[:backup_imap_classic][:attributes])
render json: {}
end
end