forked from
willdot.net/cocoon
A fork of the Cocoon PDS but being made more distributed.
1package main
2
3import (
4 "fmt"
5 "os"
6
7 "github.com/haileyok/cocoon/server"
8 _ "github.com/joho/godotenv/autoload"
9 "github.com/urfave/cli/v2"
10)
11
12var Version = "dev"
13
14func main() {
15 app := &cli.App{
16 Name: "cocoon",
17 Usage: "An atproto PDS",
18 Flags: []cli.Flag{
19 &cli.StringFlag{
20 Name: "addr",
21 Value: ":8080",
22 EnvVars: []string{"COCOON_ADDR"},
23 },
24 &cli.StringFlag{
25 Name: "db-name",
26 Value: "cocoon.db",
27 EnvVars: []string{"COCOON_DB_NAME"},
28 },
29 &cli.StringFlag{
30 Name: "did",
31 Required: true,
32 EnvVars: []string{"COCOON_DID"},
33 },
34 &cli.StringFlag{
35 Name: "hostname",
36 Required: true,
37 EnvVars: []string{"COCOON_HOSTNAME"},
38 },
39 &cli.StringFlag{
40 Name: "rotation-key-path",
41 Required: true,
42 EnvVars: []string{"COCOON_ROTATION_KEY_PATH"},
43 },
44 &cli.StringFlag{
45 Name: "jwk-path",
46 Required: true,
47 EnvVars: []string{"COCOON_JWK_PATH"},
48 },
49 &cli.StringFlag{
50 Name: "contact-email",
51 Required: true,
52 EnvVars: []string{"COCOON_CONTACT_EMAIL"},
53 },
54 &cli.StringSliceFlag{
55 Name: "relays",
56 Required: true,
57 EnvVars: []string{"COCOON_RELAYS"},
58 },
59 &cli.StringFlag{
60 Name: "admin-password",
61 Required: true,
62 EnvVars: []string{"COCOON_ADMIN_PASSWORD"},
63 },
64 &cli.StringFlag{
65 Name: "smtp-user",
66 Required: false,
67 EnvVars: []string{"COCOON_SMTP_USER"},
68 },
69 &cli.StringFlag{
70 Name: "smtp-pass",
71 Required: false,
72 EnvVars: []string{"COCOON_SMTP_PASS"},
73 },
74 &cli.StringFlag{
75 Name: "smtp-host",
76 Required: false,
77 EnvVars: []string{"COCOON_SMTP_HOST"},
78 },
79 &cli.StringFlag{
80 Name: "smtp-port",
81 Required: false,
82 EnvVars: []string{"COCOON_SMTP_PORT"},
83 },
84 &cli.StringFlag{
85 Name: "smtp-email",
86 Required: false,
87 EnvVars: []string{"COCOON_SMTP_EMAIL"},
88 },
89 &cli.StringFlag{
90 Name: "smtp-name",
91 Required: false,
92 EnvVars: []string{"COCOON_SMTP_NAME"},
93 },
94 &cli.BoolFlag{
95 Name: "s3-backups-enabled",
96 EnvVars: []string{"COCOON_S3_BACKUPS_ENABLED"},
97 },
98 &cli.StringFlag{
99 Name: "s3-region",
100 EnvVars: []string{"COCOON_S3_REGION"},
101 },
102 &cli.StringFlag{
103 Name: "s3-bucket",
104 EnvVars: []string{"COCOON_S3_BUCKET"},
105 },
106 &cli.StringFlag{
107 Name: "s3-endpoint",
108 EnvVars: []string{"COCOON_S3_ENDPOINT"},
109 },
110 &cli.StringFlag{
111 Name: "s3-access-key",
112 EnvVars: []string{"COCOON_S3_ACCESS_KEY"},
113 },
114 &cli.StringFlag{
115 Name: "s3-secret-key",
116 EnvVars: []string{"COCOON_S3_SECRET_KEY"},
117 },
118 &cli.StringFlag{
119 Name: "session-secret",
120 EnvVars: []string{"COCOON_SESSION_SECRET"},
121 },
122 },
123 Commands: []*cli.Command{
124 run,
125 },
126 ErrWriter: os.Stdout,
127 Version: Version,
128 }
129
130 if err := app.Run(os.Args); err != nil {
131 fmt.Printf("Error: %v\n", err)
132 }
133}
134
135var run = &cli.Command{
136 Name: "run",
137 Usage: "Start the cocoon PDS",
138 Flags: []cli.Flag{},
139 Action: func(cmd *cli.Context) error {
140 s, err := server.New(&server.Args{
141 Addr: cmd.String("addr"),
142 DbName: cmd.String("db-name"),
143 Did: cmd.String("did"),
144 Hostname: cmd.String("hostname"),
145 RotationKeyPath: cmd.String("rotation-key-path"),
146 JwkPath: cmd.String("jwk-path"),
147 ContactEmail: cmd.String("contact-email"),
148 Version: Version,
149 Relays: cmd.StringSlice("relays"),
150 AdminPassword: cmd.String("admin-password"),
151 SmtpUser: cmd.String("smtp-user"),
152 SmtpPass: cmd.String("smtp-pass"),
153 SmtpHost: cmd.String("smtp-host"),
154 SmtpPort: cmd.String("smtp-port"),
155 SmtpEmail: cmd.String("smtp-email"),
156 SmtpName: cmd.String("smtp-name"),
157 S3Config: &server.S3Config{
158 BackupsEnabled: cmd.Bool("s3-backups-enabled"),
159 Region: cmd.String("s3-region"),
160 Bucket: cmd.String("s3-bucket"),
161 Endpoint: cmd.String("s3-endpoint"),
162 AccessKey: cmd.String("s3-access-key"),
163 SecretKey: cmd.String("s3-secret-key"),
164 },
165 SessionSecret: cmd.String("session-secret"),
166 })
167 if err != nil {
168 fmt.Printf("error creating cocoon: %v", err)
169 return err
170 }
171
172 if err := s.Serve(cmd.Context); err != nil {
173 fmt.Printf("error starting cocoon: %v", err)
174 return err
175 }
176
177 return nil
178 },
179}