Skip to content

Commit ddc64e7

Browse files
committed
feat(auth): parse auth claim credentials
1 parent 4427d70 commit ddc64e7

File tree

1 file changed

+31
-25
lines changed

1 file changed

+31
-25
lines changed

auth/proxy.go

+31-25
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package auth
22

33
import (
4-
"context"
5-
"fmt"
4+
"context"
5+
"fmt"
6+
"github.com/axone-protocol/axone-sdk/credential"
67

7-
"github.com/axone-protocol/axone-sdk/dataverse"
8+
"github.com/axone-protocol/axone-sdk/dataverse"
89
)
910

1011
// Proxy acts as the entrypoint of a service and is responsible for authenticating any identity willing to conduct some
@@ -14,35 +15,40 @@ import (
1415
// It is not responsible or aware of the communication protocol, which means it only returns information on the identity
1516
// if authentic and won't for example issue a JWT token, this is out of its scope.
1617
type Proxy interface {
17-
// Authenticate verifies the authenticity and integrity of the provided credential before resolving on-chain
18-
// authorized actions with the proxied service by querying the service's governance.
19-
Authenticate(ctx context.Context, credential []byte) (*Identity, error)
18+
// Authenticate verifies the authenticity and integrity of the provided credential before resolving on-chain
19+
// authorized actions with the proxied service by querying the service's governance.
20+
Authenticate(ctx context.Context, credential []byte) (*Identity, error)
2021
}
2122

2223
type authProxy struct {
23-
dvClient dataverse.Client
24-
govAddr string
24+
dvClient dataverse.Client
25+
govAddr string
26+
authParser credential.Parser[*credential.AuthClaim]
2527
}
2628

2729
func NewProxy(govAddr string, dvClient dataverse.Client) Proxy {
28-
return &authProxy{
29-
dvClient: dvClient,
30-
govAddr: govAddr,
31-
}
30+
return &authProxy{
31+
dvClient: dvClient,
32+
govAddr: govAddr,
33+
authParser: credential.NewAuthParser(),
34+
}
3235
}
3336

3437
func (a *authProxy) Authenticate(ctx context.Context, credential []byte) (*Identity, error) {
35-
// parse credential
36-
// verify signature
37-
// get authorized actions from governance, ex:
38-
did := "did:key:example"
39-
res, err := a.dvClient.ExecGov(ctx, a.govAddr, fmt.Sprintf("can(Action,'%s').", did))
40-
if err != nil {
41-
return nil, err
42-
}
43-
44-
return &Identity{
45-
DID: did,
46-
AuthorizedActions: res.([]string),
47-
}, nil
38+
authClaim, err := a.authParser.ParseSigned(credential)
39+
if err != nil {
40+
return nil, fmt.Errorf("failed to parse credential: %w", err)
41+
}
42+
43+
// TODO: get authorized actions from governance, ex:
44+
did := "did:key:example"
45+
res, err := a.dvClient.ExecGov(ctx, a.govAddr, fmt.Sprintf("can(Action,'%s').", did))
46+
if err != nil {
47+
return nil, err
48+
}
49+
50+
return &Identity{
51+
DID: authClaim.ID,
52+
AuthorizedActions: res.([]string),
53+
}, nil
4854
}

0 commit comments

Comments
 (0)