Skip to content

Commit

Permalink
Windows Ntlm support
Browse files Browse the repository at this point in the history
  • Loading branch information
moh-hassan committed Mar 25, 2019
1 parent 2cd1ad6 commit dcdfb73
Show file tree
Hide file tree
Showing 26 changed files with 311 additions and 223 deletions.
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

<!-- version -->
<PropertyGroup>
<Version>3.2.0-beta1</Version>
<Version>3.2.0</Version>
<AssemblyVersion>3.2.0.0</AssemblyVersion>
</PropertyGroup>

Expand Down
19 changes: 3 additions & 16 deletions OData2Poco.CommandLine.Test/OptionManagerTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public class OptionManagerTest
[TestCase("cam")]
[TestCase("camel")]
[TestCase("none")]

[TestCase("zzz")]
public void NameCase_valid_Test(string nameCase)
{
var options = new Options
Expand All @@ -24,21 +24,8 @@ public void NameCase_valid_Test(string nameCase)
};
var om = new OptionManager(options);
Assert.That(options.Errors, Is.Empty);
//Console.WriteLine(options.Errors.Dump());
}
[Test]
[TestCase("zz")]
[TestCase("_")]
[TestCase("")]
public void NameCase_invalid_Test(string nameCase)
{
var options = new Options
{
Lang = "cs",
NameCase = nameCase
};
var om = new OptionManager(options);
Assert.That(options.Errors, Is.Not.Empty);

}

}
}
2 changes: 1 addition & 1 deletion OData2Poco.CommandLine.Test/ProgramTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ public async Task PocoSettingWithJsonAttributeTest(string url, string version, i
public async Task PocoSettingWithJsonAttributeAndCamelCaseTest(string url, string version, int n)
{
//Arrange
var a = $"-r {url} -j -c cam -v";
var a = $"-r {url} -j -c camel -v";
//Act
var tuble = await RunCommand(a);
var output = tuble.Item2;
Expand Down
55 changes: 34 additions & 21 deletions OData2Poco.Core/CsCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ read parameter file into dictionary
recursive resolve macros in dictionary
replace options values for: password , tokens ,url
* */
namespace OData2Poco.CommandLine
namespace OData2Poco.CommandLine
{
/// <summary>
/// Command Pattern to manage all options of commandline
Expand All @@ -38,24 +38,24 @@ public CsCommand(Options options, IPocoFileSystem fileSystem)
}

Errors = new List<string>();
ArgOptions= optionManager = new OptionManager(options);
ArgOptions = optionManager = new OptionManager(options);
odataConnectionString = optionManager.GetOdataConnectionString();
PocoSettingOptions = optionManager.GetPocoSetting();
O2PGen = new O2P(PocoSettingOptions);
}

public async Task Execute()
{

ShowOptions();
Console.WriteLine();
//if (optionManager.Validate() < 0)
//{
ArgOptions.Errors.ForEach(x =>
{
_logger.Error(x);
});
//return;
ArgOptions.Errors.ForEach(x =>
{
_logger.Error(x);
});
//return;
//}

//show warning
Expand All @@ -66,6 +66,7 @@ public async Task Execute()
_logger.Info($"Start processing url: { odataConnectionString.ServiceUrl}");
//show result
await GenerateCodeCommandAsync();
ShowWarning(); //warning of model property/class renaming
GenerateProjectCommand();
ServiceInfo();

Expand All @@ -84,6 +85,7 @@ public void ShowOptions(Options option)
list.ForEach(x => _logger.Normal(x));
_logger.Normal("********************************************");
}
//errors of invalid commandline options
public void ShowErrors()
{
if (Errors.Count == 0) return;
Expand Down Expand Up @@ -122,8 +124,8 @@ private void ListPocoCommand()
items.ForEach(m =>
{
var index = items.IndexOf(m);
var remoteUrl = string.IsNullOrEmpty(m.EntitySetName)
? ""
var remoteUrl = string.IsNullOrEmpty(m.EntitySetName)
? ""
: odataConnectionString.ServiceUrl + @"/" + m.EntitySetName;
//v1.5
_logger.Normal($"{index + 1}: {m.Name} {remoteUrl}");
Expand Down Expand Up @@ -202,23 +204,34 @@ private void SaveMetaDataCommand()
SaveToFile(ArgOptions.MetaFilename, metaData);
}

private void GenerateProjectCommand()
private void GenerateProjectCommand()
{
//--------- --gen-project, -g
if (!ArgOptions.GenerateProject) return;
var fname= "un.proj";
if(ArgOptions.Lang=="cs")
fname= Path.ChangeExtension(ArgOptions.CodeFilename, ".csproj");
if(ArgOptions.Lang=="vb")
fname= Path.ChangeExtension(ArgOptions.CodeFilename, ".csproj");
var projectCode=O2PGen.GenerateProject();
_logger.Normal($"Generating project file {fname}");
File.WriteAllText(fname,projectCode);
//--------- --gen-project, -g
if (!ArgOptions.GenerateProject) return;
var fname = "un.proj";
if (ArgOptions.Lang == "cs")
fname = Path.ChangeExtension(ArgOptions.CodeFilename, ".csproj");
if (ArgOptions.Lang == "vb")
fname = Path.ChangeExtension(ArgOptions.CodeFilename, ".csproj");
var projectCode = O2PGen.GenerateProject();
_logger.Normal($"Generating project file {fname}");
File.WriteAllText(fname, projectCode);
}
private void SaveToFile(string fileName, string text)
{
_fileSystem.SaveToFile(fileName, text);
}
//Show warning of model warning of renaming properties
private void ShowWarning()
{
if (ArgOptions.ShowWarning)
{
O2PGen.ModelWarning.ForEach(x =>
{
_logger.Normal(x);
});
}
}
#endregion
}
}
5 changes: 5 additions & 0 deletions OData2Poco.Core/InternalVisible.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
using System.Runtime.CompilerServices;

[assembly: InternalsVisibleTo("OData2Poco.Tests")]
[assembly: InternalsVisibleTo("OData2Poco.CommandLine.Test")]

1 change: 1 addition & 0 deletions OData2Poco.Core/OData2Poco.Core.projitems
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
<Compile Include="$(MSBuildThisFileDirectory)CommandLineUtility.cs" />
<Compile Include="$(MSBuildThisFileDirectory)CsCommand.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ICommand.cs" />
<Compile Include="$(MSBuildThisFileDirectory)InternalVisible.cs" />
<Compile Include="$(MSBuildThisFileDirectory)OptionManager.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Options.cs" />
<Compile Include="$(MSBuildThisFileDirectory)StartUp.cs" />
Expand Down
14 changes: 7 additions & 7 deletions OData2Poco.Core/OptionManager.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System;
using System.Linq;
using System.Linq;
using OData2Poco.Extensions;


Expand All @@ -23,8 +22,9 @@ public PocoSetting GetPocoSetting()
AddNullableDataType = PocoOptions.AddNullableDataType,
AddEager = PocoOptions.Eager,
Inherit = string.IsNullOrWhiteSpace(PocoOptions.Inherit) ? null : PocoOptions.Inherit,
NamespacePrefix = string.IsNullOrEmpty(PocoOptions.Namespace) ? string.Empty : PocoOptions.Namespace,
NameCase = PocoOptions.NameCase.ToCaseEnum(),
NamespacePrefix = string.IsNullOrEmpty(PocoOptions.Namespace)
? string.Empty : PocoOptions.Namespace,
NameCase = PocoOptions.NameCase.ToEnum<CaseEnum>(),
Attributes = PocoOptions.Attributes?.ToList(),
//obsolete
AddKeyAttribute = PocoOptions.Key,
Expand All @@ -44,10 +44,10 @@ public OdataConnectionString GetOdataConnectionString()
TokenUrl = PocoOptions.TokenEndpoint,
TokenParams = PocoOptions.TokenParams,
ParamFile = PocoOptions.ParamFile,
//Authenticate = Options.Authenticate,
Domain = PocoOptions.Domain,
Authenticate = PocoOptions.Authenticate.ToEnum<AuthenticationType>(),
Proxy = PocoOptions.Proxy,
};
Enum.TryParse(PocoOptions.Authenticate, out AuthenticationType auth);
connString.Authenticate = auth;
return connString;
}

