やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

GitHubアップローダの抽象化について考えてみた

コードを共通化するために。

前回まで

http://ytyaru.hatenablog.com/entry/2017/11/22/000000

対象箇所

おもにAPIを叩く部分のコードが抽象化の対象になる。

  1. 認証データ
  2. 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

GitHubAPI実行における認証方法

  • APIによってはTokenに特定のScopeが必要な場合がある
  • APIによってはBasic認証しかできないことがある
  • 2FA有効アカウントならBasic認証時にOTPが必要となる
  • GitHubビジネスプランのアカウントならSAML SSOを使うことができる

AGitHubUserFactory.py

  • メソッド
    • ヘッダの作成

BasicAuthenticationUserFactory.py

  • プロパティ
    • ユーザ名
    • パスワード

TwoFactorAuthenticationUserFactory.py

X-GitHub-OTP:

OAuthNonWebApplicationUserFactory.py

  • プロパティ
    • Token
  • メソッド
    • ヘッダの作成

Authorization: token {TOKEN}

SamlSsoAuthenticationUserFactory.py

  • プロパティ
    • Token
  • メソッド
    • Tokenを組織に登録
    • ヘッダの作成

所感

こんなイメージで次回はざっくり大枠をコードで書いてみる。