aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/csharp/Grpc.Core
diff options
context:
space:
mode:
Diffstat (limited to 'src/csharp/Grpc.Core')
-rw-r--r--src/csharp/Grpc.Core/ClientBase.cs25
1 files changed, 20 insertions, 5 deletions
diff --git a/src/csharp/Grpc.Core/ClientBase.cs b/src/csharp/Grpc.Core/ClientBase.cs
index f46184406c..f240d777b9 100644
--- a/src/csharp/Grpc.Core/ClientBase.cs
+++ b/src/csharp/Grpc.Core/ClientBase.cs
@@ -33,9 +33,10 @@
using System;
using System.Collections.Generic;
+using System.Text.RegularExpressions;
using Grpc.Core.Internal;
-using System.Text.RegularExpressions;
+using Grpc.Core.Utils;
namespace Grpc.Core
{
@@ -46,15 +47,16 @@ namespace Grpc.Core
/// </summary>
public abstract class ClientBase
{
- static readonly Regex TrailingPortPattern = new Regex(":[0-9]+/?$");
+ // Regex for removal of the optional DNS scheme, trailing port, and trailing backslash
+ static readonly Regex ChannelTargetPattern = new Regex(@"^(dns:\/{3})?([^:\/]+)(:\d+)?\/?$");
+
readonly Channel channel;
readonly string authUriBase;
public ClientBase(Channel channel)
{
this.channel = channel;
- // TODO(jtattermush): we shouldn't need to hand-curate the channel.Target contents.
- this.authUriBase = "https://" + TrailingPortPattern.Replace(channel.Target, "") + "/";
+ this.authUriBase = GetAuthUriBase(channel.Target);
}
/// <summary>
@@ -104,10 +106,23 @@ namespace Grpc.Core
{
options = options.WithHeaders(new Metadata());
}
- var authUri = authUriBase + method.ServiceName;
+ var authUri = authUriBase != null ? authUriBase + method.ServiceName : null;
interceptor(authUri, options.Headers);
}
return new CallInvocationDetails<TRequest, TResponse>(channel, method, Host, options);
}
+
+ /// <summary>
+ /// Creates Auth URI base from channel's target (the one passed at channel creation).
+ /// Fully-qualified service name is to be appended to this.
+ /// </summary>
+ internal static string GetAuthUriBase(string target)
+ {
+ var match = ChannelTargetPattern.Match(target);
+ if (!match.Success) {
+ return null;
+ }
+ return "https://" + match.Groups[2].Value + "/";
+ }
}
}