feat: Rebrand to License Authority with Govt of Goa branding
- Replace TLAS with License Authority throughout documentation - Add Government of Goa emblem/logo (Ashoka Chakra style) - Update frontend branding to match documentation - Add configurable Swagger API link via VITE_API_BASE_URL env var - Fix Docker build for VitePress (git dependency, .dockerignore) - Fix helmet security headers for HTTP deployments - Add CORS support for VM deployment Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -2,8 +2,7 @@ node_modules
|
|||||||
npm-debug.log
|
npm-debug.log
|
||||||
.git
|
.git
|
||||||
.gitignore
|
.gitignore
|
||||||
README.md
|
|
||||||
docker-compose.yml
|
docker-compose.yml
|
||||||
.DS_Store
|
.DS_Store
|
||||||
*.md
|
.vitepress/dist
|
||||||
!docs/*.md
|
.vitepress/cache
|
||||||
|
|||||||
2
Documentation/.env.example
Normal file
2
Documentation/.env.example
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# API Base URL for Swagger documentation
|
||||||
|
VITE_API_BASE_URL=http://localhost:3001
|
||||||
@@ -1,22 +1,27 @@
|
|||||||
import { defineConfig } from 'vitepress'
|
import { defineConfig } from 'vitepress'
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
title: 'TLAS',
|
title: 'License Authority | Govt of Goa',
|
||||||
description: 'Tokenized License Approval System - Enterprise Blockchain Platform for Government License Management',
|
description: 'Government of Goa - Blockchain-Powered License Management Platform',
|
||||||
|
|
||||||
head: [
|
head: [
|
||||||
['link', { rel: 'icon', type: 'image/svg+xml', href: '/logo.svg' }],
|
['link', { rel: 'icon', type: 'image/svg+xml', href: '/logo.svg' }],
|
||||||
['meta', { name: 'theme-color', content: '#0f172a' }],
|
['meta', { name: 'theme-color', content: '#0f172a' }],
|
||||||
['meta', { name: 'og:type', content: 'website' }],
|
['meta', { name: 'og:type', content: 'website' }],
|
||||||
['meta', { name: 'og:site_name', content: 'TLAS Documentation' }],
|
['meta', { name: 'og:site_name', content: 'License Authority Documentation' }],
|
||||||
],
|
],
|
||||||
|
|
||||||
lastUpdated: true,
|
lastUpdated: true,
|
||||||
cleanUrls: true,
|
cleanUrls: true,
|
||||||
|
appearance: true,
|
||||||
|
ignoreDeadLinks: ['/api/docs'],
|
||||||
|
|
||||||
themeConfig: {
|
themeConfig: {
|
||||||
|
darkModeSwitchLabel: 'Theme',
|
||||||
|
darkModeSwitchTitle: 'Switch to dark mode',
|
||||||
|
lightModeSwitchTitle: 'Switch to light mode',
|
||||||
logo: '/logo.svg',
|
logo: '/logo.svg',
|
||||||
siteTitle: 'TLAS',
|
siteTitle: 'License Authority',
|
||||||
|
|
||||||
nav: [
|
nav: [
|
||||||
{ text: 'Overview', link: '/overview/' },
|
{ text: 'Overview', link: '/overview/' },
|
||||||
@@ -107,13 +112,9 @@ export default defineConfig({
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
socialLinks: [
|
|
||||||
{ icon: 'github', link: 'https://github.com/goa-gel' }
|
|
||||||
],
|
|
||||||
|
|
||||||
footer: {
|
footer: {
|
||||||
message: 'Tokenized License Approval System',
|
message: 'An Initiative of the Government of Goa, India',
|
||||||
copyright: 'Copyright 2026 Government of Goa. All rights reserved.'
|
copyright: '© 2026 Government of Goa. All rights reserved.'
|
||||||
},
|
},
|
||||||
|
|
||||||
search: {
|
search: {
|
||||||
|
|||||||
10
Documentation/.vitepress/theme/ApiDocsLink.vue
Normal file
10
Documentation/.vitepress/theme/ApiDocsLink.vue
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<script setup>
|
||||||
|
const apiBaseUrl = import.meta.env.VITE_API_BASE_URL || ''
|
||||||
|
const swaggerUrl = `${apiBaseUrl}/api/docs`
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<a :href="swaggerUrl" target="_blank" rel="noopener">
|
||||||
|
<slot>Open API Documentation →</slot>
|
||||||
|
</a>
|
||||||
|
</template>
|
||||||
@@ -1,16 +1,10 @@
|
|||||||
import { h } from 'vue'
|
|
||||||
import type { Theme } from 'vitepress'
|
|
||||||
import DefaultTheme from 'vitepress/theme'
|
import DefaultTheme from 'vitepress/theme'
|
||||||
import './custom.css'
|
import './custom.css'
|
||||||
|
import ApiDocsLink from './ApiDocsLink.vue'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
extends: DefaultTheme,
|
extends: DefaultTheme,
|
||||||
Layout: () => {
|
enhanceApp({ app }) {
|
||||||
return h(DefaultTheme.Layout, null, {
|
app.component('ApiDocsLink', ApiDocsLink)
|
||||||
// You can add custom slots here
|
}
|
||||||
})
|
|
||||||
},
|
|
||||||
enhanceApp({ app, router, siteData }) {
|
|
||||||
// Register custom components or plugins here
|
|
||||||
}
|
}
|
||||||
} satisfies Theme
|
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
# Build stage
|
# Build stage
|
||||||
FROM node:20-alpine AS builder
|
FROM node:20-alpine AS builder
|
||||||
|
|
||||||
|
ARG VITE_API_BASE_URL=http://localhost:3001
|
||||||
|
ENV VITE_API_BASE_URL=$VITE_API_BASE_URL
|
||||||
|
|
||||||
|
RUN apk add --no-cache git
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
COPY package*.json ./
|
COPY package*.json ./
|
||||||
@@ -12,6 +17,7 @@ RUN npm run build
|
|||||||
# Production stage
|
# Production stage
|
||||||
FROM nginx:alpine
|
FROM nginx:alpine
|
||||||
|
|
||||||
|
RUN rm -rf /usr/share/nginx/html/*
|
||||||
COPY --from=builder /app/.vitepress/dist /usr/share/nginx/html
|
COPY --from=builder /app/.vitepress/dist /usr/share/nginx/html
|
||||||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
```
|
```
|
||||||
┌─────────────────────────────────────────────────────────────────────┐
|
┌─────────────────────────────────────────────────────────────────────┐
|
||||||
│ TLAS Platform │
|
│ License Authority Platform │
|
||||||
├─────────────────────────────────────────────────────────────────────┤
|
├─────────────────────────────────────────────────────────────────────┤
|
||||||
│ │
|
│ │
|
||||||
│ ┌─────────────────────────────────────────────────────────────┐ │
|
│ ┌─────────────────────────────────────────────────────────────┐ │
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ Government licensing in Goa processes over 50,000 applications annually across 1
|
|||||||
|
|
||||||
## The Solution
|
## The Solution
|
||||||
|
|
||||||
TLAS (Tokenized License Approval System) digitizes the complete license lifecycle:
|
License Authority digitizes the complete license lifecycle:
|
||||||
|
|
||||||
1. **Online application** with DigiLocker integration
|
1. **Online application** with DigiLocker integration
|
||||||
2. **Automated workflow** with configurable approval stages
|
2. **Automated workflow** with configurable approval stages
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## For Citizens
|
## For Citizens
|
||||||
|
|
||||||
| Before TLAS | After TLAS |
|
| Before | After |
|
||||||
|-------------|------------|
|
|-------------|------------|
|
||||||
| Multiple office visits | Apply from anywhere |
|
| Multiple office visits | Apply from anywhere |
|
||||||
| No status visibility | Real-time tracking |
|
| No status visibility | Real-time tracking |
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
## For Departments
|
## For Departments
|
||||||
|
|
||||||
| Before TLAS | After TLAS |
|
| Before | After |
|
||||||
|-------------|------------|
|
|-------------|------------|
|
||||||
| Paper file management | Digital workflow |
|
| Paper file management | Digital workflow |
|
||||||
| Manual tracking registers | Automated status updates |
|
| Manual tracking registers | Automated status updates |
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
## For Government
|
## For Government
|
||||||
|
|
||||||
| Challenge | TLAS Solution |
|
| Challenge | Platform Solution |
|
||||||
|-----------|---------------|
|
|-----------|---------------|
|
||||||
| Document fraud | Cryptographically signed certificates |
|
| Document fraud | Cryptographically signed certificates |
|
||||||
| Corruption perception | Transparent, auditable process |
|
| Corruption perception | Transparent, auditable process |
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
TLAS is designed and operated in compliance with applicable Indian laws, government standards, and international security frameworks.
|
This platform is designed and operated in compliance with applicable Indian laws, government standards, and international security frameworks.
|
||||||
|
|
||||||
## Regulatory Compliance
|
## Regulatory Compliance
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@ TLAS is designed and operated in compliance with applicable Indian laws, governm
|
|||||||
|
|
||||||
### ISO 27001 Alignment
|
### ISO 27001 Alignment
|
||||||
|
|
||||||
TLAS security controls align with ISO 27001 Annex A:
|
Platform security controls align with ISO 27001 Annex A:
|
||||||
|
|
||||||
- A.5: Information security policies
|
- A.5: Information security policies
|
||||||
- A.6: Organization of information security
|
- A.6: Organization of information security
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
This guide covers daily operations for department staff processing license applications through TLAS.
|
This guide covers daily operations for department staff processing license applications through the platform.
|
||||||
|
|
||||||
## Logging In
|
## Logging In
|
||||||
|
|
||||||
|
|||||||
@@ -12,8 +12,8 @@
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Clone repository
|
# Clone repository
|
||||||
git clone https://github.com/goa-gel/tlas.git
|
git clone https://github.com/goa-gel/license-authority.git
|
||||||
cd tlas
|
cd license-authority
|
||||||
|
|
||||||
# Configure
|
# Configure
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
@@ -68,5 +68,5 @@ curl http://localhost:3000/api/health
|
|||||||
## Support
|
## Support
|
||||||
|
|
||||||
For deployment assistance:
|
For deployment assistance:
|
||||||
- Email: devops@tlas.gov.in
|
- Email: devops@license.gov.in
|
||||||
- Documentation: This guide
|
- Documentation: This guide
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
TLAS uses OAuth 2.0 with JWT tokens for API authentication.
|
The platform uses OAuth 2.0 with JWT tokens for API authentication.
|
||||||
|
|
||||||
## Obtaining Credentials
|
## Obtaining Credentials
|
||||||
|
|
||||||
@@ -15,7 +15,7 @@ Contact your administrator to receive:
|
|||||||
|
|
||||||
```http
|
```http
|
||||||
POST /auth/token HTTP/1.1
|
POST /auth/token HTTP/1.1
|
||||||
Host: api.tlas.gov.in
|
Host: api.license.gov.in
|
||||||
Content-Type: application/x-www-form-urlencoded
|
Content-Type: application/x-www-form-urlencoded
|
||||||
|
|
||||||
grant_type=client_credentials&
|
grant_type=client_credentials&
|
||||||
@@ -41,7 +41,7 @@ Include token in Authorization header:
|
|||||||
|
|
||||||
```http
|
```http
|
||||||
GET /applications/APP-2026-00001 HTTP/1.1
|
GET /applications/APP-2026-00001 HTTP/1.1
|
||||||
Host: api.tlas.gov.in
|
Host: api.license.gov.in
|
||||||
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
|
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -79,5 +79,5 @@ interface ILicenseNFT {
|
|||||||
|
|
||||||
View transactions on the block explorer:
|
View transactions on the block explorer:
|
||||||
```
|
```
|
||||||
https://explorer.tlas.gov.in/tx/{transactionHash}
|
https://explorer.license.gov.in/tx/{transactionHash}
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -2,15 +2,27 @@
|
|||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
TLAS provides REST APIs for integrating with external systems. All APIs use JSON for request and response bodies.
|
The platform provides REST APIs for integrating with external systems. All APIs use JSON for request and response bodies.
|
||||||
|
|
||||||
## Base URL
|
## Base URL
|
||||||
|
|
||||||
```
|
```
|
||||||
Production: https://api.tlas.gov.in/v1
|
Production: https://api.license.gov.in/v1
|
||||||
Staging: https://api-staging.tlas.gov.in/v1
|
Staging: https://api-staging.license.gov.in/v1
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Interactive API Documentation
|
||||||
|
|
||||||
|
Explore and test APIs using our interactive Swagger UI:
|
||||||
|
|
||||||
|
**<ApiDocsLink />**
|
||||||
|
|
||||||
|
The Swagger documentation provides:
|
||||||
|
- Complete endpoint specifications
|
||||||
|
- Request/response schemas
|
||||||
|
- Interactive "Try it out" functionality
|
||||||
|
- Authentication testing
|
||||||
|
|
||||||
## Authentication
|
## Authentication
|
||||||
|
|
||||||
All API requests require authentication via Bearer token.
|
All API requests require authentication via Bearer token.
|
||||||
@@ -25,7 +37,7 @@ Obtain tokens through the authentication endpoint. See [Authentication](/develop
|
|||||||
|
|
||||||
```http
|
```http
|
||||||
POST /applications HTTP/1.1
|
POST /applications HTTP/1.1
|
||||||
Host: api.tlas.gov.in
|
Host: api.license.gov.in
|
||||||
Authorization: Bearer eyJhbGc...
|
Authorization: Bearer eyJhbGc...
|
||||||
Content-Type: application/json
|
Content-Type: application/json
|
||||||
|
|
||||||
@@ -92,9 +104,9 @@ X-RateLimit-Reset: 1707500000
|
|||||||
- Java: Maven artifact `gov.in.license:license-authority-sdk`
|
- Java: Maven artifact `gov.in.license:license-authority-sdk`
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
- [Authentication](/developers/authentication) - Token management
|
- [Authentication](/developers/authentication) - Token management
|
||||||
- [Core APIs](/developers/core-apis) - Application and document APIs
|
- [Core APIs](/developers/core-apis) - Application and document APIs
|
||||||
- [Blockchain APIs](/developers/blockchain-apis) - Certificate verification
|
- [Blockchain APIs](/developers/blockchain-apis) - Certificate verification
|
||||||
- [Webhooks](/developers/webhooks) - Event notifications
|
- [Webhooks](/developers/webhooks) - Event notifications
|
||||||
- [Error Handling](/developers/errors) - Error codes and handling
|
- [Error Handling](/developers/errors) - Error codes and handling
|
||||||
|
|||||||
@@ -5,16 +5,16 @@
|
|||||||
### Installation
|
### Installation
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm install @tlas/sdk
|
npm install @license-authority/sdk
|
||||||
```
|
```
|
||||||
|
|
||||||
### Usage
|
### Usage
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
import { TLASClient } from '@tlas/sdk';
|
import { LicenseClient } from '@license-authority/sdk';
|
||||||
|
|
||||||
const client = new TLASClient({
|
const client = new LicenseClient({
|
||||||
baseUrl: 'https://api.tlas.gov.in/v1',
|
baseUrl: 'https://api.license.gov.in/v1',
|
||||||
clientId: 'your-client-id',
|
clientId: 'your-client-id',
|
||||||
clientSecret: 'your-client-secret'
|
clientSecret: 'your-client-secret'
|
||||||
});
|
});
|
||||||
@@ -38,16 +38,16 @@ const verification = await client.certificates.verify('GOA/TRADE/2026/00001');
|
|||||||
### Installation
|
### Installation
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install tlas-sdk
|
pip install license-authority-sdk
|
||||||
```
|
```
|
||||||
|
|
||||||
### Usage
|
### Usage
|
||||||
|
|
||||||
```python
|
```python
|
||||||
from tlas import TLASClient
|
from license_authority import LicenseClient
|
||||||
|
|
||||||
client = TLASClient(
|
client = LicenseClient(
|
||||||
base_url='https://api.tlas.gov.in/v1',
|
base_url='https://api.license.gov.in/v1',
|
||||||
client_id='your-client-id',
|
client_id='your-client-id',
|
||||||
client_secret='your-client-secret'
|
client_secret='your-client-secret'
|
||||||
)
|
)
|
||||||
@@ -72,8 +72,8 @@ result = client.certificates.verify('GOA/TRADE/2026/00001')
|
|||||||
|
|
||||||
```xml
|
```xml
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>gov.in.tlas</groupId>
|
<groupId>gov.in.license</groupId>
|
||||||
<artifactId>tlas-sdk</artifactId>
|
<artifactId>license-authority-sdk</artifactId>
|
||||||
<version>1.0.0</version>
|
<version>1.0.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
```
|
```
|
||||||
@@ -81,8 +81,8 @@ result = client.certificates.verify('GOA/TRADE/2026/00001')
|
|||||||
### Usage
|
### Usage
|
||||||
|
|
||||||
```java
|
```java
|
||||||
TLASClient client = new TLASClient.Builder()
|
LicenseClient client = new LicenseClient.Builder()
|
||||||
.baseUrl("https://api.tlas.gov.in/v1")
|
.baseUrl("https://api.license.gov.in/v1")
|
||||||
.credentials("client-id", "client-secret")
|
.credentials("client-id", "client-secret")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
TLAS sends webhook notifications for key events. Configure webhook endpoints to receive real-time updates.
|
The platform sends webhook notifications for key events. Configure webhook endpoints to receive real-time updates.
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
layout: home
|
layout: home
|
||||||
|
|
||||||
hero:
|
hero:
|
||||||
name: "TLAS"
|
name: "License Authority"
|
||||||
text: "Tokenized License Approval System"
|
text: "Government of Goa, India"
|
||||||
tagline: Enterprise blockchain infrastructure for government license lifecycle management
|
tagline: Blockchain-powered license management for secure, transparent, and tamper-proof government services
|
||||||
actions:
|
actions:
|
||||||
- theme: brand
|
- theme: brand
|
||||||
text: Platform Overview
|
text: Platform Overview
|
||||||
@@ -12,6 +12,9 @@ hero:
|
|||||||
- theme: alt
|
- theme: alt
|
||||||
text: API Documentation
|
text: API Documentation
|
||||||
link: /developers/
|
link: /developers/
|
||||||
|
- theme: alt
|
||||||
|
text: Swagger API
|
||||||
|
link: /swagger-redirect
|
||||||
|
|
||||||
features:
|
features:
|
||||||
- icon: 🔐
|
- icon: 🔐
|
||||||
@@ -44,6 +47,20 @@ features:
|
|||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
|
const apiBaseUrl = import.meta.env.VITE_API_BASE_URL || ''
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
const swaggerLink = document.querySelector('a[href="/swagger-redirect"]')
|
||||||
|
if (swaggerLink) {
|
||||||
|
swaggerLink.href = `${apiBaseUrl}/api/docs`
|
||||||
|
swaggerLink.target = '_blank'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Documentation by Role
|
## Documentation by Role
|
||||||
@@ -60,7 +77,7 @@ features:
|
|||||||
|
|
||||||
## Standards & Compliance
|
## Standards & Compliance
|
||||||
|
|
||||||
TLAS is designed and implemented in accordance with:
|
This platform is designed and implemented in accordance with:
|
||||||
|
|
||||||
| Standard | Scope |
|
| Standard | Scope |
|
||||||
|----------|-------|
|
|----------|-------|
|
||||||
@@ -97,7 +114,7 @@ For detailed architecture documentation, see [Solution Architecture](/overview/s
|
|||||||
|
|
||||||
| Component | Version | Release Date |
|
| Component | Version | Release Date |
|
||||||
|-----------|---------|--------------|
|
|-----------|---------|--------------|
|
||||||
| TLAS Platform | 1.0.0 | February 2026 |
|
| Platform | 1.0.0 | February 2026 |
|
||||||
| API Version | v1 | February 2026 |
|
| API Version | v1 | February 2026 |
|
||||||
| Documentation | 1.0.0 | February 2026 |
|
| Documentation | 1.0.0 | February 2026 |
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Daily full backup (runs at 02:00 UTC)
|
# Daily full backup (runs at 02:00 UTC)
|
||||||
pg_dump -Fc tlas_prod > /backups/tlas_$(date +%Y%m%d).dump
|
pg_dump -Fc license_prod > /backups/license_$(date +%Y%m%d).dump
|
||||||
|
|
||||||
# Hourly WAL archiving
|
# Hourly WAL archiving
|
||||||
archive_command = 'cp %p /backups/wal/%f'
|
archive_command = 'cp %p /backups/wal/%f'
|
||||||
@@ -26,7 +26,7 @@ archive_command = 'cp %p /backups/wal/%f'
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Create backup
|
# Create backup
|
||||||
docker exec postgres pg_dump -U tlas -Fc tlas_prod > backup.dump
|
docker exec postgres pg_dump -U license_app -Fc license_prod > backup.dump
|
||||||
|
|
||||||
# Verify backup
|
# Verify backup
|
||||||
pg_restore --list backup.dump
|
pg_restore --list backup.dump
|
||||||
@@ -41,10 +41,10 @@ pg_restore --list backup.dump
|
|||||||
docker-compose stop api
|
docker-compose stop api
|
||||||
|
|
||||||
# Restore database
|
# Restore database
|
||||||
pg_restore -d tlas_prod -c backup.dump
|
pg_restore -d license_prod -c backup.dump
|
||||||
|
|
||||||
# Verify data
|
# Verify data
|
||||||
psql -d tlas_prod -c "SELECT COUNT(*) FROM applications;"
|
psql -d license_prod -c "SELECT COUNT(*) FROM applications;"
|
||||||
|
|
||||||
# Restart application
|
# Restart application
|
||||||
docker-compose start api
|
docker-compose start api
|
||||||
|
|||||||
@@ -16,9 +16,9 @@
|
|||||||
|----------|-------------|---------|
|
|----------|-------------|---------|
|
||||||
| `DB_HOST` | PostgreSQL host | `postgres.internal` |
|
| `DB_HOST` | PostgreSQL host | `postgres.internal` |
|
||||||
| `DB_PORT` | PostgreSQL port | `5432` |
|
| `DB_PORT` | PostgreSQL port | `5432` |
|
||||||
| `DB_USER` | Database user | `tlas_app` |
|
| `DB_USER` | Database user | `license_app` |
|
||||||
| `DB_PASSWORD` | Database password | `<secure>` |
|
| `DB_PASSWORD` | Database password | `<secure>` |
|
||||||
| `DB_NAME` | Database name | `tlas_prod` |
|
| `DB_NAME` | Database name | `license_prod` |
|
||||||
|
|
||||||
### Authentication
|
### Authentication
|
||||||
|
|
||||||
@@ -53,8 +53,8 @@ server:
|
|||||||
port: 3000
|
port: 3000
|
||||||
cors:
|
cors:
|
||||||
origins:
|
origins:
|
||||||
- https://tlas.gov.in
|
- https://license.gov.in
|
||||||
- https://admin.tlas.gov.in
|
- https://admin.license.gov.in
|
||||||
|
|
||||||
database:
|
database:
|
||||||
pool:
|
pool:
|
||||||
|
|||||||
@@ -60,8 +60,8 @@
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Clone repository
|
# Clone repository
|
||||||
git clone https://github.com/goa-gel/tlas.git
|
git clone https://github.com/goa-gel/license-authority.git
|
||||||
cd tlas
|
cd license-authority
|
||||||
|
|
||||||
# Configure environment
|
# Configure environment
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ sudo apt install docker-compose-plugin
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Clone repository
|
# Clone repository
|
||||||
git clone https://github.com/goa-gel/tlas.git
|
git clone https://github.com/goa-gel/license-authority.git
|
||||||
cd tlas
|
cd license-authority
|
||||||
|
|
||||||
# Copy environment template
|
# Copy environment template
|
||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
@@ -38,9 +38,9 @@ Edit `.env` with required values:
|
|||||||
# Database
|
# Database
|
||||||
DB_HOST=postgres
|
DB_HOST=postgres
|
||||||
DB_PORT=5432
|
DB_PORT=5432
|
||||||
DB_USER=tlas
|
DB_USER=license_app
|
||||||
DB_PASSWORD=<secure-password>
|
DB_PASSWORD=<secure-password>
|
||||||
DB_NAME=tlas
|
DB_NAME=license_db
|
||||||
|
|
||||||
# JWT
|
# JWT
|
||||||
JWT_SECRET=<64-character-random-string>
|
JWT_SECRET=<64-character-random-string>
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
|
|
||||||
Access Grafana dashboards at:
|
Access Grafana dashboards at:
|
||||||
```
|
```
|
||||||
https://monitoring.tlas.gov.in/grafana
|
https://monitoring.license.gov.in/grafana
|
||||||
```
|
```
|
||||||
|
|
||||||
Dashboards available:
|
Dashboards available:
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ add_header Content-Security-Policy "default-src 'self'";
|
|||||||
```bash
|
```bash
|
||||||
# Run weekly
|
# Run weekly
|
||||||
npm audit
|
npm audit
|
||||||
docker scan tlas-api:latest
|
docker scan license-api:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
### Security Updates
|
### Security Updates
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
# Platform Overview
|
# Platform Overview
|
||||||
|
|
||||||
The Tokenized License Approval System (TLAS) is an enterprise platform that transforms government licensing operations through blockchain-based credential issuance and configurable workflow automation.
|
License Authority is an enterprise platform that transforms government licensing operations through blockchain-based credential issuance and configurable workflow automation.
|
||||||
|
|
||||||
## Context
|
## Context
|
||||||
|
|
||||||
Government licensing processes across India handle millions of applications annually. These processes involve multiple stakeholders, complex approval hierarchies, and strict compliance requirements. Traditional systems face persistent challenges that impact both operational efficiency and citizen trust.
|
Government licensing processes across India handle millions of applications annually. These processes involve multiple stakeholders, complex approval hierarchies, and strict compliance requirements. Traditional systems face persistent challenges that impact both operational efficiency and citizen trust.
|
||||||
|
|
||||||
TLAS addresses these challenges through a purpose-built platform that combines workflow automation with cryptographic verification.
|
The platform addresses these challenges through a purpose-built platform that combines workflow automation with cryptographic verification.
|
||||||
|
|
||||||
## Platform Objectives
|
## Platform Objectives
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ TLAS addresses these challenges through a purpose-built platform that combines w
|
|||||||
|
|
||||||
### Tokenized License Certificates
|
### Tokenized License Certificates
|
||||||
|
|
||||||
Every license issued through TLAS is minted as a Non-Fungible Token (NFT) on a private Hyperledger Besu blockchain. This provides:
|
Every license issued through the platform is minted as a Non-Fungible Token (NFT) on a private Hyperledger Besu blockchain. This provides:
|
||||||
|
|
||||||
- **Cryptographic authenticity**: Certificates are digitally signed and verifiable
|
- **Cryptographic authenticity**: Certificates are digitally signed and verifiable
|
||||||
- **Tamper evidence**: Any modification attempt is detectable
|
- **Tamper evidence**: Any modification attempt is detectable
|
||||||
@@ -51,11 +51,11 @@ Administrators and department heads access real-time visibility into:
|
|||||||
|
|
||||||
## Deployment Model
|
## Deployment Model
|
||||||
|
|
||||||
TLAS operates as a multi-tenant platform with department-level isolation:
|
The platform operates as a multi-tenant platform with department-level isolation:
|
||||||
|
|
||||||
```
|
```
|
||||||
┌─────────────────────────────────┐
|
┌─────────────────────────────────┐
|
||||||
│ TLAS Platform │
|
│ License Authority │
|
||||||
├─────────────────────────────────┤
|
├─────────────────────────────────┤
|
||||||
┌───────────┼───────────┬───────────┐ │
|
┌───────────┼───────────┬───────────┐ │
|
||||||
│ │ │ │ │
|
│ │ │ │ │
|
||||||
@@ -77,7 +77,7 @@ TLAS operates as a multi-tenant platform with department-level isolation:
|
|||||||
|
|
||||||
## Integration Points
|
## Integration Points
|
||||||
|
|
||||||
TLAS integrates with government and third-party services:
|
The platform integrates with government and third-party services:
|
||||||
|
|
||||||
| Integration | Purpose | Protocol |
|
| Integration | Purpose | Protocol |
|
||||||
|-------------|---------|----------|
|
|-------------|---------|----------|
|
||||||
@@ -98,7 +98,7 @@ TLAS integrates with government and third-party services:
|
|||||||
|
|
||||||
## Navigation
|
## Navigation
|
||||||
|
|
||||||
- [Problem Statement](/overview/problem) - Challenges addressed by TLAS
|
- [Problem Statement](/overview/problem) - Challenges addressed by this platform
|
||||||
- [Solution Architecture](/overview/solution) - Technical design and components
|
- [Solution Architecture](/overview/solution) - Technical design and components
|
||||||
- [Key Capabilities](/overview/capabilities) - Feature deep-dive
|
- [Key Capabilities](/overview/capabilities) - Feature deep-dive
|
||||||
- [Technology Stack](/overview/technology) - Implementation technologies
|
- [Technology Stack](/overview/technology) - Implementation technologies
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
```
|
```
|
||||||
┌─────────────────────────────────────────────────────────────────────┐
|
┌─────────────────────────────────────────────────────────────────────┐
|
||||||
│ TLAS Platform │
|
│ License Authority Platform │
|
||||||
├─────────────────────────────────────────────────────────────────────┤
|
├─────────────────────────────────────────────────────────────────────┤
|
||||||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||||||
│ │ Applicant │ │ Department │ │ Admin │ │
|
│ │ Applicant │ │ Department │ │ Admin │ │
|
||||||
|
|||||||
@@ -1,13 +1,51 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="40" height="40">
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="40" height="40">
|
||||||
|
<!-- Government of Goa Emblem Style -->
|
||||||
<defs>
|
<defs>
|
||||||
<linearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="100%">
|
<linearGradient id="goldGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||||
<stop offset="0%" style="stop-color:#1e3a5f"/>
|
<stop offset="0%" style="stop-color:#D4AF37"/>
|
||||||
<stop offset="100%" style="stop-color:#2563eb"/>
|
<stop offset="50%" style="stop-color:#C5A028"/>
|
||||||
|
<stop offset="100%" style="stop-color:#B8962A"/>
|
||||||
</linearGradient>
|
</linearGradient>
|
||||||
</defs>
|
</defs>
|
||||||
<rect x="10" y="10" width="80" height="80" rx="12" fill="url(#grad)"/>
|
|
||||||
<path d="M30 35 L50 25 L70 35 L70 65 L50 75 L30 65 Z" fill="none" stroke="white" stroke-width="3"/>
|
<!-- Circular border -->
|
||||||
<circle cx="50" cy="50" r="8" fill="white"/>
|
<circle cx="50" cy="50" r="46" fill="none" stroke="#1a365d" stroke-width="3"/>
|
||||||
<path d="M50 42 L50 35" stroke="white" stroke-width="2"/>
|
<circle cx="50" cy="50" r="42" fill="#1a365d"/>
|
||||||
<path d="M50 58 L50 65" stroke="white" stroke-width="2"/>
|
|
||||||
|
<!-- Ashoka Chakra (24 spokes wheel) -->
|
||||||
|
<circle cx="50" cy="50" r="18" fill="none" stroke="url(#goldGrad)" stroke-width="2.5"/>
|
||||||
|
<circle cx="50" cy="50" r="5" fill="url(#goldGrad)"/>
|
||||||
|
|
||||||
|
<!-- 24 spokes simplified to 12 for clarity -->
|
||||||
|
<g stroke="url(#goldGrad)" stroke-width="1.5">
|
||||||
|
<line x1="50" y1="32" x2="50" y2="38"/>
|
||||||
|
<line x1="50" y1="62" x2="50" y2="68"/>
|
||||||
|
<line x1="32" y1="50" x2="38" y2="50"/>
|
||||||
|
<line x1="62" y1="50" x2="68" y2="50"/>
|
||||||
|
<line x1="37.3" y1="37.3" x2="41.5" y2="41.5"/>
|
||||||
|
<line x1="58.5" y1="58.5" x2="62.7" y2="62.7"/>
|
||||||
|
<line x1="62.7" y1="37.3" x2="58.5" y2="41.5"/>
|
||||||
|
<line x1="41.5" y1="58.5" x2="37.3" y2="62.7"/>
|
||||||
|
<line x1="43.1" y1="33.5" x2="45.2" y2="39"/>
|
||||||
|
<line x1="54.8" y1="61" x2="56.9" y2="66.5"/>
|
||||||
|
<line x1="56.9" y1="33.5" x2="54.8" y2="39"/>
|
||||||
|
<line x1="45.2" y1="61" x2="43.1" y2="66.5"/>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<!-- Three lions silhouette (simplified) -->
|
||||||
|
<g fill="url(#goldGrad)">
|
||||||
|
<!-- Center lion head -->
|
||||||
|
<ellipse cx="50" cy="22" rx="8" ry="6"/>
|
||||||
|
<rect x="46" y="26" width="8" height="4" rx="1"/>
|
||||||
|
<!-- Left lion suggestion -->
|
||||||
|
<ellipse cx="36" cy="24" rx="5" ry="4"/>
|
||||||
|
<!-- Right lion suggestion -->
|
||||||
|
<ellipse cx="64" cy="24" rx="5" ry="4"/>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<!-- Base/Abacus -->
|
||||||
|
<rect x="30" y="76" width="40" height="4" rx="1" fill="url(#goldGrad)"/>
|
||||||
|
|
||||||
|
<!-- Text: GOA -->
|
||||||
|
<text x="50" y="88" font-family="Arial, sans-serif" font-size="8" font-weight="bold" fill="url(#goldGrad)" text-anchor="middle">GOA</text>
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 651 B After Width: | Height: | Size: 2.0 KiB |
@@ -5,8 +5,8 @@
|
|||||||
| Environment | Purpose | URL |
|
| Environment | Purpose | URL |
|
||||||
|-------------|---------|-----|
|
|-------------|---------|-----|
|
||||||
| Development | Local testing | localhost:4200 |
|
| Development | Local testing | localhost:4200 |
|
||||||
| Staging | Pre-production validation | staging.tlas.gov.in |
|
| Staging | Pre-production validation | staging.license.gov.in |
|
||||||
| Production | Live system | tlas.gov.in |
|
| Production | Live system | license.gov.in |
|
||||||
|
|
||||||
## Test Categories
|
## Test Categories
|
||||||
|
|
||||||
@@ -47,12 +47,12 @@ Verify security controls:
|
|||||||
|
|
||||||
| Role | Username | Password |
|
| Role | Username | Password |
|
||||||
|------|----------|----------|
|
|------|----------|----------|
|
||||||
| Admin | admin@tlas.gov.in | (contact IT) |
|
| Admin | admin@license.gov.in | (contact IT) |
|
||||||
| Department | dept.test@tlas.gov.in | (contact IT) |
|
| Department | dept.test@license.gov.in | (contact IT) |
|
||||||
| Applicant | (use DigiLocker sandbox) | - |
|
| Applicant | (use DigiLocker sandbox) | - |
|
||||||
|
|
||||||
## Reporting Issues
|
## Reporting Issues
|
||||||
|
|
||||||
Report test failures to:
|
Report test failures to:
|
||||||
- Email: qa@tlas.gov.in
|
- Email: qa@license.gov.in
|
||||||
- Include: Steps to reproduce, expected vs actual result, screenshots
|
- Include: Steps to reproduce, expected vs actual result, screenshots
|
||||||
|
|||||||
@@ -23,8 +23,17 @@ async function bootstrap(): Promise<void> {
|
|||||||
const corsOrigin = configService.get<string>('app.corsOrigin', 'http://localhost:3000');
|
const corsOrigin = configService.get<string>('app.corsOrigin', 'http://localhost:3000');
|
||||||
const swaggerEnabled = configService.get<boolean>('app.swaggerEnabled', true);
|
const swaggerEnabled = configService.get<boolean>('app.swaggerEnabled', true);
|
||||||
|
|
||||||
// Security middleware
|
// Security middleware - configure helmet based on environment
|
||||||
app.use(helmet());
|
const isProduction = configService.get<string>('NODE_ENV') === 'production';
|
||||||
|
const useHttps = configService.get<boolean>('app.useHttps', false);
|
||||||
|
|
||||||
|
app.use(helmet({
|
||||||
|
contentSecurityPolicy: isProduction ? undefined : false,
|
||||||
|
crossOriginEmbedderPolicy: false,
|
||||||
|
crossOriginOpenerPolicy: false,
|
||||||
|
crossOriginResourcePolicy: false,
|
||||||
|
hsts: useHttps, // Only enable HSTS when using HTTPS
|
||||||
|
}));
|
||||||
app.use(compression());
|
app.use(compression());
|
||||||
|
|
||||||
// CORS configuration - Allow configured origin plus local development origins
|
// CORS configuration - Allow configured origin plus local development origins
|
||||||
@@ -33,6 +42,8 @@ async function bootstrap(): Promise<void> {
|
|||||||
'http://localhost:4200',
|
'http://localhost:4200',
|
||||||
'http://localhost:3000',
|
'http://localhost:3000',
|
||||||
'http://localhost:8080',
|
'http://localhost:8080',
|
||||||
|
'http://104.211.94.205:3001',
|
||||||
|
'http://104.211.94.205',
|
||||||
].filter(Boolean);
|
].filter(Boolean);
|
||||||
app.enableCors({
|
app.enableCors({
|
||||||
origin: (origin, callback) => {
|
origin: (origin, callback) => {
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ import { BlockchainExplorerMiniComponent } from '../../shared/components';
|
|||||||
</div>
|
</div>
|
||||||
<div class="header-text">
|
<div class="header-text">
|
||||||
<h1>Admin Portal</h1>
|
<h1>Admin Portal</h1>
|
||||||
<p class="subtitle">Manage the Goa GEL Blockchain Platform</p>
|
<p class="subtitle">Manage the License Authority Platform</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ import { AdminStatsDto } from '../../../api/models';
|
|||||||
<div class="welcome-text">
|
<div class="welcome-text">
|
||||||
<span class="greeting">Admin Dashboard</span>
|
<span class="greeting">Admin Dashboard</span>
|
||||||
<h1>Platform Overview</h1>
|
<h1>Platform Overview</h1>
|
||||||
<p class="subtitle">Monitor and manage the Goa GEL Blockchain Platform</p>
|
<p class="subtitle">Monitor and manage the License Authority Platform</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="quick-actions">
|
<div class="quick-actions">
|
||||||
<button mat-raised-button class="action-btn primary" routerLink="/admin">
|
<button mat-raised-button class="action-btn primary" routerLink="/admin">
|
||||||
|
|||||||
@@ -96,8 +96,8 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="brand-text">
|
<div class="brand-text">
|
||||||
<span class="brand-name">Government of Goa</span>
|
<span class="brand-name">License Authority</span>
|
||||||
<span class="brand-subtitle">Blockchain e-Licensing Platform</span>
|
<span class="brand-subtitle">Government of Goa, India</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="nav-status">
|
<div class="nav-status">
|
||||||
@@ -186,7 +186,7 @@
|
|||||||
<!-- Footer -->
|
<!-- Footer -->
|
||||||
<footer class="landing-footer" role="contentinfo">
|
<footer class="landing-footer" role="contentinfo">
|
||||||
<div class="footer-content">
|
<div class="footer-content">
|
||||||
<p class="copyright">© {{ currentYear }} Government of Goa, India. All rights reserved.</p>
|
<p class="copyright">© {{ currentYear }} License Authority - Government of Goa, India. All rights reserved.</p>
|
||||||
<div class="footer-links">
|
<div class="footer-links">
|
||||||
<a href="/policies" aria-label="Website Policies">Policies</a>
|
<a href="/policies" aria-label="Website Policies">Policies</a>
|
||||||
<a href="/terms" aria-label="Terms and Conditions">Terms</a>
|
<a href="/terms" aria-label="Terms and Conditions">Terms</a>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// =============================================================================
|
// =============================================================================
|
||||||
// GOA GEL LANDING PAGE - World-Class Blockchain Government Portal
|
// LICENSE AUTHORITY LANDING PAGE - Government of Goa, India
|
||||||
// Immersive, Graphical, Premium Design
|
// Immersive, Graphical, Premium Design
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
|
|
||||||
|
|||||||
@@ -2,11 +2,11 @@
|
|||||||
<html lang="en" dir="ltr">
|
<html lang="en" dir="ltr">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>Goa GEL - Government e-Licensing Platform | Government of Goa</title>
|
<title>License Authority | Government of Goa, India</title>
|
||||||
<base href="/">
|
<base href="/">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<meta name="description" content="Official Government of Goa Blockchain-based Document Verification and e-Licensing Platform. Apply for licenses, track applications, and verify documents securely.">
|
<meta name="description" content="License Authority - Official Government of Goa blockchain-powered license management platform. Apply for licenses, track applications, and verify documents securely.">
|
||||||
<meta name="keywords" content="Government of Goa, e-Licensing, Blockchain, License, Permit, Government Services, Digital India">
|
<meta name="keywords" content="License Authority, Government of Goa, India, Blockchain, License, Permit, Government Services, Digital India">
|
||||||
<meta name="author" content="Government of Goa">
|
<meta name="author" content="Government of Goa">
|
||||||
<meta name="robots" content="index, follow">
|
<meta name="robots" content="index, follow">
|
||||||
<meta name="theme-color" content="#1D0A69">
|
<meta name="theme-color" content="#1D0A69">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<meta name="accessibility" content="WCAG 2.1 Level AA">
|
<meta name="accessibility" content="WCAG 2.1 Level AA">
|
||||||
|
|
||||||
<link rel="icon" type="image/x-icon" href="favicon.ico">
|
<link rel="icon" type="image/x-icon" href="favicon.ico">
|
||||||
<link rel="canonical" href="https://gel.goa.gov.in">
|
<link rel="canonical" href="https://license.goa.gov.in">
|
||||||
|
|
||||||
<!-- Google Fonts: Noto Sans (DBIM Mandatory) + Material Icons -->
|
<!-- Google Fonts: Noto Sans (DBIM Mandatory) + Material Icons -->
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
<!-- Noscript fallback for accessibility -->
|
<!-- Noscript fallback for accessibility -->
|
||||||
<noscript>
|
<noscript>
|
||||||
<div style="padding: 20px; text-align: center; background: #FFC107; color: #150202;">
|
<div style="padding: 20px; text-align: center; background: #FFC107; color: #150202;">
|
||||||
JavaScript is required to use the Government of Goa e-Licensing Platform.
|
JavaScript is required to use the License Authority platform.
|
||||||
Please enable JavaScript in your browser settings.
|
Please enable JavaScript in your browser settings.
|
||||||
</div>
|
</div>
|
||||||
</noscript>
|
</noscript>
|
||||||
|
|||||||
Reference in New Issue
Block a user