Skip to content

Commit e8a52cc

Browse files
authored
Merge pull request #18 from Crequency/dev=main
[Pull Request] New powerful cli tool project
2 parents 315aa3a + 8b01c11 commit e8a52cc

File tree

10 files changed

+232
-32
lines changed

10 files changed

+232
-32
lines changed

.github/workflows/build.yml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,13 @@ jobs:
2525
runs-on: ${{ matrix.os }}
2626

2727
steps:
28-
- uses: actions/checkout@v3
28+
- uses: actions/checkout@v4
2929

3030
- name: Setup .NET
31-
uses: actions/setup-dotnet@v3
31+
uses: actions/setup-dotnet@v4
3232
with:
3333
dotnet-version: |
34-
6.0.x
35-
7.0.x
34+
8.0.x
3635
3736
- name: Build
3837
run: |

.github/workflows/publish.yml

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
name: Publish
2+
3+
on:
4+
push:
5+
branches: ["main", "dev=main"]
6+
pull_request:
7+
branches: ["main"]
8+
9+
workflow_dispatch:
10+
11+
jobs:
12+
build-on-ubuntu:
13+
runs-on: ubuntu-latest
14+
15+
steps:
16+
- uses: actions/checkout@v4
17+
18+
- name: Setup .NET
19+
uses: actions/setup-dotnet@v4
20+
with:
21+
dotnet-version: |
22+
8.0.x
23+
24+
- name: Add to GitHub Repo
25+
if: ${{ github.event_name != 'pull_request' }}
26+
run: |
27+
nuget sources add -name github -Source https://nuget.pkg.github.com/Crequency/index.json -Username Crequency -Password ${{ secrets.GitHubToken }}
28+
29+
- name: Install NuGet
30+
uses: nuget/setup-nuget@v1
31+
if: ${{ github.event_name != 'pull_request' }}
32+
with:
33+
nuget-version: "6.x"
34+
35+
- name: Build and Publish Cli Tool
36+
working-directory: "Common.BasicHelper.Cli"
37+
if: ${{ github.event_name != 'pull_request' }}
38+
run: |
39+
dotnet build -c Release
40+
41+
nuget push ./bin/Release/*.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NugetKey }} -NoSymbol
42+
nuget push ./bin/Release/*.nupkg -Source github -SkipDuplicate
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using CommandLine;
2+
3+
namespace Common.BasicHelper.Cli.Arguments;
4+
5+
public class BasicOptions
6+
{
7+
8+
[Option("verbose", HelpText = "Display verbose output.")]
9+
public bool Verbose { get; set; }
10+
11+
[Option("dry-run", HelpText = "Dry run the command.")]
12+
public bool DryRun { get; set; }
13+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
using CommandLine;
2+
using Common.BasicHelper.Utils;
3+
4+
namespace Common.BasicHelper.Cli.Arguments.Verbs;
5+
6+
[Verb("password", aliases: ["passwd", "pwd"], HelpText = "Password related utils.")]
7+
public class VerbPassword : BasicOptions
8+
{
9+
[Option('g', "generate", Default = true, HelpText = "Generate a password.")]
10+
public bool Generate { get; set; }
11+
12+
[Option('l', "length", Default = 12, HelpText = "Length of the password.")]
13+
public int Length { get; set; }
14+
15+
[Option('r', "length-range", HelpText = "Length range of the password, like `3,5`.")]
16+
public string? LengthRange { get; set; }
17+
18+
[Option('u', "ignore-uppercase", HelpText = "Ignore uppercase letters.")]
19+
public bool IgnoreUppercase { get; set; }
20+
21+
[Option('e', "ignore-lowercase", HelpText = "Ignore lowercase letters.")]
22+
public bool IgnoreLowercase { get; set; }
23+
24+
[Option('n', "ignore-numbers", HelpText = "Ignore numbers.")]
25+
public bool IgnoreNumbers { get; set; }
26+
27+
[Option('s', "ignore-symbols", HelpText = "Ignore symbols.")]
28+
public bool IgnoreSymbols { get; set; }
29+
30+
[Option('U', "supported-uppercase", Default = "ABCDEFGHIJKLMNOPQRSTUVWXYZ", HelpText = "Supported uppercase letters.")]
31+
public string? SupportedUppercase { get; set; }
32+
33+
[Option('E', "supported-lowercase", Default = "abcdefghijklmnopqrstuvwxyz", HelpText = "Supported lowercase letters.")]
34+
public string? SupportedLowercase { get; set; }
35+
36+
[Option('N', "supported-numbers", Default = "0123456789", HelpText = "Supported numbers.")]
37+
public string? SupportedNumbers { get; set; }
38+
39+
[Option('S', "supported-symbols", Default = "!@#$%^&*()_+-=[]{};':,./<>?", HelpText = "Supported symbols.")]
40+
public string? SupportedSymbols { get; set; }
41+
}
42+
43+
public static class PasswordExtensions
44+
{
45+
public static VerbPassword Execute(this VerbPassword pwdc)
46+
{
47+
int lengthRangeStart = 0;
48+
int lengthRangeEnd = 0;
49+
50+
var lengthRangeProvided = pwdc.LengthRange is not null;
51+
52+
if (pwdc.LengthRange is not null)
53+
{
54+
var splited = pwdc.LengthRange.Split(',');
55+
56+
if (splited.Length != 2)
57+
throw new ArgumentException("Length range should be like `3,5`.");
58+
59+
lengthRangeProvided = lengthRangeProvided && int.TryParse(splited[0], out lengthRangeStart);
60+
lengthRangeProvided = lengthRangeProvided && int.TryParse(splited[1], out lengthRangeEnd);
61+
}
62+
63+
var pwd = Password.GeneratePassword(
64+
pwdc.Length,
65+
lengthRangeProvided ? lengthRangeStart : null,
66+
lengthRangeProvided ? lengthRangeEnd : null,
67+
pwdc.IgnoreUppercase == false,
68+
pwdc.IgnoreLowercase == false,
69+
pwdc.IgnoreNumbers == false,
70+
pwdc.IgnoreSymbols == false,
71+
pwdc.SupportedUppercase!,
72+
pwdc.SupportedLowercase!,
73+
pwdc.SupportedNumbers!,
74+
pwdc.SupportedSymbols!
75+
);
76+
77+
Console.WriteLine(pwd);
78+
79+
return pwdc;
80+
}
81+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>net8.0</TargetFramework>
6+
<ImplicitUsings>enable</ImplicitUsings>
7+
<Nullable>enable</Nullable>
8+
</PropertyGroup>
9+
10+
<PropertyGroup>
11+
<AssemblyVersion>$(Version)</AssemblyVersion>
12+
<FileVersion>$(Version)</FileVersion>
13+
<Version>0.1.$([System.DateTime]::UtcNow.Date.Subtract($([System.DateTime]::Parse("2005-06-06"))).TotalDays).$([System.Math]::Floor($([System.DateTime]::UtcNow.TimeOfDay.TotalMinutes)))</Version>
14+
</PropertyGroup>
15+
16+
<PropertyGroup>
17+
<Authors>Dynesshely</Authors>
18+
<Company>Crequency</Company>
19+
<Copyright>Copyright (C) Crequency 2024</Copyright>
20+
</PropertyGroup>
21+
22+
<PropertyGroup>
23+
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
24+
<RepositoryUrl>https://github.com/Crequency/Common.BasicHelper/</RepositoryUrl>
25+
<PackageProjectUrl>https://github.com/Crequency/Common.BasicHelper/</PackageProjectUrl>
26+
<PackageLicenseExpression>AGPL-3.0-only</PackageLicenseExpression>
27+
<PackageRequireLicenseAcceptance>True</PackageRequireLicenseAcceptance>
28+
<PackageId>$(AssemblyName)</PackageId>
29+
<PackageIcon>icon.png</PackageIcon>
30+
<PackageReadmeFile>README.md</PackageReadmeFile>
31+
</PropertyGroup>
32+
33+
<PropertyGroup>
34+
<PackAsTool>true</PackAsTool>
35+
<ToolCommandName>cbt</ToolCommandName>
36+
</PropertyGroup>
37+
38+
<ItemGroup>
39+
<None Include="icon.png" Pack="True" PackagePath="\" />
40+
<None Include="..\README.md" Pack="True" PackagePath="\" />
41+
</ItemGroup>
42+
43+
<ItemGroup>
44+
<ProjectReference Include="..\Common.BasicHelper.Samples\Common.BasicHelper.Samples.csproj" />
45+
<ProjectReference Include="..\Common.BasicHelper\Common.BasicHelper.csproj" />
46+
</ItemGroup>
47+
48+
<ItemGroup>
49+
<PackageReference Include="CommandLineParser" Version="2.9.1" />
50+
</ItemGroup>
51+
52+
</Project>

Common.BasicHelper.Cli/Program.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
using CommandLine;
2+
using Common.BasicHelper.Cli.Arguments.Verbs;
3+
4+
Parser.Default.ParseArguments<VerbPassword, object>(args)
5+
.WithParsed<VerbPassword>(options => options.Execute())
6+
;

Common.BasicHelper.Cli/icon.png

203 KB
Loading

Common.BasicHelper.sln

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Common.BasicHelper.Test", "
99
EndProject
1010
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Common.BasicHelper.Samples", "Common.BasicHelper.Samples\Common.BasicHelper.Samples.csproj", "{C363C055-5CDC-4CEB-935C-D099CE0681BF}"
1111
EndProject
12+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common.BasicHelper.Cli", "Common.BasicHelper.Cli\Common.BasicHelper.Cli.csproj", "{3545B3A1-32CE-4404-8749-0E930354F5BA}"
13+
EndProject
1214
Global
1315
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1416
Debug|Any CPU = Debug|Any CPU
@@ -27,6 +29,10 @@ Global
2729
{C363C055-5CDC-4CEB-935C-D099CE0681BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
2830
{C363C055-5CDC-4CEB-935C-D099CE0681BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
2931
{C363C055-5CDC-4CEB-935C-D099CE0681BF}.Release|Any CPU.Build.0 = Release|Any CPU
32+
{3545B3A1-32CE-4404-8749-0E930354F5BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
33+
{3545B3A1-32CE-4404-8749-0E930354F5BA}.Debug|Any CPU.Build.0 = Debug|Any CPU
34+
{3545B3A1-32CE-4404-8749-0E930354F5BA}.Release|Any CPU.ActiveCfg = Release|Any CPU
35+
{3545B3A1-32CE-4404-8749-0E930354F5BA}.Release|Any CPU.Build.0 = Release|Any CPU
3036
EndGlobalSection
3137
GlobalSection(SolutionProperties) = preSolution
3238
HideSolutionNode = FALSE
Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<LangVersion>preview</LangVersion>
@@ -7,42 +7,36 @@
77
<Nullable>enable</Nullable>
88
</PropertyGroup>
99

10-
<PropertyGroup>
11-
<Authors>Dynesshely</Authors>
12-
<Company>Crequency</Company>
13-
<Description>Basic utils for all projects based on CSharp.</Description>
14-
<Copyright>Copyright © Crequency 2022-present</Copyright>
15-
</PropertyGroup>
16-
1710
<PropertyGroup>
1811
<AssemblyVersion>$(Version)</AssemblyVersion>
1912
<FileVersion>$(Version)</FileVersion>
20-
<Version>
21-
1.3.$([System.DateTime]::UtcNow.Date.Subtract($([System.DateTime]::Parse("2022-01-27"))).TotalDays).$([System.Math]::Floor($([System.DateTime]::UtcNow.TimeOfDay.TotalMinutes)))
22-
</Version>
13+
<Version>1.3.$([System.DateTime]::UtcNow.Date.Subtract($([System.DateTime]::Parse("2005-06-06"))).TotalDays).$([System.Math]::Floor($([System.DateTime]::UtcNow.TimeOfDay.TotalMinutes)))</Version>
2314
</PropertyGroup>
2415

2516
<PropertyGroup>
26-
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
27-
<PackageRequireLicenseAcceptance>True</PackageRequireLicenseAcceptance>
17+
<Authors>Dynesshely</Authors>
18+
<Company>Crequency</Company>
19+
<Copyright>Copyright (C) Crequency 2022-present</Copyright>
2820
</PropertyGroup>
2921

3022
<PropertyGroup>
23+
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
24+
<RepositoryUrl>https://github.com/Crequency/Common.BasicHelper/</RepositoryUrl>
25+
<PackageProjectUrl>https://github.com/Crequency/Common.BasicHelper/</PackageProjectUrl>
26+
<PackageLicenseExpression>AGPL-3.0-only</PackageLicenseExpression>
27+
<PackageRequireLicenseAcceptance>True</PackageRequireLicenseAcceptance>
3128
<PackageId>$(AssemblyName)</PackageId>
3229
<PackageIcon>icon.png</PackageIcon>
3330
<PackageReadmeFile>README.md</PackageReadmeFile>
34-
<PackageLicenseExpression>AGPL-3.0-only</PackageLicenseExpression>
35-
<PackageProjectUrl>https://github.com/Crequency/Common.BasicHelper/</PackageProjectUrl>
36-
<RepositoryUrl>https://github.com/Crequency/Common.BasicHelper/</RepositoryUrl>
3731
</PropertyGroup>
3832

3933
<ItemGroup>
40-
<None Include="icon.png" Pack="True" PackagePath="\" />
41-
<None Include="..\README.md" Pack="True" PackagePath="\" />
34+
<None Include="icon.png" Pack="True" PackagePath="\"/>
35+
<None Include="..\README.md" Pack="True" PackagePath="\"/>
4236
</ItemGroup>
4337

4438
<ItemGroup>
45-
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
39+
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
4640
</ItemGroup>
4741

48-
</Project>
42+
</Project>

Common.BasicHelper/Utils/Password.cs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Linq;
34
using System.Text;
45
using Common.BasicHelper.Core.Exceptions;
@@ -97,18 +98,24 @@ public static string GeneratePassword
9798

9899
var random = new Random();
99100

100-
var chars = new string[4]
101-
{
102-
supportedUppercases,
103-
supportedLowercases,
104-
supportedNumbers,
105-
supportedSymbols
106-
};
101+
var chars = new List<string>();
102+
103+
if (includeUppercase)
104+
chars.Add(supportedUppercases);
105+
106+
if (includeLowercase)
107+
chars.Add(supportedLowercases);
108+
109+
if (includeNumbers)
110+
chars.Add(supportedNumbers);
111+
112+
if (includeSymbols)
113+
chars.Add(supportedSymbols);
107114

108115
var generateLength = length ?? random.Next(lengthRangeStart ?? 0, lengthRangeEnd ?? 13);
109116

110117
var selected = from item in Enumerable.Range(0, generateLength)
111-
let selection = chars[random.Next(0, chars.Length)]
118+
let selection = chars[random.Next(0, chars.Count)]
112119
select selection[random.Next(0, selection.Length)];
113120

114121
foreach (var item in selected)

0 commit comments

Comments
 (0)