Commit graph

1,792 commits

Author SHA1 Message Date
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
e103d2262a Add DNS propagation time tracking per service
After publishing zone corrections, compute and store a PropagatedAt
timestamp on each affected service indicating when old cached records
will have expired. For updated/deleted services, this is publish_time +
old service TTL. For new services, it uses the SOA minimum TTL
(negative cache duration), falling back to the zone's DefaultTTL.

The propagation detection reuses the same service matching technique as
ReassociateMetadata (subdomain + type + ServiceRDataHash). Both the
published snapshot and the WIP zone are stamped.
2026-03-30 11:58:02 +07:00
ca9dc450c3 chore(deps): lock file maintenance
All checks were successful
continuous-integration/drone/push Build is passing
2026-03-30 00:12:53 +00:00
021d8bd8f9 Fix RegisterDNSControlProviderAdapter to preserve pre-set capabilities
All checks were successful
continuous-integration/drone/push Build is passing
Change infos.Capabilities to append instead of overwrite
2026-03-28 21:45:42 +07:00
8adc08b4c0 Remove redundant work in ACME and server analyzers 2026-03-28 21:42:17 +07:00
3f2c923754 Fix GenComment showing only NS count instead of SOA details 2026-03-28 21:42:17 +07:00
1523b549d2 fix: propagate UseRR errors consistently across all service analyzers
Several service analyzers were silently discarding errors returned by
a.UseRR(), unlike txt.go and others that properly checked them. This
could mask issues like double-claimed records during zone analysis.
2026-03-28 21:42:17 +07:00
e95ecd6671 Fix port/protocol not extracted from existing TLSA and SRV records 2026-03-28 21:42:17 +07:00
ea0324c3a7 Fix XMPP editor not displaying existing records 2026-03-28 21:42:17 +07:00
d06b73c3dd Fix RFC6186 editor not displaying records and failing on new service 2026-03-28 21:42:17 +07:00
8c9a38166b web: pause toast timers when page is not visible
Use the Page Visibility API to pause toast countdowns and progress bar
animations when the tab is hidden, and resume them when the user returns.
New toasts created while the page is hidden also start in a paused state.
2026-03-28 21:42:17 +07:00
e89a483725 web: add missing timeouts to toast notifications
Add timeout values to the 3 remaining toast calls that lacked them:
- Session error toast on redirect to login (10s)
- Account deleted success toast (5s)
- Database tidy error toast in web-admin (10s)
2026-03-28 21:42:17 +07:00
074e5e864e web: Add progress bar and improve pause/resume behavior
Add a visual progress bar that shrinks over the toast timeout duration,
pause/resume the timer on hover.
2026-03-28 21:42:17 +07:00