(c *gin.Context)
| 120 | } |
| 121 | |
| 122 | func handleUserOAuthCallback(c *gin.Context) (res gin.H, status int, err error) { |
| 123 | r := struct { |
| 124 | Provider string `json:"provider" form:"provider" uri:"provider" binding:"required"` |
| 125 | }{} |
| 126 | |
| 127 | _ = c.ShouldBindUri(&r) |
| 128 | |
| 129 | err = c.ShouldBind(&r) |
| 130 | if err != nil { |
| 131 | status = http.StatusBadRequest |
| 132 | return |
| 133 | } |
| 134 | |
| 135 | var projectDB *gorp.DbMap |
| 136 | projectDB, err = getCurrentProjectDB(c) |
| 137 | if err != nil { |
| 138 | err = errors.Wrapf(err, "get project database failed") |
| 139 | status = http.StatusBadRequest |
| 140 | return |
| 141 | } |
| 142 | |
| 143 | var miscConfig *model.ProjectMiscConfig |
| 144 | _, miscConfig, err = model.GetProjectMiscConfig(projectDB) |
| 145 | if err != nil || !miscConfig.IsEnabled() { |
| 146 | err = errors.Wrapf(err, "project is disabled for service") |
| 147 | status = http.StatusForbidden |
| 148 | return |
| 149 | } |
| 150 | |
| 151 | var oauthConfig *model.ProjectOAuthConfig |
| 152 | _, oauthConfig, err = model.GetProjectOAuthConfig(projectDB, r.Provider) |
| 153 | if err != nil { |
| 154 | _ = c.Error(err) |
| 155 | err = ErrGetProjectConfigFailed |
| 156 | status = http.StatusForbidden |
| 157 | return |
| 158 | } |
| 159 | |
| 160 | if !oauthConfig.IsEnabled() { |
| 161 | status = http.StatusForbidden |
| 162 | err = errors.New("oauth provider disabled") |
| 163 | return |
| 164 | } |
| 165 | |
| 166 | ch := make(chan *userOAuthCallbackPayload, 1) |
| 167 | |
| 168 | auth.HandleUserCallback( |
| 169 | c, |
| 170 | r.Provider, |
| 171 | oauthConfig.ClientID, |
| 172 | oauthConfig.ClientSecret, |
| 173 | handleUserOAuthCallbackSuccess(c, miscConfig, projectDB, r.Provider, ch), |
| 174 | func(err error) { |
| 175 | resp := &userOAuthCallbackPayload{ |
| 176 | err: err, |
| 177 | status: http.StatusBadRequest, |
| 178 | } |
| 179 | select { |
no test coverage detected