# coding:utf-8
"""
REST API for authorization
Copyright (C) 2020 JASRI All Rights Reserved.
"""
import json
import requests
from . import config
from . import util
[docs]class Main():
def __init__(self, parent):
self.__parent = parent
self.login = Login(self)
self.logout = Logout(self)
self.userinfo = UserInfo(self)
self.refresh_token = RefreshToken(self)
[docs] def endpoint(self, path):
return self.__parent.endpoint(path)
[docs] def access_token(self):
return self.__parent.access_token()
[docs]class Login():
def __init__(self, parent):
self.__parent = parent
self.__endpoint = parent.endpoint(config.auth_login_path)
[docs] def post(self, **v):
"""
REST API: ログイン認証
* Endpoint: [agent-url]/benten/v1/auth/login
* Method: POST
* Response: JSON
* Authorization: 無
:param: \**v:
See below
:Keyword Arguments:
* *username* (``str``) : ユーザー名
* *password* (``str``) : パスワード
* *access_ip* (``str`` [Option]) : アクセス元の IPアドレス (Web portalで利用)
:return:
A dict of mapping keys.
:Keyword:
* *accesss_token* (``str``) : アクセストークン
* *refresh_token* (``str``): リフレッシュトークン
* *expires_in* (``int``) : アクセストークンが失効するまでの時間 (秒)
* *error* (``dict``): エラー情報 (エラー発生時のみ付加)
"""
vdata = {}
for key in ["username", "password", "access_ip"]:
if key in v:
vdata[key] = v[key]
ret = requests.post(self.__endpoint, vdata, verify=False)
return util.json_response(ret)
[docs]class Logout():
def __init__(self, parent):
self.__parent = parent
self.__endpoint = parent.endpoint(config.auth_logout_path)
[docs] def post(self, **v):
"""
REST API: ログアウト
* Endpoint: [agent-url]/benten/v1/auth/logout
* Method: POST
* Response: JSON
* Authorization: 有
:param: \**v:
指定なし
:return:
A dict of mapping keys.
:Keyword:
* *deleted* (``bool``) : アクセストークンが消去された場合は True 、そうでない場合は False
* *error* (``dict``) : エラー情報 (エラー発生時のみ付加)
Error messages:
* access_token was not deleted : アクセストークンが消去されなかった
"""
ret = requests.post(self.__endpoint, verify=False,
headers=util.headers_authorization(self.__parent.access_token()))
return util.json_response(ret)
[docs]class RefreshToken():
def __init__(self, parent):
self.__parent = parent
self.__endpoint = parent.endpoint(config.auth_refresh_token_path)
[docs] def post(self, **v):
"""
REST API: リフレッシュトークン
* Endpoint: [agent-url]/benten/v1/auth/refresh_token
* Method: POST
* Response: JSON
* Authorization: 有
:param: \**v:
See below
:Keyword Arguments:
* *refresh_token* (``str``) : リフレッシュトークン
:return:
A dict of mapping keys.
:Keyword:
* *access_token* (``str``) : アクセストークン
* *refresh_token* (``str``) : リフレッシュトークン
* *expires_in* (``int``) : アクセストークンが失効するまでの時間(秒)
* *expires_time* (``int``) : アクセストークンが失効するunix時間
* *error* (``dict``) : エラー情報 (エラー発生時のみ付加)
Error messages:
* Bad Request : 間違ったrefresh_tokenを指定した場合
* access_token is not valid : アクセストークンの正当性が保証されていない
"""
vdata = {}
for key in ["refresh_token"]:
vdata[key] = v[key]
ret = requests.post(self.__endpoint, vdata, verify=False)
return util.json_response(ret)
[docs]class UserInfo():
def __init__(self, parent):
self.__parent = parent
self.__endpoint = parent.endpoint(config.auth_userinfo_path)
[docs] def post(self, **v):
"""
REST API: ユーザー属性取得
* Endpoint: [agent-url]/benten/v1/auth/userinfo
* Method: POST
* Response: JSON
* Authorization: 有
:param: \**v:
指定なし
:return:
A dict of mapping keys.
:Keyword:
* *username* (``str``) : ユーザー名
* *profile* (``string``) : プロファイル名 (user, facility, admin)
* *facility* (``string``) : 施設名
* *email* (``string``) : メールアドレス
* *error* (``dict``) : エラー情報 (エラー発生時のみ付加)
Error messages:
* Unauthorized : 認証されていない
"""
ret = requests.post(self.__endpoint, verify=False,
headers=util.headers_authorization(self.__parent.access_token()))
return util.json_response(ret)