Andrea Fazzi 6 gadi atpakaļ
vecāks
revīzija
994088bbe1

+ 0 - 12
Godeps/Godeps.json

@@ -60,18 +60,6 @@
 			"ImportPath": "github.com/jinzhu/inflection",
 			"Rev": "1c35d901db3da928c72a72d8458480cc9ade058f"
 		},
-		{
-			"ImportPath": "gogs.carducci-dante.gov.it/karmen/config",
-			"Rev": "632bbf77a42109536e520b5b80372b1ea2fad826"
-		},
-		{
-			"ImportPath": "gogs.carducci-dante.gov.it/karmen/datasource",
-			"Rev": "f9162fd685a41e50c8f148c8431d3bb18631fd6d"
-		},
-		{
-			"ImportPath": "gogs.carducci-dante.gov.it/karmen/datasource/edt",
-			"Rev": "f9162fd685a41e50c8f148c8431d3bb18631fd6d"
-		},
 		{
 			"ImportPath": "gopkg.in/yaml.v2",
 			"Rev": "287cf08546ab5e7e37d55a84f7ed3fd1db036de5"

+ 7 - 31
vendor/gogs.carducci-dante.gov.it/karmen/config/config.go → config/config.go

@@ -22,6 +22,13 @@ type ConfigT struct {
 
 	LogLevel int `yaml:"log_level"`
 
+	// Secret keys
+
+	Keys struct {
+		CookieStoreKey string `yaml:"cookie_store_key"`
+		JWTSigningKey  string `yaml:"jwt_signing_key"`
+	}
+
 	// Admin credentials
 
 	Admin struct {
@@ -38,37 +45,6 @@ type ConfigT struct {
 		AutoMigrate bool
 		Regenerate  bool
 	}
-
-	// LDAP
-
-	Ldap struct {
-		Host         string
-		Port         string
-		BindPassword string `yaml:"bind_password"`
-		BindUser     string `yaml:"bind_user"`
-		RootDN       string `yaml:"root_dn"`
-
-		OuPeople        string `yaml:"ou_people"`
-		OuTeacher       string `yaml:"ou_teacher"`
-		OuGroup         string `yaml:"ou_group"`
-		OuTeachersGroup string `yaml:"ou_teachers_group"`
-	}
-
-	// LimeSurvey Remote Control URL
-
-	Limesurvey struct {
-		Url      string
-		Username string
-		Password string
-	}
-
-	// Cloud
-
-	Cloud struct {
-		Url      string
-		Username string
-		Password string
-	}
 }
 
 var Config *ConfigT

+ 5 - 9
handlers/handlers.go

@@ -9,6 +9,7 @@ import (
 	"path/filepath"
 	"runtime/debug"
 
+	"gogs.carducci-dante.gov.it/karmen/core/config"
 	"gogs.carducci-dante.gov.it/karmen/core/orm"
 	"gogs.carducci-dante.gov.it/karmen/core/renderer"
 
@@ -30,8 +31,8 @@ type PathPattern struct {
 }
 
 var (
-	signingKey = []byte("secret")
-	store      = sessions.NewCookieStore([]byte("something-very-secret"))
+	signingKey = []byte(config.Config.Keys.JWTSigningKey)
+	store      = sessions.NewCookieStore([]byte(config.Config.Keys.CookieStoreKey))
 
 	jwtCookie = jwtmiddleware.New(jwtmiddleware.Options{
 		ValidationKeyGetter: func(token *jwt.Token) (interface{}, error) {
@@ -76,12 +77,11 @@ func generateHandler(r *mux.Router, base string) {
 				fmt.Sprintf(pattern.Path, base),
 				pattern.RedirectPath)))).Methods(pattern.Methods...)
 	}
-}
 
-func generateAPIHandler(r *mux.Router, base string) {
 	for _, pattern := range jsonPatterns {
 		r.Handle(fmt.Sprintf(pattern.Path, base), recoverHandler(modelHandler(base, fmt.Sprintf(pattern.Path, base), pattern.RedirectPath))).Methods(pattern.Methods...)
 	}
+
 }
 
 func Handlers() *mux.Router {
@@ -102,12 +102,8 @@ func Handlers() *mux.Router {
 		generateHandler(r, model)
 	}
 
-	for _, model := range []string{"teachers", "classes", "subjects", "activities"} {
-		generateAPIHandler(r, model)
-	}
-
 	// Token handling
-	r.Handle("/get_token", getTokenHandler())
+	r.Handle("/get_token", tokenHandler())
 
 	// Static file server
 

+ 24 - 72
handlers/handlers_test.go

@@ -1,19 +1,17 @@
 package api
 
 import (
-	"io/ioutil"
+	"encoding/json"
+	"net/http"
 	"net/http/httptest"
-	"path/filepath"
 	"testing"
 
 	"github.com/remogatto/prettytest"
 	"gogs.carducci-dante.gov.it/karmen/core/config"
-	"gogs.carducci-dante.gov.it/karmen/core/renderer"
 )
 
 var (
-	server     *httptest.Server
-	teacherUrl string
+	token string
 )
 
 // Start of setup
@@ -22,15 +20,6 @@ type testSuite struct {
 	prettytest.Suite
 }
 
-func exp(name string) string {
-	path := filepath.Join("testdata/expectations", name+".html")
-	exp, err := ioutil.ReadFile(path)
-	if err != nil {
-		panic(err)
-	}
-	return string(exp)
-}
-
 func TestRunner(t *testing.T) {
 	prettytest.Run(
 		t,
@@ -39,71 +28,34 @@ func TestRunner(t *testing.T) {
 }
 
 func (t *testSuite) BeforeAll() {
-	err := config.Load("testdata/config.yaml", config.Config)
+	err := config.ReadFile("testdata/config.yaml", config.Config)
 	if err != nil {
 		panic(err)
 	}
 	config.Config.LogLevel = config.LOG_LEVEL_OFF
 
-	rend := renderer.NewJSONRenderer()
-	renderer.Use(rend)
-}
+	req, err := http.NewRequest("GET", "/get_token", nil)
+	if err != nil {
+		panic(err)
+	}
+
+	req.SetBasicAuth("john", "1234")
 
-// func (t *testSuite) TestGetToken() {
-// 	tokenUrl := fmt.Sprintf("%s/get-token", server.URL)
-// 	resp, err := http.Get(tokenUrl)
-// 	defer resp.Body.Close()
-// 	t.Nil(err)
-// 	_, err = ioutil.ReadAll(resp.Body)
-// 	t.Nil(err)
-// 	t.Equal(http.StatusOK, resp.StatusCode)
-// }
+	rr := httptest.NewRecorder()
+	tokenHandler().ServeHTTP(rr, req)
+
+	var data struct {
+		Token  string
+		UserID string
+	}
 
-// func (t *testSuite) TestGetTeacher() {
-// 	token, err := getToken()
-// 	t.Nil(err)
-// 	if !t.Failed() {
-// 		teacher := orm.Teacher{}
-// 		teacherUrl = fmt.Sprintf("%s/teachers/andrea.fazzi", server.URL)
-// 		resp, err := sendAuthenticatedRequest("GET", teacherUrl, token)
-// 		t.Nil(err)
-// 		if !t.Failed() {
-// 			defer resp.Body.Close()
-// 			body, err := ioutil.ReadAll(resp.Body)
-// 			t.Nil(err)
-// 			t.Equal(http.StatusOK, resp.StatusCode)
-// 			if !t.Failed() {
-// 				err = json.Unmarshal(body, &teacher)
-// 				t.Equal("Andrea", teacher.Name)
-// 				t.Equal("FAZZI", teacher.Surname)
-// 			}
-// 		}
-// 	}
-// }
+	if err := json.Unmarshal(rr.Body.Bytes(), &data); err != nil {
+		panic(err)
+	}
 
-// func getToken() ([]byte, error) {
-// 	resp, err := http.Get(fmt.Sprintf("%s/get-token", server.URL))
-// 	defer resp.Body.Close()
-// 	if err != nil {
-// 		return nil, err
-// 	}
-// 	token, err := ioutil.ReadAll(resp.Body)
-// 	if err != nil {
-// 		return nil, err
-// 	}
-// 	return token, nil
-// }
+	token = data.Token
 
-// func sendAuthenticatedRequest(method string, url string, token []byte) (*http.Response, error) {
-// 	req, err := http.NewRequest(method, url, nil)
-// 	if err != nil {
-// 		return nil, err
-// 	}
-// 	req.Header.Set("Authorization", fmt.Sprintf("bearer %v", string(token)))
-// 	resp, err := http.DefaultClient.Do(req)
-// 	if err != nil {
-// 		return nil, err
-// 	}
-// 	return resp, nil
+}
 
-// }
+func (t *testSuite) TestGetToken() {
+}

+ 2 - 2
handlers/login.go

@@ -8,7 +8,7 @@ import (
 	"time"
 
 	jwt "github.com/dgrijalva/jwt-go"
-	"gogs.carducci-dante.gov.it/karmen/config"
+	"gogs.carducci-dante.gov.it/karmen/core/config"
 	"gogs.carducci-dante.gov.it/karmen/core/renderer"
 )
 
@@ -87,7 +87,7 @@ func getToken(username string, password string) ([]byte, error) {
 	return []byte(tokenString), nil
 }
 
-func getTokenHandler() http.Handler {
+func tokenHandler() http.Handler {
 	fn := func(w http.ResponseWriter, r *http.Request) {
 		username, password, _ := r.BasicAuth()
 

+ 5 - 18
handlers/testdata/config.yaml

@@ -1,8 +1,12 @@
 domain: "foo.org"
 log_level: 2
 
+keys:
+  cookie_store_key: "something-very-secret"
+  jwt_signing_key: "secret"
+  
 orm:
-  connection: "root:password@tcp(localhost:3306)/karmen_dev"
+  connection: "karmen:karmen@tcp(db:3306)/karmen_dev"
   options: "charset=utf8&parseTime=True&loc=Local"
   automigrate: true
   reset: false
@@ -11,20 +15,3 @@ orm:
 admin:
   username: "admin"
   password: "admin"
-
-ldap:
-  host: "localhost"
-  port: 389
-  bind_password: "admin"
-  bind_user: "cn=admin,dc=foo,dc=org"
-  root_dn: "dc=foo,dc=org"
-
-limesurvey:
-  url: "http://localhost:8081/index.php/admin/remotecontrol"
-  username: "admin"
-  password: "password"
-
-cloud:
-  url: "http://localhost:8082/remote.php/webdav/"
-  username: "admin"
-  password: "password"

+ 1 - 1
main.go

@@ -10,7 +10,7 @@ import (
 	"github.com/gorilla/handlers"
 	"github.com/jinzhu/gorm"
 
-	"gogs.carducci-dante.gov.it/karmen/config"
+	"gogs.carducci-dante.gov.it/karmen/core/config"
 	"gogs.carducci-dante.gov.it/karmen/core/handlers"
 	"gogs.carducci-dante.gov.it/karmen/core/orm"
 )

+ 0 - 1
orm/activity.go

@@ -9,7 +9,6 @@ import (
 
 type Activity struct {
 	gorm.Model
-	//	Name      string
 	Class     *Class
 	Teacher   *Teacher
 	Subject   *Subject

+ 0 - 11
orm/orm.go

@@ -8,7 +8,6 @@ import (
 
 	"github.com/jinzhu/gorm"
 	_ "github.com/jinzhu/gorm/dialects/mysql"
-	"gogs.carducci-dante.gov.it/karmen/datasource"
 )
 
 const (
@@ -288,16 +287,6 @@ func (d *Department) Create(db *gorm.DB, record map[string]interface{}) error {
 	return nil
 }
 
-func Import(importable datasource.Importable, importer datasource.Importer) error {
-	for _, record := range importer.Records() {
-		err := importable.Create(currDB, record)
-		if err != nil {
-			return err
-		}
-	}
-	return nil
-}
-
 func New(connection string) (*gorm.DB, error) {
 	db, err := gorm.Open("mysql", connection)
 	if err != nil {

+ 1 - 1
renderer/renderer.go

@@ -15,7 +15,7 @@ import (
 )
 
 type Renderer interface {
-	Render(http.ResponseWriter, *http.Request, interface{}, ...string) error
+	Render(http.ResponseWriter, *http.Request, interface{}, ...url.Values) error
 }
 
 type JSONRenderer struct{}

+ 1 - 1
templates/classes_show.html.tpl

@@ -38,7 +38,7 @@
 	una nuova attività didattica da associare alla classe.</p>
     {{else}}
     {{range $activity := .Data.Activities}}
-      <a href="/activities/{{$activity.ID}}/update?{{query "tpl_layout" "base" "tpl_content" "activities_show"}}" class="list-group-item clearfix">
+      <a href="/activities/{{$activity.ID}}?{{query "tpl_layout" "base" "tpl_content" "activities_show"}}" class="list-group-item clearfix">
 	<span class="glyphicon glyphicon-user"></span>
 	{{$activity.Teacher.Surname}} {{$activity.Teacher.Name}}
 	<div class="text-right">

+ 0 - 42
vendor/gogs.carducci-dante.gov.it/karmen/datasource/edt/edt.go

@@ -1,42 +0,0 @@
-package edt
-
-import (
-	"encoding/csv"
-	"strings"
-)
-
-type EDT struct {
-	records []map[string]interface{}
-}
-
-func NewImporter(data string, fields map[string]string) (*EDT, error) {
-	reader := csv.NewReader(strings.NewReader(string(data)))
-	csvData, err := reader.ReadAll()
-	if err != nil {
-		return nil, err
-	}
-
-	csvFields := csvData[0][:]
-
-	edt := &EDT{}
-	edt.records = make([]map[string]interface{}, 0)
-
-	n := len(csvData)
-	for i := 1; i < n; i++ {
-		record := make(map[string]interface{}, 0)
-		for pos, value := range csvData[i] {
-			if field := fields[csvFields[pos]]; field != "" {
-				record[field] = value
-			} else {
-				field := csvFields[pos]
-				record[field] = value
-			}
-		}
-		edt.records = append(edt.records, record)
-	}
-	return edt, nil
-}
-
-func (edt *EDT) Records() []map[string]interface{} {
-	return edt.records
-}

+ 0 - 11
vendor/gogs.carducci-dante.gov.it/karmen/datasource/importer.go

@@ -1,11 +0,0 @@
-package datasource
-
-import "github.com/jinzhu/gorm"
-
-type Importer interface {
-	Records() []map[string]interface{}
-}
-
-type Importable interface {
-	Create(*gorm.DB, map[string]interface{}) error
-}