Sha256: 0d355a233d6a9f2e7cd4fc8bfd08aaff13eb5ca9057a601c95487bc38ac4d133

Contents?: true

Size: 1.77 KB

Versions: 5

Compression:

Stored size: 1.77 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

      if user.confirmation_required?
        user.resend_confirmation_instructions
      else
        invite = find_org_invite(@organization, user)
        return render json: {error: 'No active invitation found'}, status: :not_found unless invite
        send_org_invite(invite)
      end

      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

    # Invite for unconfirmed users are automatically accepted
    def find_org_invite(organization, user)
      if user.confirmed?
        status_scope = { 'status.in' => %w(staged pending) }
      else
        status_scope = { status: 'accepted' }
      end
      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(invite)
      user = invite.user
      # 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
      return unless invite.status == 'staged'
      invite.status = 'pending'
      invite.save
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
mno-enterprise-api-3.3.2 app/controllers/mno_enterprise/jpi/v1/admin/invites_controller.rb
mno-enterprise-api-3.2.1 app/controllers/mno_enterprise/jpi/v1/admin/invites_controller.rb
mno-enterprise-api-3.3.1 app/controllers/mno_enterprise/jpi/v1/admin/invites_controller.rb
mno-enterprise-api-3.3.0 app/controllers/mno_enterprise/jpi/v1/admin/invites_controller.rb
mno-enterprise-api-3.2.0 app/controllers/mno_enterprise/jpi/v1/admin/invites_controller.rb