1
1
import argparse
2
2
import enum
3
3
import logging
4
+ import os
4
5
5
6
import openconnect_sso
6
- from openconnect_sso import app
7
+ from openconnect_sso import app , config
7
8
8
9
9
10
def create_argparser ():
10
11
parser = argparse .ArgumentParser (
11
12
prog = "openconnect-sso" , description = openconnect_sso .__description__
12
13
)
13
- parser .add_argument (
14
+
15
+ server_settings = parser .add_argument_group ("Server connection" )
16
+ server_settings .add_argument (
14
17
"-p" ,
15
18
"--profile" ,
16
19
dest = "profile_path" ,
17
20
help = "Use a profile from this file or directory" ,
18
- default = "/opt/cisco/anyconnect/profile" ,
19
21
)
20
22
21
- parser .add_argument (
23
+ server_settings .add_argument (
22
24
"-P" ,
23
25
"--profile-selector" ,
24
26
dest = "use_profile_selector" ,
@@ -27,6 +29,20 @@ def create_argparser():
27
29
default = False ,
28
30
)
29
31
32
+ server_settings .add_argument (
33
+ "-s" ,
34
+ "--server" ,
35
+ help = "VPN server to connect to. The following forms are accepted: "
36
+ "vpn.server.com, vpn.server.com/usergroup, "
37
+ "https://vpn.server.com, https.vpn.server.com.usergroup" ,
38
+ )
39
+ server_settings .add_argument (
40
+ "-g" ,
41
+ "--usergroup" ,
42
+ help = "Override usergroup setting from --server argument" ,
43
+ default = "" ,
44
+ )
45
+
30
46
parser .add_argument (
31
47
"--login-only" ,
32
48
help = "Complete authentication but do not acquire a session token or initiate a connection" ,
@@ -57,8 +73,9 @@ def create_argparser():
57
73
58
74
59
75
class LogLevel (enum .IntEnum ):
60
- INFO = logging .INFO
76
+ ERROR = logging .ERROR
61
77
WARNING = logging .WARNING
78
+ INFO = logging .INFO
62
79
DEBUG = logging .DEBUG
63
80
64
81
def __str__ (self ):
@@ -76,4 +93,20 @@ def choices(cls):
76
93
def main ():
77
94
parser = create_argparser ()
78
95
args = parser .parse_args ()
96
+
97
+ if (args .profile_path or args .use_profile_selector ) and (
98
+ args .server or args .usergroup
99
+ ):
100
+ parser .error (
101
+ "--profile/--profile-selector and --server/--usergroup are mutually exclusive"
102
+ )
103
+
104
+ if not args .profile_path and not args .server and not config .load ().default_profile :
105
+ if os .path .exists ("/opt/cisco/anyconnect/profiles" ):
106
+ args .profile_path = "/opt/cisco/anyconnect/profiles"
107
+ else :
108
+ parser .error (
109
+ "No Anyconnect profile can be found. One of --profile or --server arguments required."
110
+ )
111
+
79
112
return app .run (args )
0 commit comments