add command line parameter to print the version
The version is defined in build.zig. We use git describe to the the build version. For release versions we enforce that the version in build.zig and build.zig.zon must be equal to the output of git describe.
This commit is contained in:
14
src/main.zig
14
src/main.zig
@@ -10,6 +10,7 @@ const expect = testing.expect;
|
||||
const ArrayList = std.ArrayList;
|
||||
const Base32 = @import("base32.zig").Base32;
|
||||
const Base32Error = @import("base32.zig").Base32Error;
|
||||
const options = @import("config");
|
||||
|
||||
// otpauth://totp/AWS+Dev?secret=47STA47VFCMMLLWOLHWO3KY7MYNC36MLCDTHOLIYKJCTTSSAMKVM7YA3VWT2AJEP&digits=6&icon=Amazon
|
||||
// otpauth://totp/Gitea%20%28git.lucares.de%29:andi?algorithm=SHA1&digits=6&issuer=Gitea&period=30&secret=MSP53Q672UJMSCLQVRCJKMMZKK7MWSMYFL77OQ24JBM65RZWY7F2Y45FMTNLYM36
|
||||
@@ -49,7 +50,9 @@ fn mainInternal() !void {
|
||||
|
||||
const arg: Args = try parseArgs(allocator, args);
|
||||
//print("parsed Args: {?any}\n", arg);
|
||||
if (arg.list) {
|
||||
if (arg.print_version) {
|
||||
try std.io.getStdOut().writer().print("{}", .{options.version});
|
||||
} else if (arg.list) {
|
||||
const names = try executeGetList(allocator, arg.config_location);
|
||||
|
||||
for (0..names.items.len) |i| {
|
||||
@@ -85,12 +88,13 @@ fn printHelp() void {
|
||||
\\ eval "$(zig-totp --bash)"
|
||||
\\ to your ~/.bashrc
|
||||
\\ --config [path] The path to a config file (default is $XDG_CONFIG_HOME/zig-totp or $HOME/.zig-totp).
|
||||
\\
|
||||
\\ --version Print the version number
|
||||
\\
|
||||
;
|
||||
std.debug.print("{s}", .{msg});
|
||||
}
|
||||
|
||||
const Args = struct { list: bool, show: ?[]const u8, config_location: []const u8, validateAuthenticator: ?[]const u8, validateCode: ?[]const u8 };
|
||||
const Args = struct { list: bool, show: ?[]const u8, config_location: []const u8, validateAuthenticator: ?[]const u8, validateCode: ?[]const u8, print_version: bool };
|
||||
|
||||
const OtpAuthUrl = struct { name: []const u8, secretEncoded: []const u8, url: []const u8, period: u32, digits: u4, algorithm: []const u8 };
|
||||
|
||||
@@ -186,7 +190,7 @@ fn zeroPad(allocator: Allocator, digits: u4, x: anytype) ![]u8 {
|
||||
const ArgumentError = error{ InvalidOtpAuthUrl, UnknownParameter, MissingConfigLocation, AuthenticatorNotFound, MissingAuthenticatorParam, FailedToOpenConfigFile, TooManyParsinErrors };
|
||||
|
||||
fn parseArgs(allocator: Allocator, args: []const []const u8) !Args {
|
||||
var result = Args{ .list = false, .show = null, .config_location = try configLocation(allocator), .validateAuthenticator = null, .validateCode = null };
|
||||
var result = Args{ .list = false, .show = null, .config_location = try configLocation(allocator), .validateAuthenticator = null, .validateCode = null, .print_version = false };
|
||||
var i: u17 = 1;
|
||||
while (i < args.len) : (i += 1) {
|
||||
const arg = args[i];
|
||||
@@ -220,6 +224,8 @@ fn parseArgs(allocator: Allocator, args: []const []const u8) !Args {
|
||||
return error.MissingConfigLocation;
|
||||
}
|
||||
result.config_location = args[i];
|
||||
} else if (eql(u8, "--version", arg)) {
|
||||
result.print_version = true;
|
||||
} else if (eql(u8, "list", arg)) {
|
||||
result.list = true;
|
||||
} else if (eql(u8, "show", arg)) {
|
||||
|
||||
Reference in New Issue
Block a user