Commit graph

1,804 commits

Author SHA1 Message Date
10775fe36c fix: give ErrAuthUserNotFound a distinct message from ErrUserNotFound
Some checks failed
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is failing
v0.7.1
Both sentinels had the identical message "user not found", making them
indistinguishable in logs and error responses. Rename the auth variant
to "auth user not found" so debugging and error matching are unambiguous.
2026-04-16 02:14:55 +07:00
1977508108 tidy: delete User record when cleaning up unverified AuthUsers
When TidyUsers removes an AuthUser with unverified email and no login
after 7 days, the corresponding User record was left orphaned in the
database. Now DeleteUser is called before dropping the AuthUser.
2026-04-16 02:14:55 +07:00
exyone
9a3f834129 Improve Chinese translation and fix English translation errors (manually translated)
Add Esperanto, Manchu, and Tibetan translations (AI-assisted with manual review)
2026-04-16 02:14:18 +07:00
90e4d30ae4 web: Make images occupy the background
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-14 09:08:47 +07:00
3163a10c45 web: add collapsible domain groups with persistent state
All checks were successful
continuous-integration/drone/push Build is passing
Add click-to-collapse and double-click-to-solo behavior on group
headers in ZoneList, with a chevron indicator. Collapsed state is
persisted in localStorage and cleared on login/logout.
2026-04-14 05:08:01 +07:00
197fd9c796 Redesign UI: modernize layout, login, resolver, and some components
Refresh the overall visual design across the frontend: floating labels
and centered card layout for auth pages, animated sidebar+results view
for the resolver, polished dropdown menus, toasts, and feedback widget,
and cleaner global styles (navbar shadow, border, transitions).
2026-04-14 05:08:01 +07:00
52e176c73a chore(deps): lock file maintenance
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-13 00:12:13 +00:00
effb588d3c fix: use one-way binding for record line rr prop
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-11 12:25:10 +07:00
e73ed40d5c fix: use validate instead of binding for zero-value fields
Switch ServiceMeta.Domain, ServiceMeta.Ttl, ServiceMeta.NbResources,
and ZoneMeta.DefaultTTL from binding:"required" to validate:"required".
This keeps them marked as required in the OpenAPI spec (swaggo reads
both tags) without gin rejecting valid zero values (0 for uint32,
"" for root domain).
2026-04-11 12:25:10 +07:00
99edd8a66c fix: use DomainCreationInput for domain creation endpoint and service
CreateDomain now takes a DomainCreationInput and returns the created
Domain, so the controller no longer needs to construct an intermediate
Domain struct and the response includes the server-assigned fields.

