mirror of
https://github.com/phishingclub/phishingclub.git
synced 2026-10-12 01:58:53 +02:00
Initial open source release
This commit is contained in:
commit
11cf01f08e
488 files changed
+97180
No files matched your search
@@ -0,0 +1,230 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/phishingclub/phishingclub/database"
|
||||
"github.com/phishingclub/phishingclub/model"
|
||||
"github.com/phishingclub/phishingclub/repository"
|
||||
"github.com/phishingclub/phishingclub/service"
|
||||
)
|
||||
|
||||
// PageColumnsMap is a map between the frontend and the backend
|
||||
// so the frontend has user friendly names instead of direct references
|
||||
// to the database schema
|
||||
// this is tied to a slice in the repository package
|
||||
var PageColumnsMap = map[string]string{
|
||||
"created_at": repository.TableColumn(database.PAGE_TABLE, "created_at"),
|
||||
"updated_at": repository.TableColumn(database.PAGE_TABLE, "updated_at"),
|
||||
"name": repository.TableColumn(database.PAGE_TABLE, "name"),
|
||||
}
|
||||
|
||||
// Page is a Page controller
|
||||
type Page struct {
|
||||
Common
|
||||
PageService *service.Page
|
||||
TemplateService *service.Template
|
||||
}
|
||||
|
||||
// Create creates a page
|
||||
func (p *Page) Create(g *gin.Context) {
|
||||
// handle session
|
||||
session, _, ok := p.handleSession(g)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
// parse req
|
||||
var req model.Page
|
||||
if ok := p.handleParseRequest(g, &req); !ok {
|
||||
return
|
||||
}
|
||||
// save page
|
||||
id, err := p.PageService.Create(
|
||||
g.Request.Context(),
|
||||
session,
|
||||
&req,
|
||||
)
|
||||
// handle response
|
||||
if ok := p.handleErrors(g, err); !ok {
|
||||
return
|
||||
}
|
||||
p.Response.OK(
|
||||
g,
|
||||
gin.H{
|
||||
"id": id.String(),
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
// GetContentByID serves a page by id
|
||||
func (p *Page) GetContentByID(g *gin.Context) {
|
||||
session, _, ok := p.handleSession(g)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
// parse request
|
||||
id, ok := p.handleParseIDParam(g)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
// get page
|
||||
page, err := p.PageService.GetByID(
|
||||
g,
|
||||
session,
|
||||
id,
|
||||
&repository.PageOption{},
|
||||
)
|
||||
// handle response
|
||||
if ok := p.handleErrors(g, err); !ok {
|
||||
return
|
||||
}
|
||||
content, err := page.Content.Get()
|
||||
if ok := p.handleErrors(g, err); !ok {
|
||||
return
|
||||
}
|
||||
// build response
|
||||
phishingPage, err := p.TemplateService.ApplyPageMock(content.String())
|
||||
if ok := p.handleErrors(g, err); !ok {
|
||||
return
|
||||
}
|
||||
p.Response.OK(g, phishingPage.String())
|
||||
}
|
||||
|
||||
// GetAll gets pages using pagination
|
||||
func (p *Page) GetAll(g *gin.Context) {
|
||||
session, _, ok := p.handleSession(g)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
// parse request
|
||||
queryArgs, ok := p.handleQueryArgs(g)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
queryArgs.DefaultSortByUpdatedAt()
|
||||
companyID := companyIDFromRequestQuery(g)
|
||||
// get pages
|
||||
pages, err := p.PageService.GetAll(
|
||||
g,
|
||||
session,
|
||||
companyID,
|
||||
&repository.PageOption{
|
||||
QueryArgs: queryArgs,
|
||||
},
|
||||
)
|
||||
// handle response
|
||||
if ok := p.handleErrors(g, err); !ok {
|
||||
return
|
||||
}
|
||||
p.Response.OK(g, pages)
|
||||
}
|
||||
|
||||
// GetOverview gets pages overview using pagination
|
||||
func (p *Page) GetOverview(g *gin.Context) {
|
||||
session, _, ok := p.handleSession(g)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
// parse request
|
||||
queryArgs, ok := p.handleQueryArgs(g)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
queryArgs.DefaultSortByUpdatedAt()
|
||||
companyID := companyIDFromRequestQuery(g)
|
||||
// get pages
|
||||
pages, err := p.PageService.GetAll(
|
||||
g,
|
||||
session,
|
||||
companyID,
|
||||
&repository.PageOption{
|
||||
Fields: []string{"id", "created_at", "updated_at", "name", "company_id"},
|
||||
QueryArgs: queryArgs,
|
||||
},
|
||||
)
|
||||
// handle response
|
||||
if ok := p.handleErrors(g, err); !ok {
|
||||
return
|
||||
}
|
||||
p.Response.OK(g, pages)
|
||||
}
|
||||
|
||||
// GetByID gets a page by id
|
||||
func (p *Page) GetByID(g *gin.Context) {
|
||||
session, _, ok := p.handleSession(g)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
// parse request
|
||||
id, ok := p.handleParseIDParam(g)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
// get page
|
||||
page, err := p.PageService.GetByID(
|
||||
g.Request.Context(),
|
||||
session,
|
||||
id,
|
||||
// do I really need to preload this?
|
||||
&repository.PageOption{
|
||||
WithCompany: true,
|
||||
},
|
||||
)
|
||||
// handle response
|
||||
if ok := p.handleErrors(g, err); !ok {
|
||||
return
|
||||
}
|
||||
p.Response.OK(g, page)
|
||||
}
|
||||
|
||||
// UpdateByID updates a page by id
|
||||
func (p *Page) UpdateByID(g *gin.Context) {
|
||||
session, _, ok := p.handleSession(g)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
// parse request
|
||||
id, ok := p.handleParseIDParam(g)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
var req model.Page
|
||||
if ok := p.handleParseRequest(g, &req); !ok {
|
||||
return
|
||||
}
|
||||
// update page
|
||||
err := p.PageService.UpdateByID(
|
||||
g.Request.Context(),
|
||||
session,
|
||||
id,
|
||||
&req,
|
||||
)
|
||||
// handle response
|
||||
if ok := p.handleErrors(g, err); !ok {
|
||||
return
|
||||
}
|
||||
p.Response.OK(g, gin.H{})
|
||||
}
|
||||
|
||||
// DeleteByID deletes a page by id
|
||||
func (p *Page) DeleteByID(g *gin.Context) {
|
||||
session, _, ok := p.handleSession(g)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
// parse request
|
||||
id, ok := p.handleParseIDParam(g)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
// delete page
|
||||
err := p.PageService.DeleteByID(
|
||||
g.Request.Context(),
|
||||
session,
|
||||
id,
|
||||
)
|
||||
// handle response
|
||||
if ok := p.handleErrors(g, err); !ok {
|
||||
return
|
||||
}
|
||||
p.Response.OK(g, gin.H{})
|
||||
}
|
||||
Reference in new issue
Block a user