# Dashboard

{% embed url="<https://youtu.be/3JVEtzH3et4?si=p-s-Rn_cUD9HlLCt>" fullWidth="true" %}

## SunLicense Web Dashboard Administrator Guide

The **Web Dashboard** is the central interface for managing your license system.\
You can access it via your server address (e.g., `http://{serverip}:{port}`).\
Authentication is required, and access is restricted to users with the `ROLE_ADMIN` permission.

***

### 1. Product Management

The **Products** view allows you to define the software or resources that your license keys will validate against.

#### 1.1. Creating a Product

In the **"Create Products"** tab, you must define the foundational settings for all future licenses associated with this product:

| **Field**                    | **Description & Detail**                                                                                                                                              |
| ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Name & Description**       | Standard identifier fields. Name is required and must be unique.                                                                                                      |
| **Product Type**             | Choose from: `MINECRAFT_JAVA_PLUGIN`, `WEB_APPLICATION`, `DISCORD_BOTS`, or `OTHER`. If `OTHER` is selected, an **Other Product Type** text field appears (required). |
| **Default Max IPs**          | Max number of unique IPs per license. `-1` = unlimited, `0` = none. Default: **5**.                                                                                   |
| **Default Max HWIDs**        | Max number of Hardware IDs per license. `-1` = unlimited, `0` = none. Default: **5**.                                                                                 |
| **Product Role Id**          | Discord Role ID assigned when a user redeems a license.                                                                                                               |
| **Product Purchase Role Id** | Discord Role ID marking a user as a purchaser (required for `/get-license` in Discord).                                                                               |
| **Product URL / Image URL**  | Used for display in the Customer Dashboard.                                                                                                                           |

***

#### 1.2. Managing and Updating Products

The **"Manage Products"** tab displays products in a grid:

* **Updating**: Edit properties such as default limits, roles, and names.
* **Deletion**:
  * Products with active licenses **cannot** be deleted.
  * Attempting deletion shows error:

    > `"Product has licenses, cannot delete"`

***

### 2. License Management

The **Licenses** view lets you generate, modify, and track license keys.

#### 2.1. Creating a License

The **"Create License"** tab handles key generation and assignment.

| **Field**                 | **Description & Detail**                                                                   |
| ------------------------- | ------------------------------------------------------------------------------------------ |
| **License Key**           | Auto-generated (masked `XXXX-XXXX-...`). Hover to view, click to copy.                     |
| **Product**               | Select a product; defaults for Max IPs/HWIDs auto-populate.                                |
| **License Type & Expiry** | Choose `PERMANENT` or `TEMPORARY`. Temporary requires duration or custom date.             |
| **Platform Details**      | Select platform (`SPIGOT`, `BUILT_BY_BIT`, `DISCORD`, `OTHER`) and enter Platform User ID. |
| **Owner Details**         | Provide User Discord ID & Username. If bot is active, a dropdown may be available.         |
| **Initial Data/Status**   | Set comma-separated IPs/HWIDs. Status defaults to `ACTIVE`.                                |
| **Discord DM Prompt**     | If Discord ID provided, you’ll be prompted to send key via DM.                             |

***

#### 2.2. Managing and Updating Licenses

In the **"Manage Licenses"** tab:

* **Search & Filter**: Search by keywords, product, user, etc.
* **Editing**:
  * Clicking a license opens an **Edit License Dialog**.
  * Update fields like owner info, platform, limits, or status.
* **Manual Data Management**:
  * Edit IP/HWID lists directly (comma-separated).
* **Status Updates**:
  * Set to `ACTIVE`, `EXPIRED`, `DEACTIVATED`, or `DELETED`.
* **Deletion**:
  * Available via Delete button in the Edit Dialog.
  * Prompts confirmation before permanent deletion via `licenseService.deleteLicense(id)`.

***

### 3. Blacklist Management

Blacklist Management prevents specific devices or IPs from validating licenses.

#### 3.1. Creating a Blacklist Entry

Use the **"Create Blacklist"** tab:

1. **Type**: Select `IP` or `HWID`.
2. **Data**: Input the IP or Hardware ID.
3. **Scope**:
   * `All Products`
   * `Specific Product` (dropdown required).
4. **Reason**: Required field explaining why the entry is added.

***

#### 3.2. Managing Blacklists

The **"Manage Blacklists"** tab displays all active blacklist entries:

* **Viewing**: See details including blocked data, scope, product ID, and reason.
* **Deleting**: Use Delete button → removes entry via `blacklistService.removeBlackList(id)`.

***

### 4. Viewing License Requests

The **Requests** view provides analytics and history for all license validation attempts.

#### 4.1. Filtering and Overview

* **Filters**: Search term, Product, User, and Date Range.
* **Status Badges**:
  * ✅ Successful (green)
  * ❌ Invalid License
  * 🚫 Spam / Rate Limited
  * 🔴 Blocked (shows `BlockReason`)

***

#### 4.2. Viewing Detailed Request Information

Clicking a request row opens a dialog with detailed request data:

* **License/Product Details**: Masked License Key, Product Version.
* **Device Identifiers**: IP, HWID, MAC Address.
* **System Environment**: OS Name/Version/Architecture, Java Version.
* **Result Data**: Request Date, Type, and Response Type.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.sunlicense.hapangama.com/getting-started/dashboard.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
