code.gitea.io/gitea@v1.22.3/routers/web/repo/middlewares.go (about)

     1  // Copyright 2020 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package repo
     5  
     6  import (
     7  	"fmt"
     8  	"strconv"
     9  
    10  	system_model "code.gitea.io/gitea/models/system"
    11  	user_model "code.gitea.io/gitea/models/user"
    12  	"code.gitea.io/gitea/modules/git"
    13  	"code.gitea.io/gitea/modules/optional"
    14  	"code.gitea.io/gitea/services/context"
    15  	user_service "code.gitea.io/gitea/services/user"
    16  )
    17  
    18  // SetEditorconfigIfExists set editor config as render variable
    19  func SetEditorconfigIfExists(ctx *context.Context) {
    20  	if ctx.Repo.Repository.IsEmpty {
    21  		return
    22  	}
    23  
    24  	ec, _, err := ctx.Repo.GetEditorconfig()
    25  
    26  	if err != nil && !git.IsErrNotExist(err) {
    27  		description := fmt.Sprintf("Error while getting .editorconfig file: %v", err)
    28  		if err := system_model.CreateRepositoryNotice(description); err != nil {
    29  			ctx.ServerError("ErrCreatingReporitoryNotice", err)
    30  		}
    31  		return
    32  	}
    33  
    34  	ctx.Data["Editorconfig"] = ec
    35  }
    36  
    37  // SetDiffViewStyle set diff style as render variable
    38  func SetDiffViewStyle(ctx *context.Context) {
    39  	queryStyle := ctx.FormString("style")
    40  
    41  	if !ctx.IsSigned {
    42  		ctx.Data["IsSplitStyle"] = queryStyle == "split"
    43  		return
    44  	}
    45  
    46  	var (
    47  		userStyle = ctx.Doer.DiffViewStyle
    48  		style     string
    49  	)
    50  
    51  	if queryStyle == "unified" || queryStyle == "split" {
    52  		style = queryStyle
    53  	} else if userStyle == "unified" || userStyle == "split" {
    54  		style = userStyle
    55  	} else {
    56  		style = "unified"
    57  	}
    58  
    59  	ctx.Data["IsSplitStyle"] = style == "split"
    60  
    61  	opts := &user_service.UpdateOptions{
    62  		DiffViewStyle: optional.Some(style),
    63  	}
    64  	if err := user_service.UpdateUser(ctx, ctx.Doer, opts); err != nil {
    65  		ctx.ServerError("UpdateUser", err)
    66  	}
    67  }
    68  
    69  // SetWhitespaceBehavior set whitespace behavior as render variable
    70  func SetWhitespaceBehavior(ctx *context.Context) {
    71  	const defaultWhitespaceBehavior = "show-all"
    72  	whitespaceBehavior := ctx.FormString("whitespace")
    73  	switch whitespaceBehavior {
    74  	case "", "ignore-all", "ignore-eol", "ignore-change":
    75  		break
    76  	default:
    77  		whitespaceBehavior = defaultWhitespaceBehavior
    78  	}
    79  	if ctx.IsSigned {
    80  		userWhitespaceBehavior, err := user_model.GetUserSetting(ctx, ctx.Doer.ID, user_model.SettingsKeyDiffWhitespaceBehavior, defaultWhitespaceBehavior)
    81  		if err == nil {
    82  			if whitespaceBehavior == "" {
    83  				whitespaceBehavior = userWhitespaceBehavior
    84  			} else if whitespaceBehavior != userWhitespaceBehavior {
    85  				_ = user_model.SetUserSetting(ctx, ctx.Doer.ID, user_model.SettingsKeyDiffWhitespaceBehavior, whitespaceBehavior)
    86  			}
    87  		} // else: we can ignore the error safely
    88  	}
    89  
    90  	// these behaviors are for gitdiff.GetWhitespaceFlag
    91  	if whitespaceBehavior == "" {
    92  		ctx.Data["WhitespaceBehavior"] = defaultWhitespaceBehavior
    93  	} else {
    94  		ctx.Data["WhitespaceBehavior"] = whitespaceBehavior
    95  	}
    96  }
    97  
    98  // SetShowOutdatedComments set the show outdated comments option as context variable
    99  func SetShowOutdatedComments(ctx *context.Context) {
   100  	showOutdatedCommentsValue := ctx.FormString("show-outdated")
   101  	if showOutdatedCommentsValue != "true" && showOutdatedCommentsValue != "false" {
   102  		// invalid or no value for this form string -> use default or stored user setting
   103  		showOutdatedCommentsValue = "true"
   104  		if ctx.IsSigned {
   105  			showOutdatedCommentsValue, _ = user_model.GetUserSetting(ctx, ctx.Doer.ID, user_model.SettingsKeyShowOutdatedComments, showOutdatedCommentsValue)
   106  		}
   107  	} else if ctx.IsSigned {
   108  		// valid value -> update user setting if user is logged in
   109  		_ = user_model.SetUserSetting(ctx, ctx.Doer.ID, user_model.SettingsKeyShowOutdatedComments, showOutdatedCommentsValue)
   110  	}
   111  	ctx.Data["ShowOutdatedComments"], _ = strconv.ParseBool(showOutdatedCommentsValue)
   112  }