Signed-off-by: Will Andrews will7989@hotmail.com
+39
-7
Diff
round #0
+6
cmd/cocoon/main.go
+6
cmd/cocoon/main.go
···
54
54
Usage: "PostgreSQL connection string (required if db-type is postgres)",
55
55
EnvVars: []string{"COCOON_DATABASE_URL", "DATABASE_URL"},
56
56
},
57
+
&cli.StringFlag{
58
+
Name: "turso-token",
59
+
Usage: "Token for a cloud Turso instance",
60
+
EnvVars: []string{"COCOON_TURSO_TOKEN", "TURSO_TOKEN"},
61
+
},
57
62
&cli.StringFlag{
58
63
Name: "did",
59
64
EnvVars: []string{"COCOON_DID"},
···
218
223
DbName: cmd.String("db-name"),
219
224
DbType: cmd.String("db-type"),
220
225
DatabaseURL: cmd.String("database-url"),
226
+
TursoToken: cmd.String("turso-token"),
221
227
Did: cmd.String("did"),
222
228
Hostname: cmd.String("hostname"),
223
229
RotationKeyPath: cmd.String("rotation-key-path"),
+4
go.mod
+4
go.mod
···
29
29
github.com/multiformats/go-multihash v0.2.3
30
30
github.com/prometheus/client_golang v1.23.2
31
31
github.com/samber/slog-echo v1.16.1
32
+
github.com/tursodatabase/libsql-client-go v0.0.0-20251219100830-236aa1ff8acc
32
33
github.com/urfave/cli/v2 v2.27.6
33
34
github.com/whyrusleeping/cbor-gen v0.2.1-0.20241030202151-b7a6831be65e
34
35
gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b
···
41
42
require (
42
43
github.com/Azure/go-autorest v14.2.0+incompatible // indirect
43
44
github.com/RussellLuo/slidingwindow v0.0.0-20200528002341-535bb99d338b // indirect
45
+
github.com/antlr4-go/antlr/v4 v4.13.0 // indirect
44
46
github.com/beorn7/perks v1.0.1 // indirect
45
47
github.com/cespare/xxhash/v2 v2.3.0 // indirect
48
+
github.com/coder/websocket v1.8.12 // indirect
46
49
github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect
47
50
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect
48
51
github.com/earthboundkid/versioninfo/v2 v2.24.1 // indirect
···
124
127
go.uber.org/multierr v1.11.0 // indirect
125
128
go.uber.org/zap v1.26.0 // indirect
126
129
go.yaml.in/yaml/v2 v2.4.2 // indirect
130
+
golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 // indirect
127
131
golang.org/x/net v0.43.0 // indirect
128
132
golang.org/x/sync v0.16.0 // indirect
129
133
golang.org/x/sys v0.35.0 // indirect
+8
-2
go.sum
+8
-2
go.sum
···
7
7
github.com/RussellLuo/slidingwindow v0.0.0-20200528002341-535bb99d338b/go.mod h1:4+EPqMRApwwE/6yo6CxiHoSnBzjRr3jsqer7frxP8y4=
8
8
github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5 h1:iW0a5ljuFxkLGPNem5Ui+KBjFJzKg4Fv2fnxe4dvzpM=
9
9
github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5/go.mod h1:Y2QMoi1vgtOIfc+6DhrMOGkLoGzqSV2rKp4Sm+opsyA=
10
+
github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI=
11
+
github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g=
10
12
github.com/aws/aws-sdk-go v1.55.7 h1:UJrkFq7es5CShfBwlWAC8DA077vp8PyVbQd3lqLiztE=
11
13
github.com/aws/aws-sdk-go v1.55.7/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU=
12
14
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
···
26
28
github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY=
27
29
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
28
30
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
31
+
github.com/coder/websocket v1.8.12 h1:5bUXkEPPIbewrnkU8LTCLVaxi4N4J8ahufH2vlo4NAo=
32
+
github.com/coder/websocket v1.8.12/go.mod h1:LNVeNrXQZfe5qhS9ALED3uA+l5pPqvwXg3CKoDBB2gs=
29
33
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
30
34
github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB0alcyc=
31
35
github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
···
330
334
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
331
335
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
332
336
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
337
+
github.com/tursodatabase/libsql-client-go v0.0.0-20251219100830-236aa1ff8acc h1:lzi/5fg2EfinRlh3v//YyIhnc4tY7BTqazQGwb1ar+0=
338
+
github.com/tursodatabase/libsql-client-go v0.0.0-20251219100830-236aa1ff8acc/go.mod h1:08inkKyguB6CGGssc/JzhmQWwBgFQBgjlYFjxjRh7nU=
333
339
github.com/urfave/cli v1.22.10/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
334
340
github.com/urfave/cli/v2 v2.27.6 h1:VdRdS98FNhKZ8/Az8B7MTyGQmpIr36O1EHybx/LaZ4g=
335
341
github.com/urfave/cli/v2 v2.27.6/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ=
···
386
392
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
387
393
golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
388
394
golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
389
-
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ=
390
-
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE=
395
+
golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 h1:aAcj0Da7eBAtrTp03QXWvm88pSyOt+UgdZw2BFZ+lEw=
396
+
golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8/go.mod h1:CQ1k9gNrJ50XIzaKCRR2hssIjF07kZFEiieALBM/ARQ=
391
397
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
392
398
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
393
399
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+3
-3
identity/identity.go
+3
-3
identity/identity.go
···
82
82
return maybeDidFromTxt, nil
83
83
}
84
84
85
-
if maybeDidFromWeb, err := ResolveHandleFromWellKnown(ctx, cli, handle); err == nil {
85
+
maybeDidFromWeb, err := ResolveHandleFromWellKnown(ctx, cli, handle)
86
+
if err == nil {
86
87
return maybeDidFromWeb, nil
87
88
}
88
-
89
-
return "", fmt.Errorf("handle could not be resolved")
89
+
return "", fmt.Errorf("resolve well known: %w", err)
90
90
}
91
91
92
92
func DidToDocUrl(did string) (string, error) {
+18
-2
server/server.go
+18
-2
server/server.go
···
4
4
"bytes"
5
5
"context"
6
6
"crypto/ecdsa"
7
+
"database/sql"
7
8
"embed"
8
9
"errors"
9
10
"fmt"
···
44
45
"github.com/labstack/echo/v4"
45
46
"github.com/labstack/echo/v4/middleware"
46
47
slogecho "github.com/samber/slog-echo"
48
+
_ "github.com/tursodatabase/libsql-client-go/libsql"
47
49
"gorm.io/driver/postgres"
48
50
"gorm.io/driver/sqlite"
49
51
"gorm.io/gorm"
···
97
99
DbName string
98
100
DbType string
99
101
DatabaseURL string
102
+
TursoToken string
100
103
Version string
101
104
Did string
102
105
Hostname string
···
349
352
return nil, fmt.Errorf("failed to connect to postgres: %w", err)
350
353
}
351
354
logger.Info("connected to PostgreSQL database")
355
+
case "turso":
356
+
primaryUrl := args.DatabaseURL
357
+
authToken := args.TursoToken
358
+
359
+
db, err := sql.Open("libsql", fmt.Sprintf("%s?authToken=%s", primaryUrl, authToken))
360
+
gdb, err = gorm.Open(sqlite.New(sqlite.Config{
361
+
Conn: db,
362
+
}), &gorm.Config{})
363
+
if err != nil {
364
+
return nil, fmt.Errorf("failed to connect to postgres: %w", err)
365
+
}
366
+
logger.Info("connected to PostgreSQL database")
367
+
352
368
default:
353
369
gdb, err = gorm.Open(sqlite.Open(args.DbName), &gorm.Config{})
354
370
if err != nil {
···
658
674
func (s *Server) doBackup() {
659
675
logger := s.logger.With("name", "doBackup")
660
676
661
-
if s.dbType == "postgres" {
662
-
logger.Info("skipping S3 backup - PostgreSQL backups should be handled externally (pg_dump, managed database backups, etc.)")
677
+
if s.dbType == "postgres" || s.dbType == "turso" {
678
+
logger.Info("skipping S3 backup - PostgreSQL or Turso backups should be handled externally (pg_dump, managed database backups, etc.)")
663
679
return
664
680
}
665
681
History
1 round
0 comments
willdot.net
submitted
#0
1 commit
expand
collapse
Implement turso as a database
Signed-off-by: Will Andrews <will7989@hotmail.com>
no conflicts, ready to merge