12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- // Copyright 2022 The Gitea Authors. All rights reserved.
- // SPDX-License-Identifier: MIT
-
- package context
-
- import (
- "fmt"
- "net/http"
- "strings"
-
- org_model "code.gitea.io/gitea/models/organization"
- user_model "code.gitea.io/gitea/models/user"
- "code.gitea.io/gitea/modules/context"
- )
-
- // UserAssignmentWeb returns a middleware to handle context-user assignment for web routes
- func UserAssignmentWeb() func(ctx *context.Context) {
- return func(ctx *context.Context) {
- userAssignment(ctx, func(status int, title string, obj interface{}) {
- err, ok := obj.(error)
- if !ok {
- err = fmt.Errorf("%s", obj)
- }
- if status == http.StatusNotFound {
- ctx.NotFound(title, err)
- } else {
- ctx.ServerError(title, err)
- }
- })
- }
- }
-
- // UserAssignmentAPI returns a middleware to handle context-user assignment for api routes
- func UserAssignmentAPI() func(ctx *context.APIContext) {
- return func(ctx *context.APIContext) {
- userAssignment(ctx.Context, ctx.Error)
- }
- }
-
- func userAssignment(ctx *context.Context, errCb func(int, string, interface{})) {
- username := ctx.Params(":username")
-
- if ctx.IsSigned && ctx.Doer.LowerName == strings.ToLower(username) {
- ctx.ContextUser = ctx.Doer
- } else {
- var err error
- ctx.ContextUser, err = user_model.GetUserByName(ctx, username)
- if err != nil {
- if user_model.IsErrUserNotExist(err) {
- if redirectUserID, err := user_model.LookupUserRedirect(username); err == nil {
- context.RedirectToUser(ctx, username, redirectUserID)
- } else if user_model.IsErrUserRedirectNotExist(err) {
- errCb(http.StatusNotFound, "GetUserByName", err)
- } else {
- errCb(http.StatusInternalServerError, "LookupUserRedirect", err)
- }
- } else {
- errCb(http.StatusInternalServerError, "GetUserByName", err)
- }
- } else {
- if ctx.ContextUser.IsOrganization() {
- if ctx.Org == nil {
- ctx.Org = &context.Organization{}
- }
- ctx.Org.Organization = (*org_model.Organization)(ctx.ContextUser)
- ctx.Data["Org"] = ctx.Org.Organization
- }
- }
- }
- }
|