よくあるフローってのは Google の API ドキュメントを読んでたらよくでてくるやつ(Calendar API の例)。つまり:
- 前回のアクセストークンが保存されていたらそれを使い、なかったら
- localhost にサーバを立て、redirect_uri をそこに設定した認可のための URL をユーザに提示し、
- code を受け取ったらアクセストークンと交換し、
- トークンを保存する。
みたいな一連の流れ。これまでどの部分を抽象化したらいいのかあまり感覚がわからなくて手を出してなかったんだけど、いいかげん面倒なので書いてみた次第。
oauth2util package - github.com/motemen/go-nuts/oauth2util - pkg.go.dev
使い方は簡単で
import "github.com/motemen/go-nuts/oauth2util" ... oauthClient, err = (&oauth2util.Config{ OAuth2Config: oauth2Config, Name: "myprog", }).CreateOAuth2Client(context.Background())
とする。Name をもとにしたパスにトークンが保存される(<UserCacheDir>/<Name>/token.json
)。トークンの復元・保存とかまではしなくていいよって場合は Config.AuthorizeByTemporaryServer() ってのを使えばおk。