You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: request.go
    path of file: ./repos/goldfish/handlers
    
    the code of the file until where you have to start completion: package handlers

import (
	"net/http"
	"strings"

	"github.com/caiyeon/goldfish/request"
	"github.com/caiyeon/goldfish/slack"
	"github.com/caiyeon/goldfish/vault"
	"github.com/labstack/echo"
)

// Finds a request and returns the details, if the user has vault permissions to read the resources
func GetRequest() echo.HandlerFunc {
	return func(c echo.Context) error {
		// fetch auth from header
		auth := getSession(c)
		if auth == nil {
			return nil
		}
		defer auth.Clear()

		// fetch request from cubbyhole
		req, err := request.Get(auth, c.FormValue("hash"))
		if err != nil {
			// if error contains 403 from vault, forward it to the user
			if strings.Contains(err.Error(), "Code: 403. Error
    
func RejectRequest() echo.HandlerFunc {
	return func(c echo.Context) error {
		// fetch auth from header
		auth := getSession(c)
		if auth == nil {
			return nil
		}
		defer auth.Clear()

		hash := c.FormValue("hash")
		if hash == "" {
			return c.JSON(http.StatusBadRequest, H{
				"error": "'hash' parameter is required",
			})
		}

		if err := request.Reject(auth, hash); err != nil {
			// if error contains 403 from vault, forward it to the user
			if strings.Contains(err.Error(), "Code: 403. Errors:\n\n* permission denied") {
				return c.JSON(http.StatusForbidden, H{
					"error": err.Error(),
				})
			} else {
				return c.JSON(http.StatusBadRequest, H{
					"error": err.Error(),
				})
			}
		}

		return c.JSON(http.StatusOK, H{
			"result": "success",
		})
	}
}