Expand Down
49 changes: 21 additions & 28 deletions OData2Poco.Core/Options.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,7 @@ namespace OData2Poco.CommandLine
// Define a class to receive parsed values
public class Options
{
public Options()
{
Attributes = new List<string>();
Errors = new List<string>();
//set default
Authenticate="none";
CodeFilename="poco.cs";
NameCase="none";
Lang="cs";
}


[Option('r', "url", Required = true, HelpText = "URL of OData feed.")]
public string Url { get; set; }

Expand All @@ -35,6 +25,10 @@ public Options()

[Option('p', "password", HelpText = "password or/token Or access_token /Or client_secret in oauth2.")]
public string Password { get; set; }
[Option("domain", HelpText = "Domain in Active Directory.")]
public string Domain { get; set; }
[Option("proxy", HelpText = "Http Proxy in the form: 'server:port'.")]
public string Proxy { get; set; }

[Option('t', "token-endpoint", HelpText = "OAuth2 Token Endpoint.")]
public string TokenEndpoint { get; set; }
Expand Down Expand Up @@ -95,6 +89,9 @@ public Options()
public bool GenerateProject { get; set; }
[Option('o', "auth", Default = "none", HelpText = "Authentication type, allowed values: none, basic, token, oauth2.")]
public string Authenticate { get; set; }

[Option("show-warning", HelpText = "Show warning messages of renaming properties/classes whose name is a reserved keyword.")]
public bool ShowWarning { get; set; }
//TODO--- ---------------------------
//following are obsolete and will be removed in the next release
//obsolete use -a key
Expand All @@ -119,6 +116,17 @@ public Options()

public List<string> Errors { get; set; }

public Options()
{
Attributes = new List<string>();
Errors = new List<string>();
//set default
Authenticate="none";
CodeFilename="poco.cs";
NameCase="none";
Lang="cs";
}

#if NETFULL
[Usage(ApplicationAlias = "o2pgen")]
#else
Expand Down Expand Up @@ -173,11 +181,7 @@ public void Validate()
var text = File.ReadAllText(fname);
Password = GetToken(text);
}
if (Authenticate != null && !Regex.IsMatch(Authenticate?.ToLower(), "none|basic|token|oauth2", RegexOptions.IgnoreCase))
{
Errors.Add($"Authenticate '{ Authenticate}' isn't valid. It is set to 'none'.");//warning
Authenticate = "none";
}


