Sha256: a3e7da989680eb937147973358ffd7e743ea8f6e65eaa834f3abb23edb90d78a

Contents?: true

Size: 1.58 KB

Versions: 2

Compression:

Stored size: 1.58 KB

Contents

module MnoEnterprise::Jpi::V1::Admin
  # Manage invitation sending
  class InvitesController < BaseResourceController
    def create
      @organization = MnoEnterprise::Organization.find(params[:organization_id])
      user = MnoEnterprise::User.find(params[:user_id])
      return render json: {error: 'Could not find account or user'}, status: :not_found unless @organization && user

      invite = find_org_invite(@organization, user)
      return render json: {error: 'No active invitation found'}, status: :not_found unless invite
      send_org_invite(user, invite)

      MnoEnterprise::EventLogger.info('user_invite', current_user.id, 'User invited', user, {user_email: user.email, account_name: @organization.name})

      @user = user.confirmed? ? invite : user.reload

      render 'mno_enterprise/jpi/v1/admin/organizations/invite_member'
    end

    private

    def find_org_invite(organization, user)
      status_scope = { 'status.in' => %w(staged pending accepted) }
      organization.org_invites.where(status_scope.merge(user_id: user.id)).first
    end

    # Send the org invite and update the status
    def send_org_invite(user, invite)
      # Generate token if not generated
      user.send(:generate_confirmation_token!) if !user.confirmed? && user.confirmation_token.blank?

      MnoEnterprise::SystemNotificationMailer.organization_invite(invite).deliver_later

      # Update staged invite status
      invite.status = 'pending' if invite.status == 'staged'
      invite.notification_sent_at = Time.now unless invite.notification_sent_at.present?
      invite.save
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mno-enterprise-api-3.4.0 app/controllers/mno_enterprise/jpi/v1/admin/invites_controller.rb
mno-enterprise-api-3.3.3 app/controllers/mno_enterprise/jpi/v1/admin/invites_controller.rb