Skip to content

Commit 68c2454

Browse files
committed
impl oidc
1 parent 8369db2 commit 68c2454

27 files changed

Lines changed: 363 additions & 66 deletions

cmd/config.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import (
2121
"github.com/traPtitech/traQ/service/fcm"
2222
"github.com/traPtitech/traQ/service/imaging"
2323
"github.com/traPtitech/traQ/service/message"
24+
"github.com/traPtitech/traQ/service/oidc"
25+
"github.com/traPtitech/traQ/service/rbac"
2426
"github.com/traPtitech/traQ/service/search"
2527
"github.com/traPtitech/traQ/service/variable"
2628
"github.com/traPtitech/traQ/utils/storage"
@@ -469,6 +471,10 @@ func provideImageProcessorConfig(c *Config) imaging.Config {
469471
}
470472
}
471473

474+
func provideOIDCService(c *Config, repo repository.Repository, rbac rbac.RBAC) *oidc.Service {
475+
return oidc.NewOIDCService(repo, c.Origin, rbac)
476+
}
477+
472478
func provideAuthGithubProviderConfig(c *Config) auth.GithubProviderConfig {
473479
return auth.GithubProviderConfig{
474480
ClientID: c.ExternalAuth.GitHub.ClientID,
@@ -530,6 +536,7 @@ func provideRouterExternalAuthConfig(c *Config) router.ExternalAuthConfig {
530536

531537
func provideRouterConfig(c *Config) *router.Config {
532538
return &router.Config{
539+
Origin: c.Origin,
533540
Development: c.DevMode,
534541
Version: Version,
535542
Revision: Revision,

cmd/serve.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ func serveCommand() *cobra.Command {
8181
}
8282
logger.Info("repository was set up")
8383

84-
// JWT for QRCode
84+
// JWT
8585
if priv := c.JWT.Keys.Private; priv != "" {
8686
privRaw, err := os.ReadFile(priv)
8787
if err != nil {

cmd/serve_wire.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ func newServer(hub *hub.Hub, db *gorm.DB, repo repository.Repository, fs storage
5454
provideServerOriginString,
5555
provideFirebaseCredentialsFilePathString,
5656
provideImageProcessorConfig,
57+
provideOIDCService,
5758
provideRouterConfig,
5859
provideESEngineConfig,
5960
wire.Struct(new(service.Services), "*"),

cmd/wire_gen.go

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

go.mod

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ go 1.22.2
55
require (
66
cloud.google.com/go/profiler v0.4.0
77
firebase.google.com/go v3.13.0+incompatible
8+
github.com/MicahParks/jwkset v0.3.1
89
github.com/NYTimes/gziphandler v1.1.1
910
github.com/aws/aws-sdk-go-v2 v1.26.1
1011
github.com/aws/aws-sdk-go-v2/config v1.27.11
@@ -50,6 +51,7 @@ require (
5051
github.com/spf13/pflag v1.0.5
5152
github.com/spf13/viper v1.18.2
5253
github.com/stretchr/testify v1.9.0
54+
github.com/zitadel/oidc v1.13.4
5355
go.uber.org/zap v1.27.0
5456
golang.org/x/crypto v0.23.0
5557
golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842
@@ -127,6 +129,7 @@ require (
127129
github.com/google/uuid v1.6.0 // indirect
128130
github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
129131
github.com/googleapis/gax-go/v2 v2.12.4 // indirect
132+
github.com/gorilla/securecookie v1.1.2 // indirect
130133
github.com/hashicorp/hcl v1.0.0 // indirect
131134
github.com/hpcloud/tail v1.0.0 // indirect
132135
github.com/imdario/mergo v0.3.12 // indirect
@@ -157,8 +160,8 @@ require (
157160
github.com/sagikazarmark/locafero v0.4.0 // indirect
158161
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
159162
github.com/sanity-io/litter v1.5.5 // indirect
160-
github.com/sergi/go-diff v1.0.0 // indirect
161-
github.com/sirupsen/logrus v1.8.1 // indirect
163+
github.com/sergi/go-diff v1.2.0 // indirect
164+
github.com/sirupsen/logrus v1.9.0 // indirect
162165
github.com/sourcegraph/conc v0.3.0 // indirect
163166
github.com/spf13/afero v1.11.0 // indirect
164167
github.com/spf13/cast v1.6.0 // indirect
@@ -192,6 +195,7 @@ require (
192195
google.golang.org/protobuf v1.34.1 // indirect
193196
gopkg.in/fsnotify.v1 v1.4.7 // indirect
194197
gopkg.in/ini.v1 v1.67.0 // indirect
198+
gopkg.in/square/go-jose.v2 v2.6.0 // indirect
195199
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
196200
gopkg.in/yaml.v2 v2.4.0 // indirect
197201
moul.io/http2curl/v2 v2.3.0 // indirect

go.sum

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ firebase.google.com/go v3.13.0+incompatible/go.mod h1:xlah6XbEyW6tbfSklcfe5FHJIw
2424
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8=
2525
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
2626
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
27+
github.com/MicahParks/jwkset v0.3.1 h1:DIVazR/elD8CLWPblrVo610TzovIDYMcvlM4X0UT0vQ=
28+
github.com/MicahParks/jwkset v0.3.1/go.mod h1:Ob0sxSgMmQZFg4GO59PVBnfm+jtdQ1MJbfZDU90tEwM=
2729
github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg=
2830
github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE=
2931
github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I=
@@ -211,6 +213,8 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN
211213
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
212214
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
213215
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
216+
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
217+
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
214218
github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw=
215219
github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
216220
github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 h1:hR7/MlvK23p6+lIw9SN1TigNLn9ZnF3W4SYRKq2gAHs=
@@ -231,6 +235,8 @@ github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfF
231235
github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
232236
github.com/googleapis/gax-go/v2 v2.12.4 h1:9gWcmF85Wvq4ryPFvGFaOgPIs1AQX0d0bcbGw4Z96qg=
233237
github.com/googleapis/gax-go/v2 v2.12.4/go.mod h1:KYEYLorsnIGDi/rPC8b5TdlB9kbKoFubselGIoBMCwI=
238+
github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kXD8ePA=
239+
github.com/gorilla/securecookie v1.1.2/go.mod h1:NfCASbcHqRSY+3a8tlWJwsQap2VX5pwzwo4h3eOamfo=
234240
github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY=
235241
github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=
236242
github.com/guregu/null v4.0.0+incompatible h1:4zw0ckM7ECd6FNNddc3Fu4aty9nTlpkkzH7dPn4/4Gw=
@@ -366,11 +372,13 @@ github.com/sanity-io/litter v1.5.5/go.mod h1:9gzJgR2i4ZpjZHsKvUXIRQVk7P+yM3e+jAF
366372
github.com/sapphi-red/midec v0.5.2 h1:7R69uT6BMyWT+XGkBTI14TqgRNCBa5qo+bFgr5OSPIg=
367373
github.com/sapphi-red/midec v0.5.2/go.mod h1:LjZZZoars2NdhvLzAsC7MoGmxHzWUqiRY6r73gXqBmo=
368374
github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg=
369-
github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=
370375
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
376+
github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
377+
github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
371378
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
372-
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
373379
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
380+
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
381+
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
374382
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=
375383
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M=
376384
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
@@ -393,6 +401,7 @@ github.com/stretchr/testify v0.0.0-20161117074351-18a02ba4a312/go.mod h1:a8OnRci
393401
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
394402
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
395403
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
404+
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
396405
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
397406
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
398407
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
@@ -434,6 +443,8 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
434443
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
435444
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
436445
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
446+
github.com/zitadel/oidc v1.13.4 h1:+k2GKqP9Ld9S2MSFlj+KaNsoZ3J9oy+Ezw51EzSFuC8=
447+
github.com/zitadel/oidc v1.13.4/go.mod h1:3h2DhUcP02YV6q/CA/BG4yla0o6rXjK+DkJGK/dwJfw=
437448
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
438449
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
439450
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg=
@@ -555,6 +566,7 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc
555566
golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
556567
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
557568
golang.org/x/sys v0.0.0-20220712014510-0a85c31ab51e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
569+
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
558570
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
559571
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
560572
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -649,16 +661,20 @@ google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFW
649661
google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
650662
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
651663
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
664+
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
652665
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
653666
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
654667
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
655668
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
656669
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
657670
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
658671
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
672+
gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI=
673+
gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
659674
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
660675
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
661676
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
677+
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
662678
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
663679
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
664680
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=

migration/current.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ func Migrations() []*gormigrate.Migration {
4545
v32(), // ユーザーの表示名上限を32文字に
4646
v33(), // 未読テーブルにチャンネルIDカラムを追加 / インデックス類の更新 / 不要なレコードの削除
4747
v34(), // 未読テーブルのcreated_atカラムをメッセージテーブルを元に更新 / カラム名を変更
48+
v35(), // OIDC実装のためProfileロールを追加
4849
}
4950
}
5051

migration/v35.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package migration
2+
3+
import (
4+
"github.com/go-gormigrate/gormigrate/v2"
5+
"gorm.io/gorm"
6+
)
7+
8+
// v35 OIDC実装のためProfileロールを追加
9+
func v35() *gormigrate.Migration {
10+
return &gormigrate.Migration{
11+
ID: "35",
12+
Migrate: func(db *gorm.DB) error {
13+
v := v35UserRole{
14+
Name: "profile",
15+
Oauth2Scope: true,
16+
System: true,
17+
Permissions: []v35RolePermission{
18+
{
19+
Role: "profile",
20+
Permission: "get_me",
21+
},
22+
},
23+
}
24+
return db.Create(v).Error
25+
},
26+
}
27+
}
28+
29+
type v35UserRole struct {
30+
Name string `gorm:"type:varchar(30);not null;primaryKey"`
31+
Oauth2Scope bool `gorm:"type:boolean;not null;default:false"`
32+
System bool `gorm:"type:boolean;not null;default:false"`
33+
34+
Permissions []v35RolePermission `gorm:"constraint:user_role_permissions_role_user_roles_name_foreign,OnUpdate:CASCADE,OnDelete:CASCADE;foreignKey:Role;references:Name"`
35+
}
36+
37+
func (*v35UserRole) TableName() string {
38+
return "user_roles"
39+
}
40+
41+
type v35RolePermission struct {
42+
Role string `gorm:"type:varchar(30);not null;primaryKey"`
43+
Permission string `gorm:"type:varchar(30);not null;primaryKey"`
44+
}
45+
46+
func (*v35RolePermission) TableName() string {
47+
return "user_role_permissions"
48+
}

model/oauth2.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111

1212
vd "github.com/go-ozzo/ozzo-validation/v4"
1313
"github.com/gofrs/uuid"
14+
"github.com/samber/lo"
1415
"gorm.io/gorm"
1516

1617
"github.com/traPtitech/traQ/utils/validator"
@@ -28,6 +29,11 @@ type AccessScope string
2829
// AccessScopes AccessScopeのセット
2930
type AccessScopes map[AccessScope]struct{}
3031

32+
// SupportedAccessScopes 対応するスコープ一覧を返します
33+
func SupportedAccessScopes() []string {
34+
return []string{"read", "write", "manage_bot", "openid", "profile"}
35+
}
36+
3137
// Value database/sql/driver.Valuer 実装
3238
func (arr AccessScopes) Value() (driver.Value, error) {
3339
return arr.String(), nil
@@ -112,7 +118,8 @@ func (arr AccessScopes) StringArray() (r []string) {
112118
// Validate github.com/go-ozzo/ozzo-validation.Validatable 実装
113119
func (arr AccessScopes) Validate() error {
114120
// TODO カスタムスコープに対応
115-
return vd.Validate(arr.StringArray(), vd.Each(vd.Required, vd.In("read", "write", "manage_bot")))
121+
scopes := lo.Map(SupportedAccessScopes(), func(s string, _ int) any { return s })
122+
return vd.Validate(arr.StringArray(), vd.Each(vd.Required, vd.In(scopes...)))
116123
}
117124

118125
// OAuth2Authorize OAuth2 認可データの構造体
@@ -226,9 +233,13 @@ func (t *OAuth2Token) GetAvailableScopes(request AccessScopes) (result AccessSco
226233
return
227234
}
228235

236+
func (t *OAuth2Token) Deadline() time.Time {
237+
return t.CreatedAt.Add(time.Duration(t.ExpiresIn) * time.Second)
238+
}
239+
229240
// IsExpired 有効期限が切れているかどうか
230241
func (t *OAuth2Token) IsExpired() bool {
231-
return t.CreatedAt.Add(time.Duration(t.ExpiresIn) * time.Second).Before(time.Now())
242+
return t.Deadline().Before(time.Now())
232243
}
233244

234245
// IsRefreshEnabled リフレッシュトークンが有効かどうか

router/config.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88

99
// Config APIサーバー設定
1010
type Config struct {
11+
// Origin サーバーオリジン (e.g. https://q.trap.jp)
12+
Origin string
1113
// 開発モードかどうか
1214
Development bool
1315
// Version サーバーバージョン
@@ -66,6 +68,7 @@ func (c ExternalAuthConfig) ValidProviders() map[string]bool {
6668

6769
func provideOAuth2Config(c *Config) oauth2.Config {
6870
return oauth2.Config{
71+
Origin: c.Origin,
6972
AccessTokenExp: c.AccessTokenExp,
7073
IsRefreshEnabled: c.IsRefreshEnabled,
7174
}

0 commit comments

Comments
 (0)