Live video on the AT Protocol
1package atproto
2
3import (
4 "context"
5 "encoding/json"
6 "os"
7
8 "github.com/lestrrat-go/jwx/v2/jwk"
9 oauth_helpers "github.com/streamplace/atproto-oauth-golang/helpers"
10 "stream.place/streamplace/pkg/log"
11)
12
13func EnsureJWK(ctx context.Context, fPath string) (jwk.Key, error) {
14 var key jwk.Key
15 _, err := os.Stat(fPath)
16 if err == nil {
17 b, err := os.ReadFile(fPath)
18 if err != nil {
19 return nil, err
20 }
21 key, err = jwk.ParseKey(b)
22 if err != nil {
23 return nil, err
24 }
25 } else if os.IsNotExist(err) {
26 key, err = oauth_helpers.GenerateKey(nil)
27 if err != nil {
28 return nil, err
29 }
30
31 b, err := json.Marshal(key)
32 if err != nil {
33 return nil, err
34 }
35
36 if err := os.WriteFile(fPath, b, 0600); err != nil {
37 return nil, err
38 }
39 log.Log(ctx, "generated JWK", "path", fPath)
40 } else {
41 return nil, err
42 }
43
44 return key, nil
45}