106 lines
3.1 KiB
Markdown
106 lines
3.1 KiB
Markdown
# NodeLoc (domain.nodeloc.com) Reference
|
|
|
|
## Provider Details
|
|
|
|
- **Service**: Free subdomains by NodeLoc community
|
|
- **URL**: https://domain.nodeloc.com
|
|
- **Root domains**: loc.cc, and others
|
|
- **Nameservers**: ns1.nodelook.com, ns2.nodelook.com (IP: [REDACTED-IP])
|
|
- **DNS backend**: PowerDNS (has "Sync from PowerDNS" button)
|
|
- **Health checks**: Automatic — domain gets suspended if health check fails for extended period
|
|
|
|
## API Endpoints
|
|
|
|
| Method | Endpoint | Auth | Purpose |
|
|
|--------|----------|------|---------|
|
|
| POST | `/api/auth/login` | None | Login, returns JWT token |
|
|
| GET | `/api/domains` | Bearer | List user's domains |
|
|
| GET | `/api/domains` + query | Bearer | Domain details |
|
|
|
|
DNS record management has NO REST API. Must use browser UI.
|
|
|
|
## Login Response Shape
|
|
|
|
```json
|
|
{
|
|
"message": "success.login",
|
|
"token": "[REDACTED-JWT]...<full JWT>",
|
|
"user": {
|
|
"id": 3375,
|
|
"username": "[REDACTED-NAME]",
|
|
"email": "user@example.com",
|
|
"email_verified": false,
|
|
"is_admin": false,
|
|
"user_level": "normal",
|
|
"domain_quota": 2,
|
|
"invite_code": "...",
|
|
"total_invites": 0,
|
|
"successful_invites": 0,
|
|
"status": "active",
|
|
"created_at": "2026-07-16T10:39:49.944849Z",
|
|
"last_login_at": "..."
|
|
}
|
|
}
|
|
```
|
|
|
|
JWT is HS256. Payload: `{"user_id":...,"username":"...","email":"...","is_admin":false,"exp":...,"iat":...}`
|
|
|
|
## Domain Response Shape
|
|
|
|
```json
|
|
{
|
|
"domains": [{
|
|
"id": 4901,
|
|
"full_domain": "[REDACTED-NAME].loc.cc",
|
|
"root_domain": {"id": 1, "domain": "loc.cc", ...},
|
|
"nameservers": "[\"ns1.nodelook.com\",\"ns2.nodelook.com\"]",
|
|
"registered_at": "2026-07-16T10:52:26.925642Z",
|
|
"expires_at": "2036-07-16T10:52:26.925642Z",
|
|
"dns_synced": false,
|
|
"auto_renew": false,
|
|
"first_failed_at": "2026-07-16T16:03:45.845029Z"
|
|
}]
|
|
}
|
|
```
|
|
|
|
## DNS Record States
|
|
|
|
| Status | Chinese | Meaning |
|
|
|--------|---------|---------|
|
|
| `已同步` | Synced | Record active and propagated |
|
|
| `待处理` | Pending | Record submitted but not yet synced to PowerDNS |
|
|
|
|
## Domain Statuses
|
|
|
|
| Status | Meaning |
|
|
|--------|---------|
|
|
| `suspended` | Health check failed repeatedly. Domain will be auto-deleted in ~19 days if not fixed. |
|
|
| `active` | Normal operation |
|
|
|
|
## Health Check Behavior
|
|
|
|
- Runs periodically against the domain
|
|
- Checks if the domain resolves AND responds
|
|
- After repeated failures: domain gets suspended
|
|
- After suspension: ~19 days until auto-deletion
|
|
- Adding a valid A record + making the server respond fixes the health check
|
|
|
|
## Browser UI Navigation
|
|
|
|
1. Login → Dashboard (`/`)
|
|
2. "我的域名" → Domain list
|
|
3. Click domain → Domain detail (status, health, DNS button)
|
|
4. "DNS" button → DNS management page with record table
|
|
5. "添加 DNS 记录" → Add record dialog
|
|
|
|
## DNS Record Form
|
|
|
|
- Name: `@` (root) or subdomain name
|
|
- Type: A, AAAA, CNAME, ALIAS, MX, TXT, NS, SRV, CAA
|
|
- Value: IP or hostname
|
|
- TTL: seconds (default 3600)
|
|
- Button: "创建" (Create) — may require JS click workaround
|
|
|
|
## Expiration
|
|
|
|
Domains are free and expire in 20 years (2036 for domains registered in 2026). Auto-renewal is off by default. |