summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Pointner <equinox@helsinki.at>2015-12-13 00:36:41 (GMT)
committerChristian Pointner <equinox@helsinki.at>2015-12-13 00:36:41 (GMT)
commitcccba3ce2e7a5797c84c78bce7e8d24fdcb8fce7 (patch)
treebd47642c036facf30b693a4c6a93131a14301f1d /src
parent60a2313659b57f66d502d44729b6b78f07bd3883 (diff)
GroupName should now be only supplied for music pools
added context SanityCheck before fetching files
Diffstat (limited to 'src')
-rw-r--r--src/helsinki.at/rhimport/fetcher.go1
-rw-r--r--src/helsinki.at/rhimport/importer.go34
-rw-r--r--src/helsinki.at/rhimportd/ctrlWebSimple.go10
3 files changed, 34 insertions, 11 deletions
diff --git a/src/helsinki.at/rhimport/fetcher.go b/src/helsinki.at/rhimport/fetcher.go
index a86f7ca..7d406b2 100644
--- a/src/helsinki.at/rhimport/fetcher.go
+++ b/src/helsinki.at/rhimport/fetcher.go
@@ -146,7 +146,6 @@ func FetchFileLocal(ctx *ImportContext, uri *url.URL) (err error) {
type FetchFunc func(*ImportContext, *url.URL) (err error)
-
// TODO: implement fetchers for:
// archiv://
// public://
diff --git a/src/helsinki.at/rhimport/importer.go b/src/helsinki.at/rhimport/importer.go
index f365ea5..0fc5ecf 100644
--- a/src/helsinki.at/rhimport/importer.go
+++ b/src/helsinki.at/rhimport/importer.go
@@ -62,7 +62,7 @@ type ImportContext struct {
ProgressCallBackData interface{}
}
-func NewImportContext(conf *Config, rddb *RdDb, user string, group string) *ImportContext {
+func NewImportContext(conf *Config, rddb *RdDb, user string) *ImportContext {
ctx := new(ImportContext)
ctx.Config = conf
ctx.RdDb = rddb
@@ -71,11 +71,11 @@ func NewImportContext(conf *Config, rddb *RdDb, user string, group string) *Impo
ctx.Trusted = false
ctx.ShowId = 0
ctx.ClearShowCarts = false
- ctx.GroupName = group
+ ctx.GroupName = ""
ctx.Cart = 0
ctx.Cut = 0
ctx.Channels = 2
- ctx.NormalizationLevel = -1200
+ ctx.NormalizationLevel = -12
ctx.AutotrimLevel = 0
ctx.UseMetaData = false
ctx.SourceFile = ""
@@ -86,6 +86,29 @@ func NewImportContext(conf *Config, rddb *RdDb, user string, group string) *Impo
return ctx
}
+func (ctx *ImportContext) SanityCheck() error {
+ if ctx.UserName == "" {
+ return fmt.Errorf("empty Username is not allowed")
+ }
+ if ctx.Password == "" && !ctx.Trusted {
+ return fmt.Errorf("empty Password on untrusted control interface is not allowed")
+ }
+ if ctx.ShowId != 0 {
+ return nil
+ }
+ if ctx.GroupName != "" {
+ // TODO: check if GroupName is a music pool -> Error if not
+ return nil
+ }
+ if ctx.Cart == 0 {
+ return fmt.Errorf("either ShowId, PoolName or CartNumber must be supplied")
+ }
+ if ctx.Channels != 1 && ctx.Channels != 2 {
+ return fmt.Errorf("channles must be 1 or 2")
+ }
+ return nil
+}
+
func (ctx *ImportContext) getPassword(cached bool) (err error) {
req := getPasswordRequest{}
req.username = ctx.UserName
@@ -409,7 +432,7 @@ func ImportFile(ctx *ImportContext) (res *ImportResult, err error) {
// - add_cut(ctx, res) [200 -> OK]
// - import_audio(ctx, res) [200 -> OK]
return
- } else if ctx.GroupName != "" && ctx.Cart == 0 {
+ } else if ctx.GroupName != "" {
res.ResponseCode = 500
res.ErrorString = "Importing to music pools using the group name is not yet implemented"
// TODO: fetch info from dropboxes (import-params)
@@ -419,7 +442,8 @@ func ImportFile(ctx *ImportContext) (res *ImportResult, err error) {
} else if ctx.Cart != 0 && ctx.Cut == 0 {
res.ResponseCode = 500
res.ErrorString = "Importing to a Cart which might not exist is not yet implemented"
- // TODO: (everything except Cut and ShowId must be in context)
+ // TODO: (everything except Cut, GroupName and ShowId must be in context)
+ // - ctx.GetGroupOfCart(ctx.Cart)
// - remove_cart(ctx, res) [200 || 404 -> OK]
// - add_cart(ctx, res) [200 -> OK]
// - add_cut(ctx, res) [200 -> OK]
diff --git a/src/helsinki.at/rhimportd/ctrlWebSimple.go b/src/helsinki.at/rhimportd/ctrlWebSimple.go
index a57e8c5..5e12df5 100644
--- a/src/helsinki.at/rhimportd/ctrlWebSimple.go
+++ b/src/helsinki.at/rhimportd/ctrlWebSimple.go
@@ -36,7 +36,6 @@ import (
type webSimpleRequestData struct {
UserName string `json:"LOGIN_NAME"`
Password string `json:"PASSWORD"`
- GroupName string `json:"GROUP_NAME"`
Cart uint `json:"CART_NUMBER"`
Cut uint `json:"CUT_NUMBER"`
Channels uint `json:"CHANNELS"`
@@ -84,7 +83,7 @@ func webSimpleParseRequest(conf *rhimport.Config, rddb *rhimport.RdDb, trusted b
if trusted {
username = r.Header.Get("X-Forwarded-User")
}
- ctx = rhimport.NewImportContext(conf, rddb, username, reqdata.GroupName)
+ ctx = rhimport.NewImportContext(conf, rddb, username)
ctx.Password = reqdata.Password
ctx.Trusted = trusted
ctx.Cart = reqdata.Cart
@@ -108,9 +107,10 @@ func webSimpleHandler(conf *rhimport.Config, rddb *rhimport.RdDb, trusted bool,
return
}
- // TODO: add a sanity check for the context:
- // it would be nice to know whether a request is bogus
- // *before* we fetch a big file!
+ if err = ctx.SanityCheck(); err != nil {
+ webSimpleErrorResponse(w, http.StatusBadRequest, err.Error())
+ return
+ }
if err = rhimport.FetchFile(ctx); err != nil {
webSimpleErrorResponse(w, http.StatusInternalServerError, err.Error())