mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-01 19:48:08 +00:00
Feature: Business logo API for web widget (#674)
Co-authored-by: Pranav Raj Sreepuram <pranavrajs@gmail.com>
This commit is contained in:
10
.rubocop.yml
10
.rubocop.yml
@@ -4,6 +4,10 @@ require:
|
||||
- rubocop-rspec
|
||||
inherit_from: .rubocop_todo.yml
|
||||
|
||||
Lint/RaiseException:
|
||||
Enabled: true
|
||||
Lint/StructNewOverride:
|
||||
Enabled: true
|
||||
Layout/LineLength:
|
||||
Max: 150
|
||||
Metrics/ClassLength:
|
||||
@@ -16,6 +20,12 @@ Style/FrozenStringLiteralComment:
|
||||
Enabled: false
|
||||
Style/SymbolArray:
|
||||
Enabled: false
|
||||
Style/HashEachMethods:
|
||||
Enabled: true
|
||||
Style/HashTransformKeys:
|
||||
Enabled: true
|
||||
Style/HashTransformValues:
|
||||
Enabled: true
|
||||
Style/GlobalVars:
|
||||
Exclude:
|
||||
- 'config/initializers/redis.rb'
|
||||
|
||||
@@ -17,7 +17,7 @@ class ContactMergeAction
|
||||
def validate_contacts
|
||||
return if belongs_to_account?(@base_contact) && belongs_to_account?(@mergee_contact)
|
||||
|
||||
raise Exception, 'contact does not belong to the account'
|
||||
raise StandardError, 'contact does not belong to the account'
|
||||
end
|
||||
|
||||
def belongs_to_account?(contact)
|
||||
|
||||
@@ -8,7 +8,7 @@ class Api::BaseController < ApplicationController
|
||||
private
|
||||
|
||||
def authenticate_by_access_token?
|
||||
request.headers[:api_access_token].present?
|
||||
request.headers[:api_access_token].present? || request.headers[:HTTP_API_ACCESS_TOKEN].present?
|
||||
end
|
||||
|
||||
def set_conversation
|
||||
|
||||
@@ -26,6 +26,6 @@ class Api::V1::Accounts::InboxesController < Api::BaseController
|
||||
end
|
||||
|
||||
def inbox_update_params
|
||||
params.require(:inbox).permit(:enable_auto_assignment)
|
||||
params.require(:inbox).permit(:enable_auto_assignment, :avatar)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -5,7 +5,8 @@ module AccessTokenAuthHelper
|
||||
}.freeze
|
||||
|
||||
def authenticate_access_token!
|
||||
access_token = AccessToken.find_by(token: request.headers[:api_access_token])
|
||||
token = request.headers[:api_access_token] || request.headers[:HTTP_API_ACCESS_TOKEN]
|
||||
access_token = AccessToken.find_by(token: token)
|
||||
render_unauthorized('Invalid Access Token') && return unless access_token
|
||||
|
||||
token_owner = access_token.owner
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
# Table name: accounts
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# locale :integer default("eng")
|
||||
# locale :integer default("en")
|
||||
# name :string not null
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
|
||||
class Inbox < ApplicationRecord
|
||||
include Reportable
|
||||
include Avatarable
|
||||
|
||||
validates :account_id, presence: true
|
||||
|
||||
|
||||
@@ -113,6 +113,19 @@ RSpec.describe 'Inboxes API', type: :request do
|
||||
expect(inbox.reload.enable_auto_assignment).to be_falsey
|
||||
end
|
||||
|
||||
it 'updates avatar' do
|
||||
# no avatar before upload
|
||||
expect(inbox.avatar.attached?).to eq(false)
|
||||
file = fixture_file_upload(Rails.root.join('spec/assets/avatar.png'), 'image/png')
|
||||
patch "/api/v1/accounts/#{account.id}/inboxes/#{inbox.id}",
|
||||
params: { inbox: { avatar: file } },
|
||||
headers: admin.create_new_auth_token
|
||||
|
||||
expect(response).to have_http_status(:success)
|
||||
inbox.reload
|
||||
expect(inbox.avatar.attached?).to eq(true)
|
||||
end
|
||||
|
||||
it 'will not update inbox for agent' do
|
||||
agent = create(:user, account: account, role: :agent)
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
patch:
|
||||
tags:
|
||||
- Inbox
|
||||
operationId: disableAutoAssignment
|
||||
summary: Disable auto assignment
|
||||
description: Disable Auto Assignment for an inbox
|
||||
operationId: updateInbox
|
||||
summary: Update Inbox
|
||||
description: Add avatar and disable auto assignment for an inbox
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
@@ -20,6 +20,10 @@ patch:
|
||||
type: boolean
|
||||
required: true
|
||||
description: 'Enable Auto Assignment'
|
||||
avatar:
|
||||
type: file
|
||||
required: false
|
||||
description: 'Image file for avatar'
|
||||
responses:
|
||||
200:
|
||||
description: Success
|
||||
|
||||
@@ -1,37 +1,37 @@
|
||||
# Widget
|
||||
/account/{account_id}/widget/inboxes:
|
||||
/accounts/{account_id}/widget/inboxes:
|
||||
$ref: ./widget/inboxes/create.yml
|
||||
/account/{account_id}/widget/inboxes/${id}:
|
||||
/accounts/{account_id}/widget/inboxes/${id}:
|
||||
$ref: ./widget/inboxes/update.yml
|
||||
|
||||
# Inboxes
|
||||
/account/{account_id}/inboxes:
|
||||
/accounts/{account_id}/inboxes:
|
||||
$ref: ./inboxes/index.yml
|
||||
/account/{account_id}/inboxes/{id}:
|
||||
/accounts/{account_id}/inboxes/{id}:
|
||||
$ref: ./inboxes/update.yml
|
||||
|
||||
# Conversations
|
||||
/account/{account_id}/conversations:
|
||||
/accounts/{account_id}/conversations:
|
||||
$ref: ./conversation/list.yml
|
||||
/account/{account_id}/conversations/{id}:
|
||||
/accounts/{account_id}/conversations/{id}:
|
||||
$ref: ./conversation/crud.yml
|
||||
/account/{account_id}/conversations/{id}/toggle_status:
|
||||
/accounts/{account_id}/conversations/{id}/toggle_status:
|
||||
$ref: ./conversation/toggle_status.yml
|
||||
|
||||
# Messages
|
||||
/account/{account_id}/conversations/{id}/messages:
|
||||
/accounts/{account_id}/conversations/{id}/messages:
|
||||
$ref: ./conversation/messages/index_create.yml
|
||||
|
||||
/account/{account_id}/conversations/{id}/labels:
|
||||
/accounts/{account_id}/conversations/{id}/labels:
|
||||
$ref: ./conversation/labels.yml
|
||||
|
||||
/account/{account_id}/conversations/{id}/assignments:
|
||||
/accounts/{account_id}/conversations/{id}/assignments:
|
||||
$ref: ./conversation/assignments.yml
|
||||
|
||||
# Contacts
|
||||
/account/{account_id}/contacts:
|
||||
/accounts/{account_id}/contacts:
|
||||
$ref: ./contact/list_create.yml
|
||||
/account/{account_id}/contacts/{id}:
|
||||
/accounts/{account_id}/contacts/{id}:
|
||||
$ref: ./contact/crud.yml
|
||||
/account/{account_id}/contacts/{id}/conversations:
|
||||
/accounts/{account_id}/contacts/{id}/conversations:
|
||||
$ref: ./contact/conversations.yml
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"application/json; charset=utf-8"
|
||||
],
|
||||
"paths": {
|
||||
"/account/{account_id}/widget/inboxes": {
|
||||
"/accounts/{account_id}/widget/inboxes": {
|
||||
"post": {
|
||||
"tags": [
|
||||
"Widget"
|
||||
@@ -78,7 +78,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"/account/{account_id}/widget/inboxes/${id}": {
|
||||
"/accounts/{account_id}/widget/inboxes/${id}": {
|
||||
"patch": {
|
||||
"tags": [
|
||||
"Widget"
|
||||
@@ -123,7 +123,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"/account/{account_id}/inboxes": {
|
||||
"/accounts/{account_id}/inboxes": {
|
||||
"get": {
|
||||
"tags": [
|
||||
"Inbox"
|
||||
@@ -147,14 +147,14 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"/account/{account_id}/inboxes/{id}": {
|
||||
"/accounts/{account_id}/inboxes/{id}": {
|
||||
"patch": {
|
||||
"tags": [
|
||||
"Inbox"
|
||||
],
|
||||
"operationId": "disableAutoAssignment",
|
||||
"summary": "Disable auto assignment",
|
||||
"description": "Disable Auto Assignment for an inbox",
|
||||
"operationId": "updateInbox",
|
||||
"summary": "Update Inbox",
|
||||
"description": "Add avatar and disable auto assignment for an inbox",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "id",
|
||||
@@ -174,6 +174,11 @@
|
||||
"type": "boolean",
|
||||
"required": true,
|
||||
"description": "Enable Auto Assignment"
|
||||
},
|
||||
"avatar": {
|
||||
"type": "file",
|
||||
"required": false,
|
||||
"description": "Image file for avatar"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -195,7 +200,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"/account/{account_id}/conversations": {
|
||||
"/accounts/{account_id}/conversations": {
|
||||
"get": {
|
||||
"tags": [
|
||||
"Conversation"
|
||||
@@ -262,7 +267,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"/account/{account_id}/conversations/{id}": {
|
||||
"/accounts/{account_id}/conversations/{id}": {
|
||||
"get": {
|
||||
"tags": [
|
||||
"Conversation"
|
||||
@@ -295,7 +300,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"/account/{account_id}/conversations/{id}/toggle_status": {
|
||||
"/accounts/{account_id}/conversations/{id}/toggle_status": {
|
||||
"post": {
|
||||
"tags": [
|
||||
"Conversation"
|
||||
@@ -347,7 +352,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"/account/{account_id}/conversations/{id}/messages": {
|
||||
"/accounts/{account_id}/conversations/{id}/messages": {
|
||||
"get": {
|
||||
"tags": [
|
||||
"Messages"
|
||||
@@ -434,7 +439,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"/account/{account_id}/conversations/{id}/labels": {
|
||||
"/accounts/{account_id}/conversations/{id}/labels": {
|
||||
"get": {
|
||||
"tags": [
|
||||
"ConversationLabels"
|
||||
@@ -515,7 +520,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"/account/{account_id}/conversations/{id}/assignments": {
|
||||
"/accounts/{account_id}/conversations/{id}/assignments": {
|
||||
"post": {
|
||||
"tags": [
|
||||
"ConversationAssignment"
|
||||
@@ -561,7 +566,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"/account/{account_id}/contacts": {
|
||||
"/accounts/{account_id}/contacts": {
|
||||
"get": {
|
||||
"tags": [
|
||||
"Contact"
|
||||
@@ -623,7 +628,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"/account/{account_id}/contacts/{id}": {
|
||||
"/accounts/{account_id}/contacts/{id}": {
|
||||
"get": {
|
||||
"tags": [
|
||||
"Contact"
|
||||
@@ -693,7 +698,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"/account/{account_id}/contacts/{id}/conversations": {
|
||||
"/accounts/{account_id}/contacts/{id}/conversations": {
|
||||
"get": {
|
||||
"tags": [
|
||||
"Contact"
|
||||
|
||||
Reference in New Issue
Block a user