2017-05-10 04:03:25 +02:00
// hurry mod panel to get it faaaaaaaaaaaast
package router
import (
2017-05-10 19:17:07 +02:00
"fmt"
"html"
2017-05-10 04:03:25 +02:00
"html/template"
2017-05-10 05:54:12 +02:00
"net/http"
2017-05-10 05:24:18 +02:00
"path/filepath"
2017-05-10 05:54:12 +02:00
"strconv"
2017-05-10 04:03:25 +02:00
2017-05-10 05:24:18 +02:00
"github.com/ewhal/nyaa/service/comment"
2017-05-10 17:37:49 +02:00
"github.com/ewhal/nyaa/service/moderation"
2017-05-10 05:24:18 +02:00
"github.com/ewhal/nyaa/service/torrent"
"github.com/ewhal/nyaa/service/torrent/form"
2017-05-10 05:54:12 +02:00
"github.com/ewhal/nyaa/service/user"
form "github.com/ewhal/nyaa/service/user/form"
"github.com/ewhal/nyaa/service/user/permission"
2017-05-10 05:24:18 +02:00
"github.com/ewhal/nyaa/util/languages"
2017-05-10 19:17:07 +02:00
"github.com/ewhal/nyaa/util/log"
2017-05-10 05:24:18 +02:00
"github.com/ewhal/nyaa/util/modelHelper"
2017-05-10 19:17:07 +02:00
"github.com/ewhal/nyaa/util/search"
2017-05-10 16:43:50 +02:00
"github.com/gorilla/mux"
2017-05-10 04:03:25 +02:00
)
2017-05-10 17:37:49 +02:00
var panelIndex , panelTorrentList , panelUserList , panelCommentList , panelTorrentEd , torrentReportTemplate * template . Template
2017-05-10 05:54:12 +02:00
2017-05-10 04:03:25 +02:00
func init ( ) {
2017-05-10 05:24:18 +02:00
panelTorrentList = template . Must ( template . New ( "torrentlist" ) . Funcs ( FuncMap ) . ParseFiles ( filepath . Join ( TemplateDir , "admin_index.html" ) , filepath . Join ( TemplateDir , "admin/torrentlist.html" ) ) )
2017-05-10 17:37:49 +02:00
panelTorrentList = template . Must ( panelTorrentList . ParseGlob ( filepath . Join ( "templates" , "_*.html" ) ) )
2017-05-10 05:24:18 +02:00
panelUserList = template . Must ( template . New ( "userlist" ) . Funcs ( FuncMap ) . ParseFiles ( filepath . Join ( TemplateDir , "admin_index.html" ) , filepath . Join ( TemplateDir , "admin/userlist.html" ) ) )
2017-05-10 19:17:07 +02:00
panelUserList = template . Must ( panelUserList . ParseGlob ( filepath . Join ( "templates" , "_*.html" ) ) )
2017-05-10 04:03:25 +02:00
panelCommentList = template . Must ( template . New ( "commentlist" ) . Funcs ( FuncMap ) . ParseFiles ( filepath . Join ( TemplateDir , "admin_index.html" ) , filepath . Join ( TemplateDir , "admin/commentlist.html" ) ) )
2017-05-10 19:17:07 +02:00
panelCommentList = template . Must ( panelCommentList . ParseGlob ( filepath . Join ( "templates" , "_*.html" ) ) )
2017-05-10 05:24:18 +02:00
panelIndex = template . Must ( template . New ( "indexPanel" ) . Funcs ( FuncMap ) . ParseFiles ( filepath . Join ( TemplateDir , "admin_index.html" ) , filepath . Join ( TemplateDir , "admin/panelindex.html" ) ) )
2017-05-10 19:17:07 +02:00
panelIndex = template . Must ( panelIndex . ParseGlob ( filepath . Join ( "templates" , "_*.html" ) ) )
2017-05-10 17:37:49 +02:00
panelTorrentEd = template . Must ( template . New ( "torrent_ed" ) . Funcs ( FuncMap ) . ParseFiles ( filepath . Join ( TemplateDir , "admin_index.html" ) , filepath . Join ( TemplateDir , "admin/paneltorrentedit.html" ) ) )
2017-05-10 19:17:07 +02:00
panelTorrentEd = template . Must ( panelTorrentEd . ParseGlob ( filepath . Join ( "templates" , "_*.html" ) ) )
2017-05-10 17:37:49 +02:00
torrentReportTemplate = template . Must ( template . New ( "torrent_report" ) . Funcs ( FuncMap ) . ParseFiles ( filepath . Join ( TemplateDir , "admin_index.html" ) , filepath . Join ( TemplateDir , "admin/torrent_report.html" ) ) )
torrentReportTemplate = template . Must ( torrentReportTemplate . ParseGlob ( filepath . Join ( "templates" , "_*.html" ) ) )
2017-05-10 04:03:25 +02:00
}
2017-05-10 05:24:18 +02:00
func IndexModPanel ( w http . ResponseWriter , r * http . Request ) {
currentUser := GetUser ( r )
2017-05-10 05:54:12 +02:00
if userPermission . HasAdmin ( currentUser ) {
offset := 10
2017-05-10 05:24:18 +02:00
2017-05-10 16:43:50 +02:00
torrents , _ , _ := torrentService . GetAllTorrents ( offset , 0 )
users , _ := userService . RetrieveUsersForAdmin ( offset , 0 )
comments , _ := commentService . GetAllComments ( offset , 0 , "" , "" )
2017-05-10 19:17:07 +02:00
torrentReports , _ , _ := moderationService . GetTorrentReports ( offset , 0 , "" , "" )
2017-05-10 05:54:12 +02:00
languages . SetTranslationFromRequest ( panelIndex , r , "en-us" )
2017-05-10 19:17:07 +02:00
htv := PanelIndexVbs { torrents , torrentReports , users , comments , NewSearchForm ( ) , currentUser , r . URL }
2017-05-10 05:54:12 +02:00
_ = panelIndex . ExecuteTemplate ( w , "admin_index.html" , htv )
2017-05-10 08:18:58 +02:00
} else {
http . Error ( w , "admins only" , http . StatusForbidden )
2017-05-10 05:54:12 +02:00
}
2017-05-10 05:24:18 +02:00
}
func TorrentsListPanel ( w http . ResponseWriter , r * http . Request ) {
currentUser := GetUser ( r )
2017-05-10 05:54:12 +02:00
if userPermission . HasAdmin ( currentUser ) {
2017-05-10 16:43:50 +02:00
vars := mux . Vars ( r )
2017-05-10 19:17:07 +02:00
page := vars [ "page" ]
var err error
pagenum := 1
if page != "" {
pagenum , err = strconv . Atoi ( html . EscapeString ( page ) )
if ! log . CheckError ( err ) {
http . Error ( w , err . Error ( ) , http . StatusInternalServerError )
return
}
}
2017-05-10 05:54:12 +02:00
offset := 100
2017-05-10 05:24:18 +02:00
2017-05-10 19:17:07 +02:00
searchParam , torrents , _ , err := search . SearchByQuery ( r , pagenum )
2017-05-10 17:37:49 +02:00
searchForm := SearchForm {
SearchParam : searchParam ,
Category : searchParam . Category . String ( ) ,
HideAdvancedSearch : false ,
}
2017-05-10 05:54:12 +02:00
languages . SetTranslationFromRequest ( panelTorrentList , r , "en-us" )
2017-05-10 19:17:07 +02:00
htv := PanelTorrentListVbs { torrents , searchForm , Navigation { int ( searchParam . Max ) , offset , pagenum , "mod_tlist_page" } , currentUser , r . URL }
2017-05-10 17:37:49 +02:00
err = panelTorrentList . ExecuteTemplate ( w , "admin_index.html" , htv )
2017-05-10 07:47:01 +02:00
fmt . Println ( err )
2017-05-10 08:18:58 +02:00
} else {
http . Error ( w , "admins only" , http . StatusForbidden )
2017-05-10 05:54:12 +02:00
}
2017-05-10 05:24:18 +02:00
}
func UsersListPanel ( w http . ResponseWriter , r * http . Request ) {
currentUser := GetUser ( r )
2017-05-10 05:54:12 +02:00
if userPermission . HasAdmin ( currentUser ) {
2017-05-10 16:43:50 +02:00
vars := mux . Vars ( r )
2017-05-10 19:17:07 +02:00
page := vars [ "page" ]
var err error
pagenum := 1
if page != "" {
pagenum , err = strconv . Atoi ( html . EscapeString ( page ) )
if ! log . CheckError ( err ) {
http . Error ( w , err . Error ( ) , http . StatusInternalServerError )
return
}
}
2017-05-10 05:54:12 +02:00
offset := 100
2017-05-10 05:24:18 +02:00
2017-05-10 19:17:07 +02:00
users , nbUsers := userService . RetrieveUsersForAdmin ( offset , ( pagenum - 1 ) * offset )
2017-05-10 05:54:12 +02:00
languages . SetTranslationFromRequest ( panelUserList , r , "en-us" )
2017-05-10 19:17:07 +02:00
htv := PanelUserListVbs { users , NewSearchForm ( ) , Navigation { nbUsers , offset , pagenum , "mod_ulist_page" } , currentUser , r . URL }
err = panelUserList . ExecuteTemplate ( w , "admin_index.html" , htv )
2017-05-10 07:56:02 +02:00
fmt . Println ( err )
2017-05-10 08:18:58 +02:00
} else {
http . Error ( w , "admins only" , http . StatusForbidden )
2017-05-10 05:54:12 +02:00
}
2017-05-10 05:24:18 +02:00
}
2017-05-10 04:03:25 +02:00
func CommentsListPanel ( w http . ResponseWriter , r * http . Request ) {
2017-05-10 05:24:18 +02:00
currentUser := GetUser ( r )
2017-05-10 05:54:12 +02:00
if userPermission . HasAdmin ( currentUser ) {
2017-05-10 16:43:50 +02:00
vars := mux . Vars ( r )
2017-05-10 19:17:07 +02:00
page := vars [ "page" ]
var err error
pagenum := 1
if page != "" {
pagenum , err = strconv . Atoi ( html . EscapeString ( page ) )
if ! log . CheckError ( err ) {
http . Error ( w , err . Error ( ) , http . StatusInternalServerError )
return
}
}
2017-05-10 05:54:12 +02:00
offset := 100
2017-05-10 15:08:38 +02:00
userid := r . URL . Query ( ) . Get ( "userid" )
var conditions string
var values [ ] interface { }
2017-05-10 19:17:07 +02:00
if userid != "" {
2017-05-10 15:08:38 +02:00
conditions = "user_id = ?"
values = append ( values , userid )
}
2017-05-10 19:17:07 +02:00
comments , nbComments := commentService . GetAllComments ( offset , ( pagenum - 1 ) * offset , conditions , values ... )
2017-05-10 05:54:12 +02:00
languages . SetTranslationFromRequest ( panelCommentList , r , "en-us" )
2017-05-10 19:17:07 +02:00
htv := PanelCommentListVbs { comments , NewSearchForm ( ) , Navigation { nbComments , offset , pagenum , "mod_clist_page" } , currentUser , r . URL }
err = panelCommentList . ExecuteTemplate ( w , "admin_index.html" , htv )
2017-05-10 07:56:02 +02:00
fmt . Println ( err )
2017-05-10 08:18:58 +02:00
} else {
http . Error ( w , "admins only" , http . StatusForbidden )
2017-05-10 05:54:12 +02:00
}
2017-05-10 04:03:25 +02:00
}
func TorrentEditModPanel ( w http . ResponseWriter , r * http . Request ) {
2017-05-10 05:24:18 +02:00
currentUser := GetUser ( r )
2017-05-10 05:54:12 +02:00
if userPermission . HasAdmin ( currentUser ) {
id := r . URL . Query ( ) . Get ( "id" )
torrent , _ := torrentService . GetTorrentById ( id )
languages . SetTranslationFromRequest ( panelTorrentEd , r , "en-us" )
2017-05-10 17:37:49 +02:00
htv := PanelTorrentEdVbs { torrent , NewSearchForm ( ) , currentUser }
2017-05-10 07:56:02 +02:00
err := panelTorrentEd . ExecuteTemplate ( w , "admin_index.html" , htv )
fmt . Println ( err )
2017-05-10 08:18:58 +02:00
} else {
http . Error ( w , "admins only" , http . StatusForbidden )
2017-05-10 05:54:12 +02:00
}
2017-05-10 05:24:18 +02:00
}
func TorrentPostEditModPanel ( w http . ResponseWriter , r * http . Request ) {
currentUser := GetUser ( r )
2017-05-10 05:54:12 +02:00
if userPermission . HasAdmin ( currentUser ) {
b := torrentform . PanelPost { }
err := form . NewErrors ( )
infos := form . NewInfos ( )
modelHelper . BindValueForm ( & b , r )
err = modelHelper . ValidateForm ( & b , err )
id := r . URL . Query ( ) . Get ( "id" )
torrent , _ := torrentService . GetTorrentById ( id )
if torrent . ID > 0 {
modelHelper . AssignValue ( & torrent , & b )
if len ( err ) == 0 {
_ , errorT := torrentService . UpdateTorrent ( torrent )
if errorT != nil {
err [ "errors" ] = append ( err [ "errors" ] , errorT . Error ( ) )
}
if len ( err ) == 0 {
infos [ "infos" ] = append ( infos [ "infos" ] , "torrent_updated" )
}
2017-05-10 05:24:18 +02:00
}
2017-05-10 05:54:12 +02:00
}
languages . SetTranslationFromRequest ( panelTorrentEd , r , "en-us" )
2017-05-10 17:37:49 +02:00
htv := PanelTorrentEdVbs { torrent , NewSearchForm ( ) , currentUser }
2017-05-10 05:54:12 +02:00
_ = panelTorrentEd . ExecuteTemplate ( w , "admin_index.html" , htv )
2017-05-10 08:18:58 +02:00
} else {
http . Error ( w , "admins only" , http . StatusForbidden )
2017-05-10 05:24:18 +02:00
}
}
2017-05-10 04:03:25 +02:00
func CommentDeleteModPanel ( w http . ResponseWriter , r * http . Request ) {
currentUser := GetUser ( r )
2017-05-10 05:24:18 +02:00
id := r . URL . Query ( ) . Get ( "id" )
2017-05-10 05:54:12 +02:00
if userPermission . HasAdmin ( currentUser ) {
_ = form . NewErrors ( )
2017-05-10 05:24:18 +02:00
_ , _ = userService . DeleteComment ( id )
2017-05-10 09:10:23 +02:00
url , _ := Router . Get ( "mod_clist" ) . URL ( )
2017-05-10 04:03:25 +02:00
http . Redirect ( w , r , url . String ( ) + "?deleted" , http . StatusSeeOther )
2017-05-10 08:18:58 +02:00
} else {
http . Error ( w , "admins only" , http . StatusForbidden )
2017-05-10 04:03:25 +02:00
}
}
func TorrentDeleteModPanel ( w http . ResponseWriter , r * http . Request ) {
currentUser := GetUser ( r )
2017-05-10 05:24:18 +02:00
id := r . URL . Query ( ) . Get ( "id" )
2017-05-10 05:54:12 +02:00
if userPermission . HasAdmin ( currentUser ) {
_ = form . NewErrors ( )
2017-05-10 05:24:18 +02:00
_ , _ = torrentService . DeleteTorrent ( id )
2017-05-10 09:10:23 +02:00
url , _ := Router . Get ( "mod_tlist" ) . URL ( )
2017-05-10 04:03:25 +02:00
http . Redirect ( w , r , url . String ( ) + "?deleted" , http . StatusSeeOther )
2017-05-10 08:18:58 +02:00
} else {
http . Error ( w , "admins only" , http . StatusForbidden )
2017-05-10 04:03:25 +02:00
}
2017-05-10 19:17:07 +02:00
}