feat: per-site SSL email and error display
This commit is contained in:
@@ -26,9 +26,10 @@ type SiteWithDomain struct {
|
||||
SSLID int64 `json:"ssl_id,omitempty"`
|
||||
SSLStatus string `json:"ssl_status,omitempty"`
|
||||
SSLError string `json:"ssl_error,omitempty"`
|
||||
SSLEmail string `json:"ssl_email,omitempty"`
|
||||
}
|
||||
|
||||
func (r *SiteRepository) Create(ctx context.Context, serverID, ownerID int64, name, documentRoot, phpVersion, domain string, issueSSL bool) (*SiteWithDomain, error) {
|
||||
func (r *SiteRepository) Create(ctx context.Context, serverID, ownerID int64, name, documentRoot, phpVersion, domain, sslEmail string, issueSSL bool) (*SiteWithDomain, error) {
|
||||
tx, err := r.pool.Begin(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -36,8 +37,8 @@ func (r *SiteRepository) Create(ctx context.Context, serverID, ownerID int64, na
|
||||
defer tx.Rollback(ctx)
|
||||
|
||||
const siteQ = `
|
||||
INSERT INTO sites (server_id, owner_id, name, document_root, php_version, status)
|
||||
VALUES ($1, $2, $3, $4, $5, 'active')
|
||||
INSERT INTO sites (server_id, owner_id, name, document_root, php_version, ssl_email, status)
|
||||
VALUES ($1, $2, $3, $4, $5, NULLIF($6, ''), 'active')
|
||||
RETURNING id, uuid, server_id, owner_id, name, document_root, php_version, status,
|
||||
settings, disk_quota_mb, created_at, updated_at
|
||||
`
|
||||
@@ -46,7 +47,7 @@ func (r *SiteRepository) Create(ctx context.Context, serverID, ownerID int64, na
|
||||
if phpVersion != "" {
|
||||
phpVer = &phpVersion
|
||||
}
|
||||
err = tx.QueryRow(ctx, siteQ, serverID, ownerID, name, documentRoot, phpVer).Scan(
|
||||
err = tx.QueryRow(ctx, siteQ, serverID, ownerID, name, documentRoot, phpVer, sslEmail).Scan(
|
||||
&s.ID, &s.UUID, &s.ServerID, &s.OwnerID, &s.Name, &s.DocumentRoot, &s.PHPVersion, &s.Status,
|
||||
&s.Settings, &s.DiskQuotaMB, &s.CreatedAt, &s.UpdatedAt,
|
||||
)
|
||||
@@ -64,7 +65,7 @@ func (r *SiteRepository) Create(ctx context.Context, serverID, ownerID int64, na
|
||||
return nil, fmt.Errorf("create domain: %w", err)
|
||||
}
|
||||
|
||||
result := &SiteWithDomain{Site: s, PrimaryDomain: domain, DomainID: domainID}
|
||||
result := &SiteWithDomain{Site: s, PrimaryDomain: domain, DomainID: domainID, SSLEmail: sslEmail}
|
||||
|
||||
if issueSSL {
|
||||
const sslQ = `
|
||||
@@ -110,7 +111,8 @@ const siteListQuery = `
|
||||
COALESCE(d.domain::text, ''),
|
||||
COALESCE(d.id, 0),
|
||||
COALESCE(ssl.status::text, 'none'),
|
||||
COALESCE(ssl.error_message, '')
|
||||
COALESCE(ssl.error_message, ''),
|
||||
COALESCE(s.ssl_email::text, '')
|
||||
FROM sites s
|
||||
LEFT JOIN domains d ON d.site_id = s.id AND d.is_primary = true
|
||||
LEFT JOIN LATERAL (
|
||||
@@ -127,7 +129,7 @@ func scanSiteList(rows pgx.Rows) ([]SiteWithDomain, error) {
|
||||
&item.ID, &item.UUID, &item.ServerID, &item.OwnerID, &item.Name, &item.DocumentRoot,
|
||||
&item.PHPVersion, &item.Status, &item.Settings, &item.DiskQuotaMB,
|
||||
&item.CreatedAt, &item.UpdatedAt, &item.PrimaryDomain,
|
||||
&item.DomainID, &item.SSLStatus, &item.SSLError,
|
||||
&item.DomainID, &item.SSLStatus, &item.SSLError, &item.SSLEmail,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -137,6 +139,23 @@ func scanSiteList(rows pgx.Rows) ([]SiteWithDomain, error) {
|
||||
return list, rows.Err()
|
||||
}
|
||||
|
||||
func (r *SiteRepository) UpdateSSLEmail(ctx context.Context, siteID int64, email string) error {
|
||||
_, err := r.pool.Exec(ctx, `UPDATE sites SET ssl_email = $2, updated_at = now() WHERE id = $1`, siteID, email)
|
||||
return err
|
||||
}
|
||||
|
||||
func (r *SiteRepository) GetSSLEmail(ctx context.Context, siteID int64) (string, error) {
|
||||
var email *string
|
||||
err := r.pool.QueryRow(ctx, `SELECT ssl_email::text FROM sites WHERE id = $1`, siteID).Scan(&email)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if email == nil {
|
||||
return "", nil
|
||||
}
|
||||
return *email, nil
|
||||
}
|
||||
|
||||
type PHPVersionRepository struct {
|
||||
pool *pgxpool.Pool
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user