import sys
import argparse
from iclientpy.rest.apifactory import APIFactory
from iclientpy.rest.api.model import PostTokenParameter, ClientType
[文档]def get_parser():
parser = argparse.ArgumentParser(epilog='for more information , visit<http://iclientpy.supermap.io/>.', description="""
获取token
""")
require_group = parser.add_argument_group('必选参数')
require_group.add_argument('-l', '--uri', dest='address', help='服务地址,如:http://localhost:8090/iserver')
require_group.add_argument('-u', '--user', dest='username', help='用户名')
require_group.add_argument('-p', '--password', dest='password', help='密码')
require_group.add_argument('-c', '--client_type', dest='client_type',
choices=['IP', 'Referer', 'RequestIP', 'NONE'],
help='发放令牌的方式。支持以下四个取值,分别对应四种发放令牌的方式:IP,即指定的 IP 地址;Referer,即指定的 URL;RequestIP,即发送申请令牌请求的客户端 IP;NONE,即不做任何验证。')
require_group.add_argument('-e', '--expiration', dest='expiration',
help='申请令牌的有效期,默认单位为分钟,支持单位m(分),h(小时),d(天),w(周),M(月),y(年)')
optional_group = parser.add_argument_group('可选参数')
optional_group.add_argument('--ip', dest='ip', help='clientType=IP 时,必选。 如果按照指定 IP 的方式申请令牌,则传递相应的 IP 地址。')
optional_group.add_argument('--referer', dest='referer',
help='clientType=Referer 时,必选。如果按照指定 URL 的方式申请令牌,则传递相应的 URL。')
return parser
minutes_per_unit = {"m": 1, "h": 60, "d": 1440, "w": 10080, "M": 43200, 'y': 525600}
[文档]def convert_to_minutes(s):
return int(s) if s[-1].isdigit() else int(s[:-1]) * minutes_per_unit[s[-1]]
[文档]def main(argv=sys.argv[1:]):
parser = get_parser()
try:
if not argv:
parser.print_usage()
parser.exit(1)
args = parser.parse_known_args(argv)[0]
d = vars(args)
d = dict((k, v) for k, v in d.items() if not (v is None))
# interact(d)
api = APIFactory(d['address'], d['username'], d['password'])
security = api.security_service()
param = PostTokenParameter()
param.userName = d['username']
param.password = d['password']
param.expiration = convert_to_minutes(d['expiration'])
param.clientType = d['client_type']
if 'ip' in d:
param.ip = d['ip']
if 'refer' in d:
param.referer = d['refer']
tokenstr = security.post_tokens(param)
print(tokenstr)
except SystemExit as err:
return err.code
return 0
if __name__ == '__main__':
main()