async def _run(args): cfg = config.load() credentials = None if cfg.credentials: credentials = cfg.credentials elif args.user: credentials = Credentials(args.user) credentials.password = getpass.getpass( prompt=f"Password ({args.user}): ") cfg.credentials = credentials if cfg.default_profile and not (args.use_profile_selector or args.server): selected_profile = cfg.default_profile elif args.use_profile_selector or args.profile_path: profiles = get_profiles(Path(args.profile_path)) if not profiles: logger.error("No profile found") return 17 selected_profile = await select_profile(profiles) if not selected_profile: logger.error("No profile selected") return 18 elif args.server: selected_profile = config.HostProfile(args.server, args.usergroup, args.authgroup) else: raise ValueError( "Cannot determine server address. Invalid arguments specified.") cfg.default_profile = selected_profile config.save(cfg) display_mode = config.DisplayMode[args.browser_display_mode.upper()] auth_response = await authenticate_to(selected_profile, credentials, display_mode) if args.authenticate: logger.warn("Exiting after login, as requested") details = { "host": selected_profile.vpn_url, "cookie": auth_response.session_token, "fingerprint": auth_response.server_cert_hash, } if args.authenticate == "json": print(json.dumps(details, indent=4)) elif args.authenticate == "shell": print("\n".join(f"{k.upper()}={shlex.quote(v)}" for k, v in details.items())) return 0 return await run_openconnect(auth_response, selected_profile, args.openconnect_args)
async def _run(args, cfg): credentials = None if cfg.credentials: credentials = cfg.credentials elif args.user: credentials = Credentials(args.user) if credentials and not credentials.password: credentials.password = getpass.getpass(prompt=f"Password ({args.user}): ") cfg.credentials = credentials if cfg.default_profile and not (args.use_profile_selector or args.server): selected_profile = cfg.default_profile elif args.use_profile_selector or args.profile_path: profiles = get_profiles(Path(args.profile_path)) if not profiles: raise ValueError("No profile found", 17) selected_profile = await select_profile(profiles) if not selected_profile: raise ValueError("No profile selected", 18) elif args.server: selected_profile = config.HostProfile( args.server, args.usergroup, args.authgroup ) else: raise ValueError( "Cannot determine server address. Invalid arguments specified.", 19 ) cfg.default_profile = selected_profile display_mode = config.DisplayMode[args.browser_display_mode.upper()] auth_response = await authenticate_to( selected_profile, args.proxy, credentials, display_mode ) if args.on_disconnect and not cfg.on_disconnect: cfg.on_disconnect = args.on_disconnect return auth_response, selected_profile
async def _run(args): cfg = config.load() credentials = None if cfg.credentials: credentials = cfg.credentials elif args.user: credentials = Credentials(args.user) credentials.password = getpass.getpass( prompt=f"Password ({args.user}): ") cfg.credentials = credentials if cfg.default_profile and not (args.use_profile_selector or args.server): selected_profile = cfg.default_profile elif args.use_profile_selector or args.profile_path: profiles = get_profiles(Path(args.profile_path)) if not profiles: logger.error("No profile found") return 17 selected_profile = await select_profile(profiles) if not selected_profile: logger.error("No profile selected") return 18 elif args.server: selected_profile = config.HostProfile(args.server, args.usergroup) else: raise ValueError( "Cannot determine server address. Invalid arguments specified.") cfg.default_profile = selected_profile config.save(cfg) session_token = await authenticate_to(selected_profile, credentials) if args.login_only: logger.warn("Exiting after login, as requested") return 0 return await run_openconnect(session_token, selected_profile, args.openconnect_args)