From 72395351e4e9fd1fdf581f4fcea0855e996486da Mon Sep 17 00:00:00 2001
From: ale <ale@incal.net>
Date: Wed, 12 Feb 2020 08:18:46 +0000
Subject: [PATCH] Upgrade id/auth (tracing)

---
 .../id/auth/client/client.go                  | 37 ++++++++++++++++++-
 vendor/vendor.json                            |  6 +--
 2 files changed, 38 insertions(+), 5 deletions(-)

diff --git a/vendor/git.autistici.org/id/auth/client/client.go b/vendor/git.autistici.org/id/auth/client/client.go
index 6c68c4f..2bb6018 100644
--- a/vendor/git.autistici.org/id/auth/client/client.go
+++ b/vendor/git.autistici.org/id/auth/client/client.go
@@ -6,6 +6,7 @@ import (
 	"net/textproto"
 
 	"github.com/cenkalti/backoff"
+	"go.opencensus.io/trace"
 
 	"git.autistici.org/id/auth"
 )
@@ -29,19 +30,31 @@ func New(socketPath string) Client {
 }
 
 func (c *socketClient) Authenticate(ctx context.Context, req *auth.Request) (*auth.Response, error) {
+	// Create a tracing span for the authentication request.
+	sctx, span := trace.StartSpan(ctx, "auth-server.Authenticate",
+		trace.WithSpanKind(trace.SpanKindClient))
+	defer span.End()
+	span.AddAttributes(
+		trace.StringAttribute("auth.service", req.Service),
+		trace.StringAttribute("auth.username", req.Username),
+	)
+
 	// Retry the request, with backoff, if we get a temporary
 	// network error.
 	var resp *auth.Response
 	err := backoff.Retry(func() error {
 		var err error
-		resp, err = c.doAuthenticate(ctx, req)
+		resp, err = c.doAuthenticate(sctx, req)
 		if err == nil {
 			return nil
 		} else if netErr, ok := err.(net.Error); ok && netErr.Temporary() {
 			return netErr
 		}
 		return backoff.Permanent(err)
-	}, backoff.WithContext(backoff.NewExponentialBackOff(), ctx))
+	}, backoff.WithContext(backoff.NewExponentialBackOff(), sctx))
+
+	span.SetStatus(responseToTraceStatus(resp, err))
+
 	return resp, err
 }
 
@@ -93,3 +106,23 @@ func (c *socketClient) doAuthenticate(ctx context.Context, req *auth.Request) (*
 		return nil, ctx.Err()
 	}
 }
+
+func responseToTraceStatus(resp *auth.Response, err error) trace.Status {
+	switch err {
+	case nil:
+		switch resp.Status {
+		case auth.StatusOK:
+			return trace.Status{Code: trace.StatusCodeOK, Message: "OK"}
+		case auth.StatusInsufficientCredentials:
+			return trace.Status{Code: trace.StatusCodePermissionDenied, Message: "Insufficient Credentials"}
+		default:
+			return trace.Status{Code: trace.StatusCodePermissionDenied, Message: "Authentication Failure"}
+		}
+	case context.Canceled:
+		return trace.Status{Code: trace.StatusCodeCancelled, Message: "CANCELED"}
+	case context.DeadlineExceeded:
+		return trace.Status{Code: trace.StatusCodeDeadlineExceeded, Message: "DEADLINE_EXCEEDED"}
+	default:
+		return trace.Status{Code: trace.StatusCodeUnknown, Message: err.Error()}
+	}
+}
diff --git a/vendor/vendor.json b/vendor/vendor.json
index dd700f1..ee40850 100644
--- a/vendor/vendor.json
+++ b/vendor/vendor.json
@@ -33,10 +33,10 @@
 			"revisionTime": "2019-10-24T15:02:31Z"
 		},
 		{
-			"checksumSHA1": "3xM1BQ7kVyqn74GQz07uCBSNh2E=",
+			"checksumSHA1": "bcwQ+zvfpEIZtOKPVXeaG1XyhfI=",
 			"path": "git.autistici.org/id/auth/client",
-			"revision": "ffc5d8791fd81d28fb2b0bce4540a10426a25124",
-			"revisionTime": "2019-10-24T15:02:31Z"
+			"revision": "3d44524ae2e5a232f4620329a68fb00d3048953a",
+			"revisionTime": "2020-02-12T08:17:28Z"
 		},
 		{
 			"checksumSHA1": "MlpsZgRytv/c9IX9YawRJDN/ibQ=",
-- 
GitLab