mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-11-04 00:11:04 +00:00 
			
		
		
		
	Result of running `perl -p -i -e 's#interface\{\}#any#g' **/*` and `make fmt`.
Basically the same [as golang did](2580d0e08d).
		
	
			
		
			
				
	
	
		
			63 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2021 The Gitea Authors. All rights reserved.
 | 
						|
// SPDX-License-Identifier: MIT
 | 
						|
 | 
						|
package helper
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"io"
 | 
						|
	"net/http"
 | 
						|
	"net/url"
 | 
						|
 | 
						|
	packages_model "code.gitea.io/gitea/models/packages"
 | 
						|
	"code.gitea.io/gitea/modules/context"
 | 
						|
	"code.gitea.io/gitea/modules/log"
 | 
						|
	"code.gitea.io/gitea/modules/setting"
 | 
						|
)
 | 
						|
 | 
						|
// LogAndProcessError logs an error and calls a custom callback with the processed error message.
 | 
						|
// If the error is an InternalServerError the message is stripped if the user is not an admin.
 | 
						|
func LogAndProcessError(ctx *context.Context, status int, obj any, cb func(string)) {
 | 
						|
	var message string
 | 
						|
	if err, ok := obj.(error); ok {
 | 
						|
		message = err.Error()
 | 
						|
	} else if obj != nil {
 | 
						|
		message = fmt.Sprintf("%s", obj)
 | 
						|
	}
 | 
						|
	if status == http.StatusInternalServerError {
 | 
						|
		log.ErrorWithSkip(1, message)
 | 
						|
 | 
						|
		if setting.IsProd && (ctx.Doer == nil || !ctx.Doer.IsAdmin) {
 | 
						|
			message = ""
 | 
						|
		}
 | 
						|
	} else {
 | 
						|
		log.Debug(message)
 | 
						|
	}
 | 
						|
 | 
						|
	if cb != nil {
 | 
						|
		cb(message)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// Serves the content of the package file
 | 
						|
// If the url is set it will redirect the request, otherwise the content is copied to the response.
 | 
						|
func ServePackageFile(ctx *context.Context, s io.ReadSeekCloser, u *url.URL, pf *packages_model.PackageFile, forceOpts ...*context.ServeHeaderOptions) {
 | 
						|
	if u != nil {
 | 
						|
		ctx.Redirect(u.String())
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	defer s.Close()
 | 
						|
 | 
						|
	var opts *context.ServeHeaderOptions
 | 
						|
	if len(forceOpts) > 0 {
 | 
						|
		opts = forceOpts[0]
 | 
						|
	} else {
 | 
						|
		opts = &context.ServeHeaderOptions{
 | 
						|
			Filename:     pf.Name,
 | 
						|
			LastModified: pf.CreatedUnix.AsLocalTime(),
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	ctx.ServeContent(s, opts)
 | 
						|
}
 |