Source code for benten_client.rest_auth

# 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)