# SRS-02: File Sharing (SMB/NFS)

## 1. Overview
File Sharing module provides management of SMB/CIFS and NFS shares for network file access.

## 2. Functional Requirements

### 2.1 Share Management
**FR-FS-001**: System shall allow users to create shares
- **Input**: Dataset ID, share type (SMB/NFS/Both), share name, mount point
- **Output**: Created share with UUID
- **Validation**: Dataset exists, share name uniqueness

**FR-FS-002**: System shall allow users to list all shares
- **Output**: Share list with type, dataset, status
- **Filtering**: By protocol, dataset, status

**FR-FS-003**: System shall allow users to view share details
- **Output**: Share configuration, protocol settings, access control

**FR-FS-004**: System shall allow users to update shares
- **Input**: Share ID, updated configuration
- **Validation**: Valid configuration values

**FR-FS-005**: System shall allow users to delete shares
- **Validation**: Share must not be actively accessed

### 2.2 SMB/CIFS Configuration
**FR-FS-006**: System shall allow users to configure SMB share name
- **Input**: Share ID, SMB share name
- **Validation**: Valid SMB share name format

**FR-FS-007**: System shall allow users to configure SMB path
- **Input**: Share ID, SMB path
- **Validation**: Path exists and is accessible

**FR-FS-008**: System shall allow users to configure SMB comment
- **Input**: Share ID, comment text

**FR-FS-009**: System shall allow users to enable/disable guest access
- **Input**: Share ID, guest access flag

**FR-FS-010**: System shall allow users to configure read-only access
- **Input**: Share ID, read-only flag

**FR-FS-011**: System shall allow users to configure browseable option
- **Input**: Share ID, browseable flag

### 2.3 NFS Configuration
**FR-FS-012**: System shall allow users to configure NFS clients
- **Input**: Share ID, client list (IP addresses or hostnames)
- **Validation**: Valid IP/hostname format

**FR-FS-013**: System shall allow users to add NFS clients
- **Input**: Share ID, client address
- **Validation**: Client not already in list

**FR-FS-014**: System shall allow users to remove NFS clients
- **Input**: Share ID, client address

**FR-FS-015**: System shall allow users to configure NFS options
- **Input**: Share ID, NFS options (ro, rw, sync, async, etc.)

### 2.4 Share Status
**FR-FS-016**: System shall display share status (enabled/disabled)
- **Output**: Current status for each protocol

**FR-FS-017**: System shall allow users to enable/disable SMB protocol
- **Input**: Share ID, enabled flag

**FR-FS-018**: System shall allow users to enable/disable NFS protocol
- **Input**: Share ID, enabled flag

## 3. User Interface Requirements

### 3.1 Share List View
- Master-detail layout
- Search and filter functionality
- Protocol indicators (SMB/NFS badges)
- Status indicators

### 3.2 Share Detail View
- Protocol tabs (SMB, NFS)
- Configuration forms
- Client management (for NFS)
- Quick actions (enable/disable protocols)

### 3.3 Create Share Modal
- Dataset selection
- Share name input
- Protocol selection
- Initial configuration

## 4. API Endpoints

```
GET    /api/v1/shares
GET    /api/v1/shares/:id
POST   /api/v1/shares
PUT    /api/v1/shares/:id
DELETE /api/v1/shares/:id
```

## 5. Data Model

### Share Object
```json
{
  "id": "uuid",
  "dataset_id": "uuid",
  "dataset_name": "string",
  "mount_point": "string",
  "share_type": "smb|nfs|both",
  "smb_enabled": boolean,
  "smb_share_name": "string",
  "smb_path": "string",
  "smb_comment": "string",
  "smb_guest_ok": boolean,
  "smb_read_only": boolean,
  "smb_browseable": boolean,
  "nfs_enabled": boolean,
  "nfs_clients": ["string"],
  "nfs_options": "string",
  "is_active": boolean,
  "created_at": "timestamp",
  "updated_at": "timestamp",
  "created_by": "uuid"
}
```

## 6. Permissions
- **storage:read**: Required for viewing shares
- **storage:write**: Required for creating, updating, deleting shares

## 7. Error Handling
- Invalid dataset ID
- Duplicate share name
- Invalid client address format
- Share in use
- Insufficient permissions

