-
Notifications
You must be signed in to change notification settings - Fork 0
/
redirection.go
57 lines (43 loc) · 1.3 KB
/
redirection.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package support
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/log"
"github.com/refiber/framework/constant"
)
func (s *support) Redirect() *redirect {
return &redirect{s}
}
type redirect struct {
support *support
}
func (r *redirect) Back() *redirectOptions {
return &redirectOptions{support: r.support}
}
// TODO: add to external url (https://inertiajs.com/redirects)
func (r *redirect) To(location string) *redirectOptions {
return &redirectOptions{location: &location, support: r.support}
}
type MessageType string
const (
MessageTypeInfo MessageType = "info"
MessageTypeError MessageType = "error"
MessageTypeWarning MessageType = "warning"
MessageTypeSuccess MessageType = "success"
)
type redirectOptions struct {
location *string
support *support
}
func (ro *redirectOptions) WithMessage(messageType MessageType, message string) *redirectOptions {
m := fiber.Map{"type": string(messageType), "message": message}
if err := saveTempSession(ro.support, constant.KeyFlashMessage, &m); err != nil {
log.Errorw("refiber.support.redirection.WithMessage: failed to save session")
}
return ro
}
func (ro *redirectOptions) Now() error {
if ro.location == nil {
return ro.support.GetCtx().RedirectBack("/", 303)
}
return ro.support.GetCtx().Redirect(*ro.location, 303)
}