Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 55 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,27 +1,68 @@
Browser Extensions module
==============

Browser extensions module for MunkiReport. Reports on users' installed extensions for Firefox, Google Chrome and Microsoft Edge.
Browser extensions module for MunkiReport. Reports on users' installed extensions for Firefox, Google Chrome, Microsoft Edge, and Safari.

### Config Options
### Configuration Options

Module contains two config options to filter reported extensions. By default, the default installed Firefox/Google Chrome/Microsoft Edge extensions are not reported. Filtering can be done by extension name or ID using the `BROWSER_EXTENSION_ID_IGNORELIST` and `BROWSER_EXTENSION_NAME_IGNORELIST` in the .env file.
The module provides configuration options to filter out unwanted browser extensions from your reports. By default, common system extensions for Firefox, Google Chrome, and Microsoft Edge are not reported.

#### Note: Does NOT report on Safari extensions as they are in a protected folder and require TCC permissions to access.
#### Environment Variables Configuration

To customize which extensions are filtered out, add the following variables to your `.env` file:

```
# Filter extensions by ID (comma-separated list of extension IDs)
BROWSER_EXTENSION_ID_IGNORELIST=["extension_id_1","extension_id_2"]

# Filter extensions by name (comma-separated list of extension names)
BROWSER_EXTENSION_NAME_IGNORELIST=["Extension Name 1","Extension Name 2"]
```

#### Default Ignored Extensions

The module comes pre-configured to ignore common system extensions:

- Chrome Web Store Payments (`nmmhkkegccagdldgiimedpiccmgmieda`)
- Chrome Media Router (`pkedcjkdefgpdelpbcmbmeomcjbeemfm`)
- Various Firefox system add-ons (e.g., `default-theme@mozilla.org`, `screenshots@mozilla.org`)

### Safari Extensions Permissions

Safari extensions may not be available on all systems due to permission restrictions. To enable Safari extension reporting:

1. **Full Disk Access**: Grant Full Disk Access to the MunkiReport Python executable:
- Open System Preferences/Settings > Security & Privacy/Privacy > Full Disk Access
- Add `/usr/local/munkireport/munkireport-python3` to the list of allowed applications

2. **MDM Configuration**: For managed devices, you can use an MDM solution to grant the necessary permissions:
- Create a Privacy Preferences Policy Control (PPPC) profile
- Allow Full Disk Access for `/usr/local/munkireport/munkireport-python3`
- Deploy the profile to your managed devices

These permissions are required because Safari extensions are stored in protected locations that require special access privileges to read.

### Features

* Displays browser extensions organized alphabetically by browser type (Chrome, Edge, Firefox, Safari)
* Extensions within each browser category are sorted alphabetically by name
* Supports browser profiles, showing which profile each extension belongs to
* Deduplicates extensions to avoid showing the same extension multiple times
* Shows detailed information about each extension including version, installation date, and description
* Tracks extension installation paths for troubleshooting and management

Table Schema
-----

Database:
* name - varchar(255) - Name of extension
* extension_id - varchar(255) - Extension ID
* version - varchar(255) - Extension version
* description - text - Extension's description
* browser - varchar(255) - Firefox or Google Chrome or Microsoft Edge
* date_installed - bigint - Date extension was updated/installed
* developer - varchar(255) - Name of extension developer, Firefox only
* name - varchar(255) - name of extension
* extension_id - varchar(255) - extension ID
* version - varchar(255) - extension version
* description - text - extension's description
* browser - varchar(255) - Firefox, Google Chrome, Microsoft Edge, or Safari
* profile - varchar(255) - browser profile that contains the extension (e.g., Default, Profile 1)
* date_installed - bigint - date extension was updated/installed
* developer - varchar(255) - name of extension developer, Firefox only
* enabled - boolean - If extension is enabled, Firefox only
* user - varchar(255) - User profile that contains extension
* extension_path - text - Path to extension folder

* user - varchar(255) - user profile that contains extension
* extension_path - text - file system path to the extension files
28 changes: 26 additions & 2 deletions browser_extensions_controller.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,35 @@ function index()
public function get_data($serial_number)
{
jsonView(
Browser_extensions_model::selectRaw('name, version, extension_id, user, browser, date_installed, developer, enabled, extension_path, description')
Browser_extensions_model::selectRaw('name, version, extension_id, user, browser, profile, date_installed, developer, enabled, description, extension_path')
->where('browser_extensions.serial_number', $serial_number)
->orderBy('name', 'asc')
->filter()
->get()
->toArray()
);
}
}

/**
* Get data for scroll widget
*
* @return void
* @author tuxudo
**/
public function get_scroll_widget($column)
{
// Remove non-column name characters
$column = preg_replace("/[^A-Za-z0-9_\-]]/", '', $column);

$sql = "SELECT COUNT(CASE WHEN ".$column." <> '' AND ".$column." IS NOT NULL THEN 1 END) AS count, ".$column."
FROM browser_extensions
LEFT JOIN reportdata USING (serial_number)
".get_machine_group_filter()."
AND ".$column." <> '' AND ".$column." IS NOT NULL
GROUP BY ".$column."
ORDER BY count DESC";

$queryobj = new Browser_extensions_model;
jsonView($queryobj->rawQuery($sql));
}
} // End class Browser_extensions_controller
1 change: 1 addition & 0 deletions browser_extensions_factory.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
'description' => $faker->company(),
'developer' => $faker->word(),
'user' => $faker->word(),
'profile' => $faker->randomElement(['Default', 'Profile 1', 'Profile 2']),
'extension_path' => $faker->word(),
];
});
Expand Down
12 changes: 12 additions & 0 deletions browser_extensions_model.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class Browser_extensions_model extends Eloquent
'version',
'description',
'browser',
'profile',
'date_installed',
'developer',
'enabled',
Expand All @@ -21,4 +22,15 @@ class Browser_extensions_model extends Eloquent
];

public $timestamps = false;

/**
* Execute a raw query
*
* @param string $sql SQL query
* @return array result
*/
public function rawQuery($sql)
{
return $this->getConnection()->select($sql);
}
}
5 changes: 4 additions & 1 deletion locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,12 @@
"version": "Version",
"description": "Description",
"browser": "Browser",
"profile": "Profile",
"date_installed": "Install Date",
"developer": "Developer",
"enabled": "Enabled",
"user": "User",
"extension_path": "Extension Path"
"extension_path": "Extension Path",
"extensions_by_name": "Browser Extensions",
"extensions_by_developer": "Extensions by Developer"
}
28 changes: 28 additions & 0 deletions migrations/2025_03_09_000001_browser_extensions_add_profile.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Capsule\Manager as Capsule;

class BrowserExtensionsAddProfile extends Migration
{
private $tableName = 'browser_extensions';

public function up()
{
$capsule = new Capsule();

$capsule::schema()->table($this->tableName, function (Blueprint $table) {
$table->string('profile')->nullable()->after('browser');
$table->index('profile');
});
}

public function down()
{
$capsule = new Capsule();

$capsule::schema()->table($this->tableName, function (Blueprint $table) {
$table->dropColumn('profile');
});
}
}
13 changes: 12 additions & 1 deletion provides.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,15 @@ client_tabs:
listings:
browser_extensions:
view: browser_extensions_listing
i18n: browser_extensions.browser_extensions
i18n: browser_extensions.browser_extensions

widgets:
browser_extensions_name:
view: browser_extensions_name_widget
browser_extensions_developer:
view: browser_extensions_developer_widget

reports:
browser_extensions_report:
view: browser_extensions_report
i18n: browser_extensions.reporttitle
Loading