Fixes: https://github.com/happyDomain/happydomain/issues/44
2026-04-11 12:25:10 +07:00
5354c861c2 Improve README 2026-04-11 11:19:56 +07:00
4989e38fbc fix: migration: use safe type assertions in SRV record migration
Avoid potential panics from nil or missing fields when migrating SRV
records by using comma-ok type assertions and guarding against empty
name/proto values.
2026-04-11 11:19:48 +07:00
692a549437 tidy: drop auth users with unverified email and no login after one week 2026-04-11 03:21:44 +07:00
384a749b8c inmemory: remove unused fields and simplify test setup
All checks were successful
continuous-integration/drone/push Build is passing
The InMemoryStorage struct carried per-entity maps and fields that were
never used: all storage goes through the generic KV data map. Strip the
struct down to just mu + data, and update tests to use
inmemory.Instantiate() instead of manually wrapping with kv.NewKVDatabase.
2026-04-11 00:18:31 +07:00
1ae99b4e2e Update go deps and tidy
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-10 19:25:09 +07:00
8a65edc50a fix(deps): update module golang.org/x/crypto to v0.50.0
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-09 17:10:17 +00:00
c7d424725a fix(deps): update module github.com/coreos/go-oidc/v3 to v3.18.0
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-09 12:14:24 +00:00
4c6a0ae502 chore(deps): update dependency go to v1.26.2
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-09 11:15:04 +00:00
a31f78cd48 ci: sync frontend package version with git tag on tag builds
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-07 15:30:21 +07:00
de6eb2b3b4 fix: add missing fields to zone mock in thiszone test
Some checks failed
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is failing
v0.7.0
The mock zone object was missing `services` and `last_modified` fields
required by the response transformer, causing Object.keys to fail on
undefined.
2026-04-05 22:23:52 +07:00
8e2e38757f fix: guard against undefined entry in domainLink helper
Some checks failed
continuous-integration/drone/push Build is failing
Add null checks to prevent runtime errors when the domain index entry
does not exist for the given identifier.
2026-04-05 22:08:46 +07:00
6dfe3f9d42 ci: run svelte-kit sync before generate:api in Drone pipelines
openapi-ts v0.95.0 now requires a valid tsconfig chain to resolve.
Since tsconfig.json extends .svelte-kit/tsconfig.json which is generated,
we need to run svelte-kit sync first to create it.
2026-04-05 22:07:44 +07:00
397e19b745 fix(deps): update module @hey-api/openapi-ts to v0.95.0
Some checks failed
continuous-integration/drone/push Build is failing
2026-04-04 22:22:06 +07:00
cae8658f61 web: Tighten TypeScript types and fix toast API across frontend
Replace `any` with precise types (unknown, Record<string, any>, specific
interfaces) in props, function signatures, and index signatures. Introduce
ServiceWithValue to bridge SDK's HappydnsService.Service from unknown to
its runtime shape. Simplify updateDomain to take explicit id + body params.
2026-04-04 22:22:06 +07:00
f92cab2abf web: Prefer pointer as grab in ZoneList 2026-04-04 22:16:27 +07:00
30506e9731 web: Fix state_referenced_locally warning in ZoneList
Replace $state + $effect pattern with $derived for localDomains to properly react to prop changes. Also reformat genGroups signature and sort callback indentation.
2026-04-04 22:16:27 +07:00
15f014cf5a web: Replace null defaults with undefined for optional props
Aligns optional prop types and defaults with TypeScript/Svelte 5 idioms
by dropping explicit null in favor of undefined throughout components.
2026-04-04 22:16:27 +07:00
b2e85cb9f2 web: Fix variable not declared as $state 2026-04-04 22:16:27 +07:00
2679d0476e web: Fix a11y role 2026-04-04 22:16:27 +07:00
fa47e9b4b1 web: Replace ServiceCombined with HappydnsService SDK type across frontend 2026-04-04 22:16:27 +07:00
17c9e88903 web: Derive local model types from SDK-generated types to strengthen type checking
Replace hand-written interfaces with types derived from SDK-generated types
(alias, Required<>, Omit<> & extend) so the two type systems stay in sync.
This eliminates all `as any` casts and reduces `as unknown as` casts from 13
to 9 in the API wrapper layer.
2026-04-04 22:16:27 +07:00
47d7893b91 Add readonly struct tags to immutable model fields
Mark fields like IDs, timestamps, zone_history, and settings as
readonly in swagger documentation to indicate they are not user-writable.
2026-04-04 22:05:28 +07:00
e09044388b web: Move delete_in_progress UI state from Session model to component
Replace the delete_in_progress field on the Session interface with a
local Set<string> in SessionsManager, keeping model types pure.
2026-04-04 22:05:28 +07:00
3e3b23a0c4 Replace any types with proper TypeScript types in web API and model files 2026-04-04 22:05:28 +07:00
e30d1a5f50 Add is_auth_user endpoint in swagger doc and remove custom client call in frontend 2026-04-04 22:05:28 +07:00
4f3a1d7f7b Add format:"date-time" struct tags to time.Time model fields 2026-04-04 22:05:28 +07:00
7081f3d571 Add binding:required tags and narrow input types for API endpoints
Introduce dedicated input types (DomainUpdateInput, SessionInput) to limit
writable fields on update endpoints, and add binding:required tags across
model structs to improve validation and Swagger documentation accuracy.
2026-04-04 22:05:28 +07:00
899f3e0989 Fix Swagger annotations in controllers
- Fix typos in session.go (@Prodsce -> @Produce, @Ssccess -> @Success)
- Add missing @Param body annotations for CreateSession and UpdateSession
- Update ApplyZoneForm param description to reference correct type
- Add swaggertype tags to Identifier slices for correct OpenAPI output
2026-04-04 22:05:28 +07:00
c7c674f2ae fix(deps): update module github.com/lib/pq to v1.12.3
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-03 16:11:03 +00:00
4efff8b0a0 fix(deps): update module github.com/lib/pq to v1.12.2
All checks were successful
continuous-integration/drone/push Build is passing
2026-04-02 11:11:08 +00:00
e9db206e78 Add context.Context to ProviderUsecase and DomainUsecase interfaces
All checks were successful
continuous-integration/drone/push Build is passing
Propagate context.Context as first parameter through all provider and
domain usecase interface methods that didn't already have it. This is
a prerequisite for the upcoming secret management layer, which needs
request-scoped context to carry session-derived encryption keys.
2026-03-30 21:54:54 +07:00
af517907d6 Fix OPENPGPKEY/SMIMEA hash to use SHA-256 truncated per RFC 7929/8162
All checks were successful
continuous-integration/drone/push Build is passing
Replace sha256.Sum224 (SHA-224 algorithm) with SHA-256 truncated to 28
bytes, matching what RFCs 7929 and 8162 actually specify and what the
frontend was already computing correctly. Also wrap GetRecords errors
with the service type name for easier diagnosis.
2026-03-30 21:54:54 +07:00
c945ba30ed Use rtypecontrol.NewRecordConfigFromStruct for modern DNS record types in DNSControlRRtoRC
Fix panic on DS records by importing dnscontrol rtype package

