2024-07-06 16:50:42 +00:00
# Millions Missing France - Freescout Restricted Customers
2024-07-06 16:22:35 +00:00
## Description
In a regular Freescout instance, all users have access to the e-mails of all customers.
That can easily lead to confidentiality breaches when multiple organizations share a same Freescout instance.
This package tries to provide a solution to this problem, by linking each customer to a specific mailbox.
The information related to a customer, especially their e-mail address, is only shown to users with access to the related mailbox.
2024-07-11 15:44:45 +00:00
## Data loss warning
When this module is installed, it will link customers to mailboxes.
Customers added once this module is active will be linked to mailboxes too.
On uninstallation, simply unlinking them could cause several problems:
2024-07-13 11:40:08 +00:00
2024-07-11 15:44:45 +00:00
- It could break unicity constraints, as two customers linked to disctinct mailboxes are allowed to use the same e-mail address as long as the module is active;
- It would break the confidentiality promise, by letting all users having access to all customers.
To avoid these problems, on the module uninstallation all the customers linked to mailboxes are dropped from the database.
This is an irreversible operation, the customers deleted that way are gone for good.
So it is highly recommended to backup your customers database:
2024-07-13 11:40:08 +00:00
2024-07-11 15:44:45 +00:00
- Before installing this module;
- Before uninstalling this module.
2024-07-06 16:22:35 +00:00
## Installation instructions
2024-07-11 10:43:11 +00:00
### Install the module
2024-07-06 16:22:35 +00:00
2024-07-11 12:19:08 +00:00
#### Install from the archive
Download the [release tarball] and extract its content into `Modules/MMFRestrictedCustomers` .
2024-09-28 16:18:41 +00:00
[release tarball]: https://port.numenaute.org/MMF/freescout-restricted-customers/archive/1.1.3.tar.gz
2024-07-11 12:19:08 +00:00
```
2024-09-28 16:18:41 +00:00
wget https://port.numenaute.org/MMF/freescout-restricted-customers/archive/1.1.3.tar.gz -O freescout-restricted-customers-1.1.3.tar.gz
tar xf freescout-restricted-customers-1.1.3.tar.gz -C Modules
2024-07-11 15:00:25 +00:00
mv Modules/freescout-restricted-customers Modules/MMFRestrictedCustomers
2024-07-11 12:19:08 +00:00
```
#### Install from git
```
git clone https://port.numenaute.org/MMF/freescout-restricted-customers.git Modules/MMFRestrictedCustomers
```
2024-07-06 16:22:35 +00:00
### Edit the application routes
2024-07-12 10:58:38 +00:00
Routes set in Freescout itself can not be automatically overridden.
Overriding them has to be done manually, in the following file:
2024-07-06 16:22:35 +00:00
#### routes/web.php
This section of the file:
```php
// Customers
Route::get('/customers/{id}/edit', 'CustomersController@update')->name('customers.update');
Route::post('/customers/{id}/edit', 'CustomersController@updateSave');
Route::get('/customers/{id}/', 'CustomersController@conversations')->name('customers.conversations');
Route::get('/customers/ajax-search', ['uses' => 'CustomersController@ajaxSearch', 'laroute' => true])->name('customers.ajax_search');
Route::post('/customers/ajax', ['uses' => 'CustomersController@ajax', 'laroute' => true])->name('customers.ajax');
```
should be replaced with:
```php
// Customers
2024-07-10 15:16:13 +00:00
Route::get('/customers/{id}/edit', '\Modules\MMFRestrictedCustomers\Http\Controllers\CustomersController@update')->name('customers.update');
2024-07-11 09:55:29 +00:00
Route::post('/customers/{id}/edit', 'CustomersController@updateSave');
2024-07-10 15:16:13 +00:00
Route::get('/customers/{id}/', '\Modules\MMFRestrictedCustomers\Http\Controllers\CustomersController@conversations')->name('customers.conversations');
Route::get('/customers/ajax-search', ['uses' => '\Modules\MMFRestrictedCustomers\Http\Controllers\CustomersController@ajaxSearch', 'laroute' => true])->name('customers.ajax_search');
Route::post('/customers/ajax', ['uses' => '\Modules\MMFRestrictedCustomers\Http\Controllers\CustomersController@ajax', 'laroute' => true])->name('customers.ajax');
2024-07-06 16:22:35 +00:00
```
2024-07-22 16:58:51 +00:00
This other section:
```php
// Conversations
Route::get('/conversation/{id}', ['uses' => 'ConversationsController@view', 'laroute' => true])->name('conversations.view');
Route::post('/conversation/ajax', ['uses' => 'ConversationsController@ajax', 'laroute' => true])->name('conversations.ajax');
Route::post('/conversation/upload', ['uses' => 'ConversationsController@upload', 'laroute' => true])->name('conversations.upload');
Route::get('/mailbox/{mailbox_id}/new-ticket', 'ConversationsController@create')->name('conversations.create');
Route::get('/mailbox/{mailbox_id}/clone-ticket/{from_thread_id}', 'ConversationsController@cloneConversation')->name('conversations.clone_conversation');
//Route::get('/conversation/draft/{id}', 'ConversationsController@draft')->name('conversations.draft');
Route::get('/conversation/ajax-html/{action}', ['uses' => 'ConversationsController@ajaxHtml', 'laroute' => true])->name('conversations.ajax_html');
Route::get('/search', 'ConversationsController@search')->name('conversations.search');
Route::get('/conversation/undo-reply/{thread_id}', 'ConversationsController@undoReply')->name('conversations.undo');
Route::get('/mailbox/{mailbox_id}/chats', 'ConversationsController@chats')->name('conversations.chats');
```
should be replaced with:
```php
// Conversations
Route::get('/conversation/{id}', ['uses' => 'ConversationsController@view', 'laroute' => true])->name('conversations.view');
Route::post('/conversation/ajax', ['uses' => '\Modules\MMFRestrictedCustomers\Http\Controllers\ConversationsController@ajax', 'laroute' => true])->name('conversations.ajax');
Route::post('/conversation/upload', ['uses' => 'ConversationsController@upload', 'laroute' => true])->name('conversations.upload');
Route::get('/mailbox/{mailbox_id}/new-ticket', 'ConversationsController@create')->name('conversations.create');
Route::get('/mailbox/{mailbox_id}/clone-ticket/{from_thread_id}', 'ConversationsController@cloneConversation')->name('conversations.clone_conversation');
//Route::get('/conversation/draft/{id}', 'ConversationsController@draft')->name('conversations.draft');
Route::get('/conversation/ajax-html/{action}', ['uses' => 'ConversationsController@ajaxHtml', 'laroute' => true])->name('conversations.ajax_html');
Route::get('/search', 'ConversationsController@search')->name('conversations.search');
Route::get('/conversation/undo-reply/{thread_id}', 'ConversationsController@undoReply')->name('conversations.undo');
Route::get('/mailbox/{mailbox_id}/chats', 'ConversationsController@chats')->name('conversations.chats');
```
2024-07-09 16:25:43 +00:00
### Edit the artisan commands
2024-07-11 15:38:55 +00:00
Console commands set in other modules or in Freescout itself can not be automatically overridden.
Overriding them has to be done manually, in the following file.
2024-07-09 16:25:43 +00:00
#### app/Console/Kernel.php
At the lines 107-108, this:
```php
$fetch_command_identifier = \Helper::getWorkerIdentifier('freescout:fetch-emails');
$fetch_command_name = 'freescout:fetch-emails'
```
should be replaced with:
```php
2024-07-10 15:16:13 +00:00
$fetch_command_identifier = \Helper::getWorkerIdentifier('mmfrestrictedcustomers:fetch-emails');
$fetch_command_name = 'mmfrestrictedcustomers:fetch-emails'
2024-07-09 16:25:43 +00:00
```
2024-07-09 12:40:59 +00:00
### Update the database schema
2024-07-06 16:47:23 +00:00
```
php artisan migrate
```
2024-07-10 16:26:08 +00:00
### Use the updated views
Beware that this will overwrite any customization you might have done to the following templates:
2024-07-13 11:40:08 +00:00
2024-07-10 16:26:08 +00:00
- `resources/views/conversations/search.blade.php`
```
php artisan vendor:publish --provider='Modules\MMFRestrictedCustomers\Providers\MMFRestrictedCustomersServiceProvider' --tag='views' --force
```