Skip to content

Commit 41a9a6a

Browse files
authored
Merge pull request #31 from IBM/fix/env-config-parsing
fix: allow '=' character in environment config values
2 parents c9d2076 + 89db5eb commit 41a9a6a

File tree

2 files changed

+114
-1
lines changed

2 files changed

+114
-1
lines changed

Tests/CredentialUtilsTests.cs

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public class CredentialUtilsTests
3333
public void TestGetVcapCredentialsAsMap()
3434
{
3535
var apikey = "bogus-apikey";
36+
var service1_apikey = "V4HXmoUtMjohnsnow=KotN";
3637
var tempVcapCredential = new Dictionary<string, List<VcapCredential>>();
3738
var vcapCredential = new VcapCredential()
3839
{
@@ -41,7 +42,18 @@ public void TestGetVcapCredentialsAsMap()
4142
ApiKey = apikey
4243
}
4344
};
45+
46+
var vcapCredential2 = new VcapCredential()
47+
{
48+
Credentials = new Credential()
49+
{
50+
ApiKey = service1_apikey
51+
}
52+
};
53+
54+
vcapCredential2.Name = "equals_sign_test";
4455
tempVcapCredential.Add("assistant", new List<VcapCredential>() { vcapCredential });
56+
tempVcapCredential.Add("equals_sign_test", new List<VcapCredential>() { vcapCredential2 });
4557

4658
var vcapString = JsonConvert.SerializeObject(tempVcapCredential);
4759
Environment.SetEnvironmentVariable("VCAP_SERVICES", vcapString);
@@ -53,6 +65,13 @@ public void TestGetVcapCredentialsAsMap()
5365
Authenticator.PropNameApikey,
5466
out string extractedKey);
5567
Assert.IsTrue(extractedKey == apikey);
68+
69+
vcapCredentaialsAsMap = CredentialUtils.GetVcapCredentialsAsMap("equals_sign_test");
70+
Assert.IsNotNull(vcapCredentaialsAsMap);
71+
vcapCredentaialsAsMap.TryGetValue(
72+
Authenticator.PropNameApikey,
73+
out string extractedKey2);
74+
Assert.IsTrue(extractedKey2 == service1_apikey);
5675
}
5776

5877
[Test]
@@ -414,5 +433,99 @@ public void TestGetServiceProperties()
414433

415434
Assert.IsNotNull(serviceProperties);
416435
}
436+
437+
[Test]
438+
public void TestGetFileCredentialsAsMapService1()
439+
{
440+
// store and clear user set env variable
441+
string ibmCredFile = Environment.GetEnvironmentVariable("IBM_CREDENTIALS_FILE");
442+
Environment.SetEnvironmentVariable("IBM_CREDENTIALS_FILE", "");
443+
444+
// create .env file in current directory
445+
string[] linesWorking = { "SERVICE_1_AUTH_TYPE=iam",
446+
"SERVICE_1_APIKEY=V4HXmoUtMjohnsnow=KotN",
447+
"SERVICE_1_CLIENT_ID=somefake========id",
448+
"SERVICE_1_CLIENT_SECRET===my-client-secret==",
449+
"SERVICE_1_AUTH_URL=https://iamhost/iam/api=",
450+
"SERVICE_1_AUTH_DISABLE_SSL=" };
451+
var directoryPath = Directory.GetCurrentDirectory();
452+
var credsFile = Path.Combine(directoryPath, "ibm-credentials.env");
453+
454+
using (StreamWriter outputFile = new StreamWriter(credsFile))
455+
{
456+
foreach (string line in linesWorking)
457+
{
458+
outputFile.WriteLine(line);
459+
}
460+
}
461+
462+
// get props
463+
Dictionary<string, string> propsWorking = CredentialUtils.GetFileCredentialsAsMap("service_1");
464+
Assert.IsNotNull(propsWorking);
465+
Assert.AreEqual(propsWorking["AUTH_TYPE"], "iam");
466+
Assert.AreEqual(propsWorking["APIKEY"], "V4HXmoUtMjohnsnow=KotN");
467+
Assert.AreEqual(propsWorking["CLIENT_ID"], "somefake========id");
468+
Assert.AreEqual(propsWorking["CLIENT_SECRET"], "==my-client-secret==");
469+
Assert.AreEqual(propsWorking["AUTH_URL"], "https://iamhost/iam/api=");
470+
Assert.IsFalse(propsWorking.ContainsKey("DISABLE_SSL"));
471+
// delete created env files
472+
if (File.Exists(credsFile))
473+
{
474+
File.Delete(credsFile);
475+
}
476+
// reset env variable
477+
Environment.SetEnvironmentVariable("IBM_CREDENTIALS_FILE", ibmCredFile);
478+
}
479+
480+
[Test]
481+
public void TestGetEnvCredentialsAsMapService1()
482+
{
483+
var apikey = "V4HXmoUtMjohnsnow=KotN";
484+
var authType = "iam";
485+
var clientId = "somefake========id";
486+
var clientIdSecret = "==my-client-secret==";
487+
var authUrl = "https://iamhost/iam/api=";
488+
489+
Environment.SetEnvironmentVariable(
490+
"SERVICE_1_" + Authenticator.PropNameApikey,
491+
apikey);
492+
Environment.SetEnvironmentVariable(
493+
"SERVICE_1_" + Authenticator.PropNameAuthType,
494+
authType);
495+
Environment.SetEnvironmentVariable(
496+
"SERVICE_1_" + Authenticator.PropNameClientId,
497+
clientId);
498+
Environment.SetEnvironmentVariable(
499+
"SERVICE_1_" + Authenticator.PropNameClientSecret,
500+
clientIdSecret);
501+
Environment.SetEnvironmentVariable(
502+
"SERVICE_1_" + Authenticator.PropNameUrl,
503+
authUrl);
504+
// get props
505+
Dictionary<string, string> props = CredentialUtils.GetEnvCredentialsAsMap("service_1");
506+
Assert.IsNotNull(props);
507+
Assert.AreEqual(props["AUTH_TYPE"], authType);
508+
Assert.AreEqual(props["APIKEY"], apikey);
509+
Assert.AreEqual(props["CLIENT_ID"], clientId);
510+
Assert.AreEqual(props["CLIENT_SECRET"], clientIdSecret);
511+
Assert.AreEqual(props["AUTH_URL"], authUrl);
512+
513+
// delete created env files
514+
Environment.SetEnvironmentVariable(
515+
"SERVICE_1_" + Authenticator.PropNameApikey,
516+
null);
517+
Environment.SetEnvironmentVariable(
518+
"SERVICE_1_" + Authenticator.PropNameAuthType,
519+
null);
520+
Environment.SetEnvironmentVariable(
521+
"SERVICE_1_" + Authenticator.PropNameClientId,
522+
null);
523+
Environment.SetEnvironmentVariable(
524+
"SERVICE_1_" + Authenticator.PropNameClientSecret,
525+
null);
526+
Environment.SetEnvironmentVariable(
527+
"SERVICE_1_" + Authenticator.PropNameUrl,
528+
null);
529+
}
417530
}
418531
}

Utilities/CredentialUtils.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ protected static Dictionary<string, string> ParseCredentials(string serviceName,
342342
}
343343

344344
string[] stringSeparators = new string[] { "=" };
345-
List<string> lineTokens = new List<string>(line.Split(stringSeparators, StringSplitOptions.None));
345+
List<string> lineTokens = new List<string>(line.Split(stringSeparators, 2, StringSplitOptions.None));
346346
if (lineTokens.Count != 2)
347347
{
348348
continue;

0 commit comments

Comments
 (0)