-
Notifications
You must be signed in to change notification settings - Fork 0
/
user_csv_import_handler.go
98 lines (83 loc) · 2.91 KB
/
user_csv_import_handler.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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package admin
import (
"encoding/csv"
"errors"
"fmt"
"net/http"
"github.com/askasoft/pango-xdemo/app/handlers"
"github.com/askasoft/pango-xdemo/app/jobs"
"github.com/askasoft/pango-xdemo/app/models"
"github.com/askasoft/pango-xdemo/app/tenant"
"github.com/askasoft/pango-xdemo/app/utils/tbsutil"
"github.com/askasoft/pango/iox"
"github.com/askasoft/pango/str"
"github.com/askasoft/pango/tbs"
"github.com/askasoft/pango/xin"
)
var UserCsvImportJobCtrl = handlers.NewJobHandler(newUserCsvImportJobController)
func newUserCsvImportJobController() handlers.JobCtrl {
jc := &UserCsvImportJobController{
JobController: handlers.JobController{
Name: jobs.JobNameUserCsvImport,
Template: "admin/user_csv_import_job",
},
}
return jc
}
type UserCsvImportJobController struct {
handlers.JobController
}
func (ucijc *UserCsvImportJobController) Start(c *xin.Context) {
mfh, err := c.FormFile("file")
if err != nil {
err = errors.New(tbs.GetText(c.Locale, "csv.error.required"))
c.AddError(err)
c.JSON(http.StatusBadRequest, handlers.E(c))
return
}
tt := tenant.FromCtx(c)
if err = ucijc.SetFile(tt, mfh); err != nil {
err = fmt.Errorf(tbs.GetText(c.Locale, "csv.error.read"), err)
c.AddError(err)
c.JSON(http.StatusBadRequest, handlers.E(c))
return
}
ucia := &jobs.UserCsvImportArg{Locale: c.Locale}
ucijc.SetParam(ucia)
ucijc.JobController.Start(c)
}
func UserCsvImportSample(c *xin.Context) {
c.SetAttachmentHeader("users_import_sample.csv")
_, _ = c.Writer.WriteString(string(iox.BOM))
cw := csv.NewWriter(c.Writer)
cw.UseCRLF = true
err := cw.Write([]string{
tbs.GetText(c.Locale, "user.id"),
tbs.GetText(c.Locale, "user.name"),
tbs.GetText(c.Locale, "user.email"),
tbs.GetText(c.Locale, "user.role"),
tbs.GetText(c.Locale, "user.status"),
tbs.GetText(c.Locale, "user.password"),
tbs.GetText(c.Locale, "user.cidr"),
})
if err != nil {
c.Logger.Error(err)
return
}
sm := tbsutil.GetUserStatusMap(c.Locale)
rm := tbsutil.GetUserRoleMap(c.Locale)
domain := c.Request.Host
data := [][]string{
{"101", "admin", "admin@" + domain, rm.MustGet(models.RoleAdmin), sm.MustGet(models.UserActive), str.RandLetterNumbers(16), "127.0.0.1/32\n192.168.1.1/32"},
{"102", "editor", "editor@" + domain, rm.MustGet(models.RoleEditor), sm.MustGet(models.UserActive), str.RandLetterNumbers(16), "127.0.0.1/32\n192.168.1.1/32"},
{"103", "viewer", "viewer@" + domain, rm.MustGet(models.RoleViewer), sm.MustGet(models.UserActive), str.RandLetterNumbers(16), "127.0.0.1/32\n192.168.1.1/32"},
{"104", "api", "api@" + domain, rm.MustGet(models.RoleApiOnly), sm.MustGet(models.UserActive), str.RandLetterNumbers(16), "127.0.0.1/32\n192.168.1.1/32"},
{"", "disabled", "disabled@" + domain, rm.MustGet(models.RoleViewer), sm.MustGet(models.UserDisabled), str.RandLetterNumbers(16), "127.0.0.1/32\n192.168.1.1/32"},
}
err = cw.WriteAll(data)
if err != nil {
c.Logger.Error(err)
return
}
cw.Flush()
}