basic upload
Cette révision appartient à :
Parent
7ec7de96ea
révision
ce16601bcc
7 fichiers modifiés avec 164 ajouts et 31 suppressions
1
main.go
1
main.go
|
@ -29,7 +29,6 @@ func RunServer(conf *config.Config) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
conf := config.NewConfig()
|
conf := config.NewConfig()
|
||||||
conf_bind := conf.BindFlags()
|
conf_bind := conf.BindFlags()
|
||||||
defaults := flag.Bool("print-defaults", false, "print the default configuration file on stdout")
|
defaults := flag.Bool("print-defaults", false, "print the default configuration file on stdout")
|
||||||
|
|
|
@ -28,4 +28,5 @@ func init() {
|
||||||
Router.HandleFunc("/faq", FaqHandler).Name("faq")
|
Router.HandleFunc("/faq", FaqHandler).Name("faq")
|
||||||
Router.HandleFunc("/feed", RssHandler).Name("feed")
|
Router.HandleFunc("/feed", RssHandler).Name("feed")
|
||||||
Router.HandleFunc("/view/{id}", ViewHandler).Name("view_torrent")
|
Router.HandleFunc("/view/{id}", ViewHandler).Name("view_torrent")
|
||||||
|
Router.HandleFunc("/upload", UploadHandler).Name("upload")
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package router
|
package router
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/gorilla/mux"
|
|
||||||
"github.com/ewhal/nyaa/model"
|
"github.com/ewhal/nyaa/model"
|
||||||
|
"github.com/gorilla/mux"
|
||||||
"net/url"
|
"net/url"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -14,28 +14,35 @@ import (
|
||||||
|
|
||||||
type FaqTemplateVariables struct {
|
type FaqTemplateVariables struct {
|
||||||
Navigation Navigation
|
Navigation Navigation
|
||||||
Search SearchForm
|
Search SearchForm
|
||||||
URL *url.URL // For parsing Url in templates
|
URL *url.URL // For parsing Url in templates
|
||||||
Route *mux.Route // For getting current route in templates
|
Route *mux.Route // For getting current route in templates
|
||||||
}
|
}
|
||||||
|
|
||||||
type ViewTemplateVariables struct {
|
type ViewTemplateVariables struct {
|
||||||
Torrent model.TorrentsJson
|
Torrent model.TorrentsJson
|
||||||
Search SearchForm
|
Search SearchForm
|
||||||
Navigation Navigation
|
Navigation Navigation
|
||||||
URL *url.URL // For parsing Url in templates
|
URL *url.URL // For parsing Url in templates
|
||||||
Route *mux.Route // For getting current route in templates
|
Route *mux.Route // For getting current route in templates
|
||||||
}
|
}
|
||||||
|
|
||||||
type HomeTemplateVariables struct {
|
type HomeTemplateVariables struct {
|
||||||
ListTorrents []model.TorrentsJson
|
ListTorrents []model.TorrentsJson
|
||||||
ListCategories []model.Categories
|
ListCategories []model.Categories
|
||||||
Search SearchForm
|
Search SearchForm
|
||||||
Navigation Navigation
|
Navigation Navigation
|
||||||
URL *url.URL // For parsing Url in templates
|
URL *url.URL // For parsing Url in templates
|
||||||
Route *mux.Route // For getting current route in templates
|
Route *mux.Route // For getting current route in templates
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type UploadTemplateVariables struct {
|
||||||
|
Upload UploadForm
|
||||||
|
Search SearchForm
|
||||||
|
Navigation Navigation
|
||||||
|
URL *url.URL
|
||||||
|
Route *mux.Route
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Variables used by the upper ones
|
* Variables used by the upper ones
|
||||||
|
@ -48,31 +55,52 @@ type Navigation struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type SearchForm struct {
|
type SearchForm struct {
|
||||||
Query string
|
Query string
|
||||||
Status string
|
Status string
|
||||||
Category string
|
Category string
|
||||||
Sort string
|
Sort string
|
||||||
Order string
|
Order string
|
||||||
HideAdvancedSearch bool
|
HideAdvancedSearch bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type UploadForm struct {
|
||||||
|
Name string
|
||||||
|
Magnet string
|
||||||
|
Category string
|
||||||
|
Description string
|
||||||
|
}
|
||||||
|
|
||||||
// Some Default Values to ease things out
|
// Some Default Values to ease things out
|
||||||
func NewSearchForm(params ...string) SearchForm {
|
func NewSearchForm(params ...string) SearchForm {
|
||||||
searchForm := SearchForm{}
|
searchForm := SearchForm{}
|
||||||
if (len(params) > 1) {
|
if len(params) > 1 {
|
||||||
searchForm.Category = params[0]
|
searchForm.Category = params[0]
|
||||||
} else {
|
} else {
|
||||||
searchForm.Category = "_"
|
searchForm.Category = "_"
|
||||||
}
|
}
|
||||||
if (len(params) > 2) {
|
if len(params) > 2 {
|
||||||
searchForm.Sort = params[0]
|
searchForm.Sort = params[1]
|
||||||
} else {
|
} else {
|
||||||
searchForm.Sort = "torrent_id"
|
searchForm.Sort = "torrent_id"
|
||||||
}
|
}
|
||||||
if (len(params) > 3) {
|
if len(params) > 3 {
|
||||||
searchForm.Order = params[0]
|
searchForm.Order = params[2]
|
||||||
} else {
|
} else {
|
||||||
searchForm.Order = "DESC"
|
searchForm.Order = "DESC"
|
||||||
}
|
}
|
||||||
return searchForm
|
return searchForm
|
||||||
}
|
}
|
||||||
|
func NewUploadForm(params ...string) UploadForm {
|
||||||
|
uploadForm := UploadForm{}
|
||||||
|
if len(params) > 1 {
|
||||||
|
uploadForm.Category = params[0]
|
||||||
|
} else {
|
||||||
|
uploadForm.Category = "3_12"
|
||||||
|
}
|
||||||
|
if len(params) > 2 {
|
||||||
|
uploadForm.Description = params[1]
|
||||||
|
} else {
|
||||||
|
uploadForm.Description = "Description"
|
||||||
|
}
|
||||||
|
return uploadForm
|
||||||
|
}
|
||||||
|
|
35
router/uploadHandler.go
Fichier normal
35
router/uploadHandler.go
Fichier normal
|
@ -0,0 +1,35 @@
|
||||||
|
package router
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gorilla/mux"
|
||||||
|
"html/template"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
func UploadHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
var templates = template.Must(template.New("upload").Funcs(FuncMap).ParseFiles("templates/index.html", "templates/upload.html"))
|
||||||
|
templates.ParseGlob("templates/_*.html") // common
|
||||||
|
|
||||||
|
var uploadForm UploadForm
|
||||||
|
if r.Method == "POST" {
|
||||||
|
err := r.ParseForm()
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
}
|
||||||
|
uploadForm = UploadForm{
|
||||||
|
r.Form.Get("name"),
|
||||||
|
r.Form.Get("magnet"),
|
||||||
|
r.Form.Get("c"),
|
||||||
|
r.Form.Get("desc"),
|
||||||
|
}
|
||||||
|
//validate name + hash
|
||||||
|
//add to db and redirect depending on result
|
||||||
|
}
|
||||||
|
|
||||||
|
htv := UploadTemplateVariables{uploadForm, NewSearchForm(), Navigation{}, r.URL, mux.CurrentRoute(r)}
|
||||||
|
|
||||||
|
err := templates.ExecuteTemplate(w, "index.html", htv)
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,15 +1,15 @@
|
||||||
package router
|
package router
|
||||||
|
|
||||||
import(
|
import (
|
||||||
"net/http"
|
|
||||||
"html/template"
|
|
||||||
"github.com/gorilla/mux"
|
|
||||||
"github.com/ewhal/nyaa/service/torrent"
|
"github.com/ewhal/nyaa/service/torrent"
|
||||||
|
"github.com/gorilla/mux"
|
||||||
|
"html/template"
|
||||||
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
func ViewHandler(w http.ResponseWriter, r *http.Request) {
|
func ViewHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
var templates = template.Must(template.New("view").Funcs(FuncMap).ParseFiles("templates/index.html", "templates/view.html"))
|
var templates = template.Must(template.New("view").Funcs(FuncMap).ParseFiles("templates/index.html", "templates/view.html"))
|
||||||
templates.ParseGlob("templates/_*.html") // common
|
templates.ParseGlob("templates/_*.html") // common
|
||||||
vars := mux.Vars(r)
|
vars := mux.Vars(r)
|
||||||
id := vars["id"]
|
id := vars["id"]
|
||||||
|
|
||||||
|
@ -22,4 +22,4 @@ func ViewHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
||||||
<ul class="nav navbar-nav">
|
<ul class="nav navbar-nav">
|
||||||
<li><a href="https://sukebei.pantsu.cat">Fap</a></li>
|
<li><a href="https://sukebei.pantsu.cat">Fap</a></li>
|
||||||
|
<li><a href="{{.URL.Parse "/upload"}}">Upload</a/></li>
|
||||||
<li><a href="{{.URL.Parse "/faq"}}">FAQ</a></li>
|
<li><a href="{{.URL.Parse "/faq"}}">FAQ</a></li>
|
||||||
<li><a href="irc://irc.rizon.net/nyaapantsu">IRC</a></li>
|
<li><a href="irc://irc.rizon.net/nyaapantsu">IRC</a></li>
|
||||||
<li><a href="{{ genRouteWithQuery "feed" .URL }}">RSS</a></li>
|
<li><a href="{{ genRouteWithQuery "feed" .URL }}">RSS</a></li>
|
||||||
|
|
69
templates/upload.html
Fichier normal
69
templates/upload.html
Fichier normal
|
@ -0,0 +1,69 @@
|
||||||
|
{{define "title"}}Upload magnet{{end}}
|
||||||
|
{{define "content"}}
|
||||||
|
<div class="blockBody">
|
||||||
|
{{with .Upload}}
|
||||||
|
<hr>
|
||||||
|
<form role="upload" method="POST">
|
||||||
|
<table class="table table-borderless">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<div class="col-xs-6">
|
||||||
|
<input type="text" name="name" class="form-control"placeholder="File Name" value="{{.Name}}" required>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<div class="col-xs-8">
|
||||||
|
<input type="text" name="magnet" class="form-control"
|
||||||
|
style="width:60rem" placeholder="Magnet Link" value="{{.Magnet}}" required>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<div class="col-xs-4">
|
||||||
|
<select name="c" class="form-control input-sm">
|
||||||
|
<option value="3_" {{if eq .Category "3_"}}selected{{end}}>Anime</option>
|
||||||
|
<option value="3_12" {{if eq .Category "3_12"}}selected{{end}}>Anime - Anime Music Video</option>
|
||||||
|
<option value="3_5" {{if eq .Category "3_5"}}selected{{end}}>Anime - English-translated</option>
|
||||||
|
<option value="3_13" {{if eq .Category "3_13"}}selected{{end}}>Anime - Non-English-translated</option>
|
||||||
|
<option value="3_6" {{if eq .Category "3_6"}}selected{{end}}>Anime - Raw</option>
|
||||||
|
<option value="2_" {{if eq .Category "2_"}}selected{{end}}>Audio</option>
|
||||||
|
<option value="2_3" {{if eq .Category "2_3"}}selected{{end}}>Audio - Lossless</option>
|
||||||
|
<option value="2_4" {{if eq .Category "2_4"}}selected{{end}}>Audio - Lossy</option>
|
||||||
|
<option value="4_" {{if eq .Category "4_"}}selected{{end}}>Literature</option>
|
||||||
|
<option value="4_7" {{if eq .Category "4_7"}}selected{{end}}>Literature - English-translated</option>
|
||||||
|
<option value="4_8" {{if eq .Category "4_8"}}selected{{end}}>Literature - Raw</option>
|
||||||
|
<option value="4_14" {{if eq .Category "4_14"}}selected{{end}}>Literature - Non-English-translated</option>
|
||||||
|
<option value="5_" {{if eq .Category "5_"}}selected{{end}}>Live Action</option>
|
||||||
|
<option value="5_9" {{if eq .Category "5_9"}}selected{{end}}>Live Action - English-translated</option>
|
||||||
|
<option value="5_10" {{if eq .Category "5_10"}}selected{{end}}>Live Action - Idol/Promotional Video</option>
|
||||||
|
<option value="5_18" {{if eq .Category "5_18"}}selected{{end}}>Live Action - Non-English-translated</option>
|
||||||
|
<option value="5_11" {{if eq .Category "5_11"}}selected{{end}}>Live Action - Raw</option>
|
||||||
|
<option value="6_" {{if eq .Category "6_"}}selected{{end}}>Pictures</option>
|
||||||
|
<option value="6_15" {{if eq .Category "6_15"}}selected{{end}}>Pictures - Graphics</option>
|
||||||
|
<option value="6_16" {{if eq .Category "6_16"}}selected{{end}}>Pictures - Photos</option>
|
||||||
|
<option value="1_" {{if eq .Category "1_"}}selected{{end}}>Software</option>
|
||||||
|
<option value="1_1" {{if eq .Category "1_1"}}selected{{end}}>Software - Applications</option>
|
||||||
|
<option value="1_2" {{if eq .Category "1_2"}}selected{{end}}>Software - Games</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<div class="col-xs-7">
|
||||||
|
<textarea name="desc" class="form-control" rows="10">{{.Description}}</textarea>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<button type="submit" class="btn">Upload!</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
|
{{end}}
|
Référencer dans un nouveau ticket