xborder commented on code in PR #2651: URL: https://github.com/apache/arrow-adbc/pull/2651#discussion_r2042041365
########## go/adbc/driver/flightsql/flightsql_database.go: ########## @@ -160,14 +162,78 @@ func (d *databaseImpl) SetOptions(cnOptions map[string]string) error { if p, ok := cnOptions[adbc.OptionKeyPassword]; ok { if d.hdrs.Len() > 0 { return adbc.Error{ - Msg: "Authorization header already provided, do not provide user/pass also", + Msg: "Authentication conflict: Use either Authorization header OR username/password parameter", Code: adbc.StatusInvalidArgument, } } d.pass = p delete(cnOptions, adbc.OptionKeyPassword) } + // if token exists it can by pass or apply token exchange + // else check oauth flow + if t, ok := cnOptions[adbc.OptionKeyToken]; ok { + if d.hdrs.Len() > 0 { + return adbc.Error{ + Msg: "Authentication conflict: Use either Authorization header OR token parameter", + Code: adbc.StatusInvalidArgument, + } + } + + // if contains token. it can bypass or use token exchange + if flow, ok := cnOptions[OptionKeyOauthFlow]; ok { + var flowVal int + var err error + if flowVal, err = strconv.Atoi(flow); err != nil || flowVal != TokenExchange { + return adbc.Error{ + Msg: "unsupported option", + Code: adbc.StatusInvalidArgument, + } + } + + tokExchange, err := newTokenExchangeFlow(cnOptions) + if err != nil { + return err + } + d.oauthFlow = tokExchange + delete(cnOptions, OptionKeyOauthFlow) + } else { + d.token = t + delete(cnOptions, adbc.OptionKeyToken) + } Review Comment: this was simplified ########## go/adbc/driver/flightsql/flightsql_database.go: ########## @@ -160,14 +162,78 @@ func (d *databaseImpl) SetOptions(cnOptions map[string]string) error { if p, ok := cnOptions[adbc.OptionKeyPassword]; ok { if d.hdrs.Len() > 0 { return adbc.Error{ - Msg: "Authorization header already provided, do not provide user/pass also", + Msg: "Authentication conflict: Use either Authorization header OR username/password parameter", Code: adbc.StatusInvalidArgument, } } d.pass = p delete(cnOptions, adbc.OptionKeyPassword) } + // if token exists it can by pass or apply token exchange + // else check oauth flow + if t, ok := cnOptions[adbc.OptionKeyToken]; ok { + if d.hdrs.Len() > 0 { + return adbc.Error{ + Msg: "Authentication conflict: Use either Authorization header OR token parameter", + Code: adbc.StatusInvalidArgument, + } + } + + // if contains token. it can bypass or use token exchange + if flow, ok := cnOptions[OptionKeyOauthFlow]; ok { + var flowVal int + var err error + if flowVal, err = strconv.Atoi(flow); err != nil || flowVal != TokenExchange { + return adbc.Error{ + Msg: "unsupported option", + Code: adbc.StatusInvalidArgument, + } + } + + tokExchange, err := newTokenExchangeFlow(cnOptions) + if err != nil { + return err + } + d.oauthFlow = tokExchange + delete(cnOptions, OptionKeyOauthFlow) + } else { + d.token = t + delete(cnOptions, adbc.OptionKeyToken) + } Review Comment: this was simplified and the code deleted -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: github-unsubscr...@arrow.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org