123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- /* vim: set tabstop=8 shiftwidth=4 softtabstop=4 expandtab smarttab colorcolumn=80: */
- /*
- * Copyright 2016 Red Hat, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #pragma once
- #include <jose/jose.h>
- #include <getopt.h>
- #define __JCMD_AUTO(t) t ## _t __attribute__((cleanup(t ## _cleanup)))
- #define jcmd_opt_key_auto_t __JCMD_AUTO(jcmd_opt_key)
- #define jcmd_opt_io_auto_t __JCMD_AUTO(jcmd_opt_io)
- #define jcmd_opt_auto_t __JCMD_AUTO(jcmd_opt)
- #define FILE_AUTO FILE __attribute__((cleanup(jcmd_file_cleanup)))
- #define JCMD_REGISTER(summary, function, ...) \
- static void __attribute__((constructor)) \
- jcmd_ ## function ## _register(void) \
- { \
- static const char *names[] = { __VA_ARGS__, NULL }; \
- static jcmd_t cmd = { \
- .names = names, \
- .func = function, \
- .desc = summary \
- }; \
- jcmd_push(&cmd); \
- }
- typedef struct jcmd_cfg jcmd_cfg_t;
- typedef bool jcmd_set_t(const jcmd_cfg_t *cfg, void *vopt, const char *arg);
- typedef struct {
- const char *arg;
- const char *doc;
- } jcmd_doc_t;
- struct jcmd_cfg {
- const jcmd_doc_t *doc;
- struct option opt;
- const char *def;
- jcmd_set_t *set;
- off_t off;
- };
- typedef struct {
- const char *name;
- const char *mult;
- } jcmd_field_t;
- typedef struct {
- const jcmd_field_t *fields;
- FILE *detached;
- bool compact;
- FILE *detach;
- FILE *output;
- FILE *input;
- json_t *obj;
- } jcmd_opt_io_t;
- typedef struct jcmd jcmd_t;
- struct jcmd {
- const jcmd_t *next;
- const char *const *names;
- int (*func)(int argc, char *argv[]);
- const char *desc;
- };
- static const jcmd_doc_t jcmd_doc_key[] = {
- { .arg = "FILE", .doc="Read JWK(Set) from FILE" },
- { .arg = "-", .doc="Read JWK(Set) from standard input" },
- {}
- };
- void
- jcmd_push(jcmd_t *cmd);
- bool
- jcmd_opt_parse(int argc, char *argv[], const jcmd_cfg_t *cfgs, void *arg,
- const char *prefix);
- jcmd_set_t jcmd_opt_io_set_input; /* Takes jcmd_opt_io_t* */
- jcmd_set_t jcmd_opt_set_ifile; /* Takes FILE** */
- jcmd_set_t jcmd_opt_set_ofile; /* Takes FILE** */
- jcmd_set_t jcmd_opt_set_jsons; /* Takes json_t** */
- jcmd_set_t jcmd_opt_set_json; /* Takes json_t** */
- jcmd_set_t jcmd_opt_set_jwkt; /* Takes json_t** */
- jcmd_set_t jcmd_opt_set_jwks; /* Takes json_t** */
- jcmd_set_t jcmd_opt_set_flag; /* Takes bool* */
- void
- jcmd_opt_io_cleanup(jcmd_opt_io_t *io);
- void
- jcmd_opt_key_cleanup(jcmd_opt_io_t *io);
- json_t *
- jcmd_compact_field(FILE *file);
- void
- jcmd_file_cleanup(FILE **file);
|