@@ -42,6 +42,47 @@ def _logged_in_username(_server_name, server):
42
42
return server .logged_in_username ()
43
43
44
44
45
+
46
+ def _cookies (_server_name , server ,
47
+ _cli_args : argparse .Namespace ):
48
+ return server .state_load ()
49
+
50
+ def _cmdline_cookies (cli_args : argparse .Namespace ):
51
+
52
+ tcfl .ui_cli .logger_verbosity_from_cli (logger , cli_args )
53
+ verbosity = cli_args .verbosity - cli_args .quietosity
54
+ servers = tcfl .servers .by_targetspec (
55
+ cli_args .target , verbosity = verbosity )
56
+
57
+ r = tcfl .servers .run_fn_on_each_server (
58
+ servers , _cookies , cli_args ,
59
+ parallelization_factor = cli_args .parallelization_factor ,
60
+ traces = cli_args .traces )
61
+ # r now is a dict keyed by server_name of tuples cookies, exception
62
+ if cli_args .json :
63
+ d = {}
64
+ for server_name , ( cookies , _e ) in r .items ():
65
+ d [server_name ] = cookies
66
+ json .dump (d , sys .stdout , indent = 4 )
67
+ print ()
68
+ elif cli_args .cookiejar :
69
+ # Follow https://curl.se/docs/http-cookies.html
70
+ # Note we don't keep the TTL field, so we set it at zero
71
+ for server_name , ( cookies , _e ) in r .items ():
72
+ for cookie , value in cookies .items ():
73
+ print (f"{ server_name } \t FALSE\t /\t TRUE\t 0"
74
+ f"\t { cookie } \t { value } " )
75
+ else :
76
+ d = {}
77
+ for server_name , ( cookies , _e ) in r .items ():
78
+ d [server_name ] = cookies
79
+ if len (d ) == 1 : # print less info if there is only one
80
+ commonl ._dict_print_dotted (d [server_name ], separator = "." )
81
+ else :
82
+ commonl ._dict_print_dotted (d , separator = "." )
83
+
84
+
85
+
45
86
def _cmdline_servers (cli_args : argparse .Namespace ):
46
87
import tcfl .servers
47
88
import tcfl .targets
@@ -232,3 +273,21 @@ def cmdline_setup(arg_subparser):
232
273
help = "Flush currently cached/known servers"
233
274
" (might need to servers-discover after)" )
234
275
ap .set_defaults (func = _cmdline_servers_flush )
276
+
277
+
278
+
279
+ def cmdline_setup_advanced (arg_subparser ):
280
+
281
+ ap = arg_subparser .add_parser (
282
+ "cookies" ,
283
+ help = "Show login cookies (to feed into curl, etc)" )
284
+ tcfl .ui_cli .args_verbosity_add (ap )
285
+ tcfl .ui_cli .args_targetspec_add (ap )
286
+ ap .add_argument (
287
+ "-c" ,"--cookiejar" , action = "store_true" , default = False ,
288
+ help = "Print in cookiejar format"
289
+ " (https://curl.se/docs/http-cookies.html)" )
290
+ ap .add_argument (
291
+ "-j" ,"--json" , action = "store_true" , default = False ,
292
+ help = "Print in JSON format" )
293
+ ap .set_defaults (func = _cmdline_cookies )
0 commit comments