odps/security/auth_query_instance.go (56 lines of code) (raw):

package security import ( "encoding/xml" "time" "github.com/pkg/errors" ) const ( TerminatedStatus = "Terminated" FailedStatus = "Failed" RunningStatus = "Running" ) type AuthQueryInstance struct { result string sm *Manager authId string isSync bool } func newAuthQueryInstance(sm *Manager, authId string) *AuthQueryInstance { return &AuthQueryInstance{ sm: sm, authId: authId, } } func newAuthQueryInstanceWithResult(result string) *AuthQueryInstance { return &AuthQueryInstance{ result: result, isSync: true, } } func (ai *AuthQueryInstance) WaitForSuccess() (string, error) { if ai.isSync { return ai.result, nil } rb := ai.sm.rb() authResource := rb.AuthorizationId(ai.authId) client := ai.sm.restClient type ResModel struct { XMLName xml.Name `xml:"AuthorizationQuery"` Result string Status string } var resModel ResModel for { err := client.GetWithModel(authResource, nil, nil, &resModel) if err != nil { return "", err } if resModel.Status == TerminatedStatus { return resModel.Result, nil } if resModel.Status == FailedStatus { return "", errors.Errorf("Authorization query failed: %s", resModel.Result) } time.Sleep(time.Second * 1) } }