~xdavidwu/himitsu-docker

370f87db08975d9e1d17e10be83991fe6a1b9f7a — xdavidwu 1 year, 9 months ago
initial commit
A  => .gitignore +1 -0
@@ 1,1 @@
/docker-credential-himitsu

A  => .gitmodules +3 -0
@@ 1,3 @@
[submodule "vendor/himitsu"]
	path = vendor/himitsu
	url = https://git.sr.ht/~sircmpwn/himitsu

A  => Makefile +3 -0
@@ 1,3 @@
docker-credential-himitsu:
	HAREPATH=vendor/himitsu:${HAREPATH} hare build cmd/docker-credential-himitsu
.PHONY: docker-credential-himitsu

A  => cmd/docker-credential-himitsu/list.ha +43 -0
@@ 1,43 @@
use encoding::json;
use himitsu::client;
use himitsu::query;
use os;
use shlex;
use strings;

fn list() void = {
	const hi = client::connect()!;
	const query = query::query {
		items = [
			query::pair { key = "proto", value = "docker", private = false, optional = false},
			query::pair { key = "host", value = "", private = false, optional = false},
			query::pair { key = "username", value = "", private = false, optional = false},
			query::pair { key = "secret", value = "", private = true, optional = false},
		],
	};
	const iter = client::query(hi, client::operation::QUERY, &query, 0)!;
	const json = json::newobject();
	defer json::finish(json);
	for (true) {
		const res = match (client::next(&iter)!) {
		case void =>
			break;
		case let s: const str =>
			yield s;
		};
		const parts = shlex::split(res)!;
		defer strings::freeall(parts);
		const query = query::parse_items(parts)!;
		defer query::finish(&query);
		let hosti = 0z, usernamei = 0z;
		for (let i = 0z; i < len(query.items); i += 1) {
			if (strings::compare(query.items[i].key, "host") == 0) {
				hosti = i;
			} else if (strings::compare(query.items[i].key, "username") == 0) {
				usernamei = i;
			};
		};
		json::set(&json, query.items[hosti].value, query.items[usernamei].value);
	};
	json::dump(os::stdout, json)!;
};

A  => cmd/docker-credential-himitsu/main.ha +11 -0
@@ 1,11 @@
use os;

export fn main() void = {
	assert(len(os::args) == 2);
	switch (os::args[1]) {
	case "list" =>
		list();
	case =>
		assert(false);
	};
};

A  => vendor/himitsu +1 -0
@@ 1,1 @@
Subproject commit c7d49426e712889c04f00e37467dd98ecbf6569a