Skip to content

Commit e524831

Browse files
authored
Testing for TLS package (#65)
* test: unit tests for TLS package * fix: typo in configuration * ci: added secrets scanner * ci: attempt at fixing osv-scan warning
1 parent 397683d commit e524831

11 files changed

+932
-56
lines changed

.github/workflows/osv-scanner-schedule.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@ permissions:
1313
contents: read
1414

1515
jobs:
16-
scan-scheduled:
16+
osv-scan:
1717
uses: "google/osv-scanner-action/.github/workflows/osv-scanner-reusable.yml@75532bf0bf75464b047d80414dbce04449498365" # v1.7.3

.golangci.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,5 @@ linters:
3333
linters-settings:
3434
goimports:
3535
local-prefixes: github.com/madsrc/sophrosyne
36+
errorlint:
37+
errorf: false

.pre-commit-config.yaml

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
repos:
2+
- repo: https://github.com/gitleaks/gitleaks
3+
rev: v8.16.1
4+
hooks:
5+
- id: gitleaks
26
- repo: https://github.com/google/osv-scanner/
37
rev: 645d5b0bb9c14741b2147a5305b684e4abc039e0 # v1.7.3
48
hooks:
@@ -21,7 +25,6 @@ repos:
2125
- id: destroyed-symlinks
2226
- id: check-case-conflict
2327
- id: mixed-line-ending
24-
- id: detect-private-key
2528
- id: pretty-format-json
2629
args: ['--autofix']
2730
ci:

config.go

+22-14
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ var DefaultConfig = map[string]interface{}{
7878
"services.checks.pageSize": 2,
7979
"services.checks.cacheTTL": 100,
8080
"server.maxBodySize": 20 * megabyte,
81+
"server.advertisedHost": "localhost",
8182
}
8283

8384
const megabyte int64 = 1048576
@@ -105,10 +106,7 @@ type Config struct {
105106
Port int `key:"port" validate:"required,min=1,max=65535"`
106107
Name string `key:"name" validate:"required"`
107108
} `key:"database"`
108-
Server struct {
109-
Port int `key:"port" validate:"required,min=1,max=65535"`
110-
MaxBodySize int64 `key:"maxBodySize" validate:"required,min=1"` // in bytes
111-
} `key:"server"`
109+
Server ServerConfig `key:"server"`
112110
Logging struct {
113111
Enabled bool `key:"enabled"`
114112
Level LogLevel `key:"level" validate:"required,oneof=debug info"`
@@ -126,16 +124,7 @@ type Config struct {
126124
Interval int `key:"interval"`
127125
Output OtelOutput `key:"output" validate:"required,oneof=stdout http"`
128126
} `key:"metrics"`
129-
Security struct {
130-
SiteKey []byte `key:"siteKey" validate:"required,min=64,max=64"`
131-
Salt []byte `key:"salt" validate:"required,min=32,max=32"`
132-
TLS struct {
133-
KeyType string `key:"keyType" validate:"required,oneof=RSA-4096 EC-P224 EC-P256 EC-P384 EC-P521 ED25519"`
134-
CertificatePath string `key:"certificatePath"`
135-
KeyPath string `key:"keyPath"`
136-
InsecureSkipVerify bool `key:"insecureSkipVerify"`
137-
} `key:"tls" validate:"required"`
138-
} `key:"security" validate:"required"`
127+
Security SecurityConfig `key:"security" validate:"required"`
139128
Services struct {
140129
Users struct {
141130
PageSize int `key:"pageSize" validate:"required,min=2"`
@@ -155,6 +144,25 @@ type Config struct {
155144
} `key:"development"`
156145
}
157146

147+
type TLSConfig struct {
148+
KeyType string `key:"keyType" validate:"required,oneof=RSA-4096 EC-P224 EC-P256 EC-P384 EC-P521 ED25519"`
149+
CertificatePath string `key:"certificatePath"`
150+
KeyPath string `key:"keyPath"`
151+
InsecureSkipVerify bool `key:"insecureSkipVerify"`
152+
}
153+
154+
type SecurityConfig struct {
155+
SiteKey []byte `key:"siteKey" validate:"required,min=64,max=64"`
156+
Salt []byte `key:"salt" validate:"required,min=32,max=32"`
157+
TLS TLSConfig `key:"tls" validate:"required"`
158+
}
159+
160+
type ServerConfig struct {
161+
Port int `key:"port" validate:"required,min=1,max=65535"`
162+
MaxBodySize int64 `key:"maxBodySize" validate:"required,min=1"` // in bytes
163+
AdvertisedHost string `key:"advertisedHost" validate:"required"`
164+
}
165+
158166
// ConfigEnvironmentPrefix is the prefix used to identify the environment
159167
// variables that are used to configure the application.
160168
var ConfigEnvironmentPrefix = "SOPH_"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIB4DCCAYWgAwIBAgIUfzHs33pDVo02ZD5LSdz99ahkjw8wCgYIKoZIzj0EAwIw
3+
RTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGElu
4+
dGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yNDA1MTIxNzU5NDBaFw0zNDA1MTAx
5+
NzU5NDBaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYD
6+
VQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwWTATBgcqhkjOPQIBBggqhkjO
7+
PQMBBwNCAASPO99XmpgeloFlVhaAu//McNpmt0pn705GW89iENlumJlWIOvspqw9
8+
tMguMSvCpEUMqwIBuElZb2dXi7QnJPcGo1MwUTAdBgNVHQ4EFgQUGFThkxd34nXB
9+
6d0K999LZC0nFDowHwYDVR0jBBgwFoAUGFThkxd34nXB6d0K999LZC0nFDowDwYD
10+
VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAgNJADBGAiEA1tkc7NjK1pZ76kG+28TM
11+
JKyDmHzhjXIsMt1C0U1LHncCIQClbXy7/XG36mGoMNaV3IWUnWLjoQe2+uZHUpBP
12+
bSeqfQ==
13+
-----END CERTIFICATE-----
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
-----BEGIN EC PRIVATE KEY-----
2+
MHcCAQEEIO0gnXY2J3PGASVpqZ768ZumKJq19d8VYwVnz5GKls6SoAoGCCqGSM49
3+
AwEHoUQDQgAEjzvfV5qYHpaBZVYWgLv/zHDaZrdKZ+9ORlvPYhDZbpiZViDr7Kas
4+
PbTILjErwqRFDKsCAbhJWW9nV4u0JyT3Bg==
5+
-----END EC PRIVATE KEY-----
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
-----BEGIN EC PARAMETERS-----
2+
BggqhkjOPQMBBw==
3+
-----END EC PARAMETERS-----
4+
-----BEGIN EC PRIVATE KEY-----
5+
MHcCAQEEIO0gnXY2J3PGASVpqZ768ZumKJq19d8VYwVnz5GKls6SoAoGCCqGSM49
6+
AwEHoUQDQgAEjzvfV5qYHpaBZVYWgLv/zHDaZrdKZ+9ORlvPYhDZbpiZViDr7Kas
7+
PbTILjErwqRFDKsCAbhJWW9nV4u0JyT3Bg==
8+
-----END EC PRIVATE KEY-----

internal/tls/testdata/invalid_key.pem

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIB4DCCAYWgAwIBAgIUfzHs33pDVo02ZD5LSdz99ahkjw8wCgYIKoZIzj0EAwIw
3+
RTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGElu
4+
dGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yNDA1MTIxNzU5NDBaFw0zNDA1MTAx
5+
NzU5NDBaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYD
6+
VQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwWTATBgcqhkjOPQIBBggqhkjO
7+
PQMBBwNCAASPO99XmpgeloFlVhaAu//McNpmt0pn705GW89iENlumJlWIOvspqw9
8+
tMguMSvCpEUMqwIBuElZb2dXi7QnJPcGo1MwUTAdBgNVHQ4EFgQUGFThkxd34nXB
9+
6d0K999LZC0nFDowHwYDVR0jBBgwFoAUGFThkxd34nXB6d0K999LZC0nFDowDwYD
10+
VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAgNJADBGAiEA1tkc7NjK1pZ76kG+28TM
11+
JKyDmHzhjXIsMt1C0U1LHncCIQClbXy7/XG36mGoMNaV3IWUnWLjoQe2+uZHUpBP
12+
bSeqfQ==
13+
-----END PRIVATE KEY-----

internal/tls/testdata/rsa2048_key.pem

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCoyr6JFb3KmanF
3+
rOPPsr+GYHCm2uoY+5R8+fwN9pAc+MTYvla75CdDq1aVlcAnq36e1wPuvUzuhmlW
4+
0KcVwHKVLIYOodBo6mq4INbpvyTr2lYtUZvOCUidX56n6/l/0qRkXeM8/5xvXyrZ
5+
Qs19SP9fCDl/tWKzOKstsw2cACBkxrhl3y548M0Ffnxd3lJZWKC0qOqaHBABiJkv
6+
d0vpXFTrb4yao6PTZYJOg+hTwnJZbGH+zvBpVzaM4/q15eNpevgYZLht6ttXIVYi
7+
+2YsYHsYpdMWloBmAjFbKiW5zGSfEqrhvDaG+MilBkxazkJ2z42vnvbOqGYtCKvm
8+
L6V+s3STAgMBAAECggEASpNVTqUD900gJN3nwz7y/vCCJT5omsQgzXz3n8W1048Y
9+
Dbk/AgHiVTQQ68M/pGdRaOWP773EjUhmpzxF7kbaeU00J6fXuFsF7rdXrOvOaMRN
10+
OfWqFISmiB2UsBWC5TZQeqW+vhcja1ONT3OD7dxANCEiommmI5AglW7cTvYBWfR4
11+
4Ljr+T0CwN6D8FPob0OOPvlNqIzmJHdvclRZ42vXA+SIT+vSu4ByQ4l72PeFqWRu
12+
+TNCTzpiixzxDPh2tNfV87S1OY8ATlPS2WCAX+evOxfnSfARIfXDzqQq928o30v4
13+
Y0ZYD0kc42Cmcvk047+hubJfLCOtRAYfRbZ4kYAchQKBgQDaWVm/sU3CWNaInB1x
14+
gu+6er5WigtVLfjFxUMwukRlFB42O8cRnRkeq6mhHhFC1guB9J/b+l0Ye000cOl6
15+
umx4BtMZAUtNu5i5VDv/Z6EE+hsBdl/ExGp4L8QjwN8vfrjnwZaYxV7p08S7jXTC
16+
zFMXoZk980F/PYAtXSSe+3V99QKBgQDF5cfzq3b1tEv/Pi5FnujVy3D2dQ2Llt3a
17+
rO8V9xv7dfH8+B8t1MmpXK7CNDC2sxkC0vkoVKRVcf4263gbvI6EfkYZCnU7VDF3
18+
2GvUBh+PIgUjIkJ0p3o0a6JTVQl6lBQLLcYF0eTOc9g2KVuswZjFUBQCs+IipaTs
19+
wCb5aQtLZwKBgB4FmQx9YXauZlkENhwsZ6/ZPqCBfItqtcDjnZhulAbd3EWStI1c
20+
b17DNaCclLz+1zg4HV7Orsw17+ic+c1RIqbiMVZH0kXO3HHm/hTg98fKZ7osv4A7
21+
jXQXBT3xP/60ytG60W0R/jniTzOGgJ5kH6ypIHvfHYtUNnKGUwm1A3OdAoGACdyz
22+
pD8NRJ1hlCzDHZEXxV/IF2Ap9qTkFXu8xnl0GYn9L0AmPaB3FEucIe175/7w5iUh
23+
aZMeRWvS4WXGrIsvBwdL8v+EbBp8BJ7ycLSFahql6uRQL4QRIP+kLUb1m/g5L31u
24+
eufE4U0An2JcQTW8qUieVqwkPtnGaE4DIzbK600CgYAbcr/oX3AGAzZqakvx7XIT
25+
fqL1VYXyVFi42Uy3jTNeIsAQusiW+nGZ7UBgeE3rdfmxHkhjLcae9wGFu0vBwX7/
26+
GoTUt0ESciGb9YEp6F9z/3lZA877XuRo0nTwrsv6wKLN2CMduvjxCKCnH0xbeGoY
27+
8MoDZwvNsPYQ1rB9pvRqIQ==
28+
-----END PRIVATE KEY-----

0 commit comments

Comments
 (0)