Class: Organizations::PublicInvitationsController

Inherits:
PublicController show all
Includes:
ControllerHelpers
Defined in:
app/controllers/organizations/public_invitations_controller.rb

Overview

Controller for public invitation routes (show and accept). Inherits from PublicController to avoid host app authentication filters.

Routes:

GET  /invitations/:token        → View invitation details
POST /invitations/:token/accept → Accept the invitation

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ControllerHelpers

#accept_pending_organization_invitation!, #clear_pending_organization_invitation!, #create_organization_and_switch!, #current_membership, #current_organization, #current_organization=, #handle_pending_invitation_acceptance_for, #no_organization_redirect_path, #organization_signed_in?, #pending_invitation_acceptance_redirect_path_for, #pending_organization_invitation, #pending_organization_invitation?, #pending_organization_invitation_email, #pending_organization_invitation_token, #redirect_path_after_invitation_accepted, #redirect_path_after_organization_switched, #redirect_path_when_invitation_requires_authentication, #redirect_path_when_no_organization, #redirect_to_no_organization!, #require_organization!, #require_organization_admin!, #require_organization_owner!, #require_organization_permission_to!, #require_organization_role!, #switch_to_organization!

Class Method Details

.controller_pathObject

Use the same view path as InvitationsController so host apps don't need to duplicate views for public routes



18
19
20
# File 'app/controllers/organizations/public_invitations_controller.rb', line 18

def self.controller_path
  "organizations/invitations"
end

Instance Method Details

#acceptObject

POST /invitations/:token/accept Accept an invitation (public route)



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'app/controllers/organizations/public_invitations_controller.rb', line 37

def accept
  return respond_invitation_authentication_required unless current_user

  result = accept_pending_organization_invitation!(
    current_user,
    token: @invitation.token,
    switch: true,
    skip_email_validation: false,
    return_failure: true
  )

  return respond_invitation_acceptance_failure(result) if result.failure?

  respond_invitation_acceptance_success(result)
end

#showObject

GET /invitations/:token View invitation details (public route)



24
25
26
27
28
29
30
31
32
33
# File 'app/controllers/organizations/public_invitations_controller.rb', line 24

def show
  @user_exists = user_exists_for_invitation?
  @user_is_logged_in = current_user.present?
  @user_email_matches = @user_is_logged_in && current_user.email.downcase == @invitation.email.downcase

  respond_to do |format|
    format.html
    format.json { render json: invitation_show_json }
  end
end