For record types registered in rtypecontrol.Func, bypass dnsrr.RRtoRC and
call rtypecontrol.NewRecordConfigFromStruct directly, passing the record as
the struct argument. This ensures correct handling of modern rtypes (DS, RP,
etc.) without relying on dnsrr's internal dispatch. Legacy types fall back to
the existing dnsrr.RRtoRC path.

Import _ "github.com/StackExchange/dnscontrol/v4/pkg/rtype" to trigger
init() registration of DS and RP as modern types. Without this import,
dnsrr.RRtoRC would panic with "DS should be handled as modern type".
2026-03-30 21:54:29 +07:00
e7b1f4780e provider_settings: Only update content + type and comment
All checks were successful
continuous-integration/drone/push Build is passing
The ProviderMessage does not contain necesseraly all
metadata. Moreover some metadata shouldn't be updated (Owner, Id,
...). So keep the modifications to the minimum.
2026-03-30 19:37:48 +07:00
987c1bb72e Add IONOS libdns provider implementations
All checks were successful
continuous-integration/drone/push Build is passing
2026-03-30 11:58:03 +07:00
25f37af35d Add libdns provider adapter for supporting libdns-based DNS providers
Introduce a new adapter layer that allows happyDomain to use providers
from the libdns ecosystem alongside the existing dnscontrol providers.
The adapter implements ProviderActuator by converting between miekg/dns
and libdns record formats, reusing the existing DNSControl diff engine
for computing corrections, and generating executable correction functions
that call libdns Append/Delete/Set methods.
2026-03-30 11:58:02 +07:00
e1eb4dec90 Fix zone parenting after deploy 2026-03-30 11:58:02 +07:00
d298992b63 Re-fetch zone after deploy to capture actual SOA serial
For providers that manage SOA serials (like AXFRDDNS), re-fetch the
zone after applying corrections to capture the real published state.
The snapshot and WIP zone's Origin service are both updated with the
actual serial.

This is gated on a new "manages-soa-serial" capability, preserving
the existing behavior for providers that abstract SOA handling.

Closes: https://github.com/happyDomain/happydomain/issues/35
2026-03-30 11:58:02 +07:00
aba39001d8 New helper to check provider capability
Some checks are pending
continuous-integration/drone/push Build is running
2026-03-30 11:58:02 +07:00
d600bbcbd9 web: Refactor domain Table component to improve single responsibility
Extract DomainTableRow and ProviderLink components from the monolithic
Table.svelte, which was mixing table structure, provider name resolution,
row navigation, and action button logic into a single component.
2026-03-30 11:58:02 +07:00