mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-31 11:08:04 +00:00 
			
		
		
		
	 8697a30dc5
			
		
	
	8697a30dc5
	
	
	
		
			
			- Add Platform API for generating user tokens - Add the swagger documentation. --------- Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com> Co-authored-by: Pranav <pranav@chatwoot.com>
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| class Platform::Api::V1::UsersController < PlatformController
 | |
|   # ref: https://stackoverflow.com/a/45190318/939299
 | |
|   # set resource is called for other actions already in platform controller
 | |
|   # we want to add login and token to that chain as well
 | |
|   before_action(only: [:login, :token]) { set_resource }
 | |
|   before_action(only: [:login, :token]) { validate_platform_app_permissible }
 | |
| 
 | |
|   def show; end
 | |
| 
 | |
|   def create
 | |
|     @resource = (User.from_email(user_params[:email]) || User.new(user_params))
 | |
|     @resource.skip_confirmation!
 | |
|     @resource.save!
 | |
|     @platform_app.platform_app_permissibles.find_or_create_by!(permissible: @resource)
 | |
|   end
 | |
| 
 | |
|   def login
 | |
|     render json: { url: @resource.generate_sso_link }
 | |
|   end
 | |
| 
 | |
|   def token; end
 | |
| 
 | |
|   def update
 | |
|     @resource.assign_attributes(user_update_params)
 | |
| 
 | |
|     # We are using devise's reconfirmable flow for changing emails
 | |
|     # But in case of platform APIs we don't want user to go through this extra step
 | |
|     @resource.skip_reconfirmation! if user_update_params[:email].present?
 | |
|     @resource.save!
 | |
|   end
 | |
| 
 | |
|   def destroy
 | |
|     DeleteObjectJob.perform_later(@resource)
 | |
|     head :ok
 | |
|   end
 | |
| 
 | |
|   private
 | |
| 
 | |
|   def user_custom_attributes
 | |
|     return @resource.custom_attributes.merge(user_params[:custom_attributes]) if user_params[:custom_attributes]
 | |
| 
 | |
|     @resource.custom_attributes
 | |
|   end
 | |
| 
 | |
|   def user_update_params
 | |
|     # we want the merged custom attributes not the original one
 | |
|     user_params.except(:custom_attributes).merge({ custom_attributes: user_custom_attributes })
 | |
|   end
 | |
| 
 | |
|   def set_resource
 | |
|     @resource = User.find(params[:id])
 | |
|   end
 | |
| 
 | |
|   def user_params
 | |
|     params.permit(:name, :display_name, :email, :password, custom_attributes: {})
 | |
|   end
 | |
| end
 |