コードを共通化するために。
前回まで
http://ytyaru.hatenablog.com/entry/2017/11/22/000000
対象箇所
おもにAPIを叩く部分のコードが抽象化の対象になる。
- 認証データ
- APIクライアント
認証データ取得元
コマンド | 認証データ取得元 |
---|---|
GitHubUserRegister.py | 起動引数 |
GitHubUploader.py | DB |
認証データ
また、認証にはいくつもの方法があり、それぞれ必要なキーが異なる。
そこで、認証データ生成を抽象化してみる。
認証方法 | pythonクラス |
---|---|
Basic | ユーザ名、パスワード|BasicAuthenticationUserFactory.py |
Two Factor | ユーザ名、パスワード、OTP|TwoFactorAuthenticationUserFactory.py |
OAuth WebApplication | client_id、client_secret、code, state, AccessToken|WebApplicationAuthenticationUserFactory.py |
OAuth Non-WebApplication | AccessToken|OAuthAuthenticationUserFactory.py |
SAML SSO | 組織に登録されたAccessToken|SamlSsoAuthenticationUserFactory.py |
クラスの継承関係。
- AGitHubUserFactory.py
- BasicAuthenticationUserFactory.py
- TwoFactorAuthenticationUserFactory.py
- OAuthNonWebApplicationUserFactory.py
- SamlSsoAuthenticationUserFactory.py
- OAuthWebApplicationUserFactory.py
- BasicAuthenticationUserFactory.py
GitHubAPI実行における認証方法
- APIによってはTokenに特定のScopeが必要な場合がある
- APIによってはBasic認証しかできないことがある
- 2FA有効アカウントならBasic認証時にOTPが必要となる
- GitHubビジネスプランのアカウントならSAML SSOを使うことができる
AGitHubUserFactory.py
- メソッド
- ヘッダの作成
BasicAuthenticationUserFactory.py
- プロパティ
- ユーザ名
- パスワード
TwoFactorAuthenticationUserFactory.py
- プロパティ
- Secret
- ワンタイムパスワード
X-GitHub-OTP:
OAuthNonWebApplicationUserFactory.py
- プロパティ
- Token
- メソッド
- ヘッダの作成
Authorization: token {TOKEN}
SamlSsoAuthenticationUserFactory.py
- プロパティ
- Token
- メソッド
- Tokenを組織に登録
- ヘッダの作成
所感
こんなイメージで次回はざっくり大枠をコードで書いてみる。