mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-11-01 03:27:52 +00:00 
			
		
		
		
	 439e064d90
			
		
	
	439e064d90
	
	
	
		
			
			* Add Contact panel changes * Fix parent iframe blocked * Add Conversation Panel, Contact messages * Update contact panel with conversation details * Update designs in sidebar * Fix specs * Specs: Add specs for conversationMetadata and contact modules * Fix currentUrl issues * Fix spelling * Set default to empty string
		
			
				
	
	
		
			97 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| class Api::V1::Widget::MessagesController < ActionController::Base
 | |
|   before_action :set_conversation, only: [:create]
 | |
| 
 | |
|   def index
 | |
|     @messages = conversation.nil? ? [] : message_finder.perform
 | |
|   end
 | |
| 
 | |
|   def create
 | |
|     @message = conversation.messages.new(message_params)
 | |
|     @message.save!
 | |
|   end
 | |
| 
 | |
|   private
 | |
| 
 | |
|   def conversation
 | |
|     @conversation ||= ::Conversation.find_by(
 | |
|       contact_id: cookie_params[:contact_id],
 | |
|       inbox_id: cookie_params[:inbox_id]
 | |
|     )
 | |
|   end
 | |
| 
 | |
|   def set_conversation
 | |
|     @conversation = ::Conversation.create!(conversation_params) if conversation.nil?
 | |
|   end
 | |
| 
 | |
|   def message_params
 | |
|     {
 | |
|       account_id: conversation.account_id,
 | |
|       inbox_id: conversation.inbox_id,
 | |
|       message_type: :incoming,
 | |
|       content: permitted_params[:message][:content]
 | |
|     }
 | |
|   end
 | |
| 
 | |
|   def conversation_params
 | |
|     {
 | |
|       account_id: inbox.account_id,
 | |
|       inbox_id: inbox.id,
 | |
|       contact_id: cookie_params[:contact_id],
 | |
|       additional_attributes: {
 | |
|         browser: browser_params,
 | |
|         referer: permitted_params[:message][:referer_url],
 | |
|         initiated_at: timestamp_params
 | |
|       }
 | |
|     }
 | |
|   end
 | |
| 
 | |
|   def browser_params
 | |
|     {
 | |
|       browser_name: browser.name,
 | |
|       browser_version: browser.full_version,
 | |
|       device_name: browser.device.name,
 | |
|       platform_name: browser.platform.name,
 | |
|       platform_version: browser.platform.version
 | |
|     }
 | |
|   end
 | |
| 
 | |
|   def timestamp_params
 | |
|     {
 | |
|       timestamp: permitted_params[:message][:timestamp]
 | |
|     }
 | |
|   end
 | |
| 
 | |
|   def inbox
 | |
|     @inbox ||= ::Inbox.find_by(id: cookie_params[:inbox_id])
 | |
|   end
 | |
| 
 | |
|   def cookie_params
 | |
|     @cookie_params ||= JWT.decode(
 | |
|       request.headers[header_name], secret_key, true, algorithm: 'HS256'
 | |
|     ).first.symbolize_keys
 | |
|   end
 | |
| 
 | |
|   def message_finder_params
 | |
|     {
 | |
|       filter_internal_messages: true,
 | |
|       before: permitted_params[:before]
 | |
|     }
 | |
|   end
 | |
| 
 | |
|   def message_finder
 | |
|     @message_finder ||= MessageFinder.new(conversation, message_finder_params)
 | |
|   end
 | |
| 
 | |
|   def header_name
 | |
|     'X-Auth-Token'
 | |
|   end
 | |
| 
 | |
|   def permitted_params
 | |
|     params.permit(:before, message: [:content, :referer_url, :timestamp])
 | |
|   end
 | |
| 
 | |
|   def secret_key
 | |
|     Rails.application.secrets.secret_key_base
 | |
|   end
 | |
| end
 |