//validating Lang
switch (Lang)
Expand All @@ -195,23 +199,12 @@ public void Validate()
break;
//return -1;
}
//validate NameCase
if (string.IsNullOrEmpty(NameCase))
{
Errors.Add($"NameCase '{ NameCase}' is empty. It is set to 'pas'.");//warning
NameCase = "pas";
}
if (!Regex.IsMatch(NameCase.ToLower(), "cam|camel|none|pas", RegexOptions.IgnoreCase))
{
Errors.Add($"NameCase '{ NameCase}' isn't valid. It is set to 'pas'.");//warning
NameCase = "pas";
}

//validate Attributes
foreach (var attribute in Attributes.ToList())
{
if (attribute.Trim().StartsWith("[")) continue;
if (!Regex.IsMatch(attribute.Trim().ToLower(), "key|req|tab|table|json|db|proto|dm|display|origin", RegexOptions.IgnoreCase))
if (!Regex.IsMatch(attribute.Trim().ToLower(), "key|req|tab|table|json|db|proto|dm|display|original", RegexOptions.IgnoreCase))
{
Errors.Add($"Attribute '{attribute}' isn't valid. It will be droped.");//warning

Expand Down
34 changes: 26 additions & 8 deletions OData2Poco.Tests/StringExtensionsTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,7 @@ public void ToCamelCaseTest(string name, string pascalName)
}


[Test]
[TestCase("cam", CaseEnum.Camel)]
[TestCase("CAmel", CaseEnum.Camel)]
[TestCase("pas", CaseEnum.Pas)]
public void StringToCaseEnumTest(string val, CaseEnum caseEnum)
{
Assert.AreEqual(caseEnum, val.ToCaseEnum());
}


[Test]
public void TrimAllSpaceAndCrLfTest()
Expand Down Expand Up @@ -98,5 +91,30 @@ public void ChangeReservedWordTest(string name, string expected)
var name2 = name.ChangeReservedWord();
Assert.That(name2, Is.EqualTo(expected));
}

[Test]
[TestCase("camel", CaseEnum.Camel)]
[TestCase("CAMEL", CaseEnum.Camel)]
[TestCase("pas", CaseEnum.Pas)]
[TestCase("anyvalue", CaseEnum.None)]
public void StringToCaseEnumTest(string val, CaseEnum expected)
{
var enumValue = val.ToEnum<CaseEnum>();
//Assert
Assert.That(enumValue, Is.EqualTo(expected));
}

[Test]
[TestCase("basic", AuthenticationType.Basic)]
[TestCase("BASIC", AuthenticationType.Basic)]
[TestCase("undefined", AuthenticationType.None)]
public void AuthenticationTypeTest(string auth, AuthenticationType expected)
{
//Arrange
//Act
AuthenticationType? authType = auth.ToEnum<AuthenticationType>();
//Assert
Assert.That(authType, Is.EqualTo(expected));
}
}
}
Loading

0 comments on commit dcdfb73

Please sign in to comment.