2016-12-08 08:12:18 +00:00
|
|
|
package api
|
|
|
|
|
|
|
|
import (
|
2017-01-16 10:55:09 +00:00
|
|
|
"errors"
|
2016-12-08 08:12:18 +00:00
|
|
|
"io/ioutil"
|
|
|
|
"os"
|
|
|
|
|
|
|
|
"srs.epita.fr/fic-server/libfic"
|
2016-12-15 23:51:56 +00:00
|
|
|
|
|
|
|
"github.com/julienschmidt/httprouter"
|
2016-12-08 08:12:18 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
func init() {
|
2017-01-16 10:55:09 +00:00
|
|
|
router.GET("/api/ca.pem", apiHandler(GetCAPEM))
|
|
|
|
router.POST("/api/ca/new", apiHandler(
|
|
|
|
func(_ httprouter.Params, _ []byte) (interface{}, error) { return fic.GenerateCA() }))
|
|
|
|
router.GET("/api/ca/crl", apiHandler(GetCRL))
|
|
|
|
router.POST("/api/ca/crl", apiHandler(
|
|
|
|
func(_ httprouter.Params, _ []byte) (interface{}, error) { return fic.GenerateCRL() }))
|
|
|
|
|
2016-12-08 08:12:18 +00:00
|
|
|
|
2016-12-15 23:51:56 +00:00
|
|
|
router.GET("/api/teams/:tid/certificate/", apiHandler(teamHandler(GetTeamCertificate)))
|
|
|
|
router.GET("/api/teams/:tid/certificate/generate", apiHandler(teamHandler(
|
2017-01-16 10:55:09 +00:00
|
|
|
func(team fic.Team, _ []byte) (interface{}, error) { return team.GenerateCert() })))
|
2016-12-15 23:51:56 +00:00
|
|
|
router.GET("/api/teams/:tid/certificate/revoke", apiHandler(teamHandler(
|
2017-01-16 10:55:09 +00:00
|
|
|
func(team fic.Team, _ []byte) (interface{}, error) { return team.RevokeCert() })))
|
2016-12-08 08:12:18 +00:00
|
|
|
}
|
|
|
|
|
2017-01-16 10:55:09 +00:00
|
|
|
|
|
|
|
func GetCAPEM(_ httprouter.Params, _ []byte) (interface{}, error) {
|
|
|
|
if _, err := os.Stat("../PKI/shared/cacert.crt"); os.IsNotExist(err) {
|
|
|
|
return nil, errors.New("Unable to locate the CA root certificate. Have you generated it?")
|
|
|
|
} else if fd, err := os.Open("../PKI/shared/cacert.crt"); err == nil {
|
|
|
|
return ioutil.ReadAll(fd)
|
|
|
|
} else {
|
|
|
|
return nil, err
|
|
|
|
}
|
2016-12-08 08:12:18 +00:00
|
|
|
}
|
|
|
|
|
2017-01-16 10:55:09 +00:00
|
|
|
func GetCRL(_ httprouter.Params, _ []byte) (interface{}, error) {
|
|
|
|
if _, err := os.Stat("../PKI/shared/crl.pem"); os.IsNotExist(err) {
|
|
|
|
return nil, errors.New("Unable to locate the CRL. Have you generated it?")
|
|
|
|
} else if fd, err := os.Open("../PKI/shared/crl.pem"); err == nil {
|
|
|
|
return ioutil.ReadAll(fd)
|
|
|
|
} else {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func GetTeamCertificate(team fic.Team, _ []byte) (interface{}, error) {
|
|
|
|
if _, err := os.Stat("../PKI/pkcs/" + team.Name + ".p12"); os.IsNotExist(err) {
|
|
|
|
return nil, errors.New("Unable to locate the p12. Have you generated it?")
|
|
|
|
} else if fd, err := os.Open("../PKI/pkcs/" + team.Name + ".p12"); err == nil {
|
2016-12-08 08:12:18 +00:00
|
|
|
return ioutil.ReadAll(fd)
|
|
|
|
} else {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
}
|