package api import ( "errors" "io/ioutil" "os" "srs.epita.fr/fic-server/libfic" "github.com/julienschmidt/httprouter" ) func init() { 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() })) router.HEAD("/api/teams/:tid/certificate.p12", apiHandler(teamHandler(GetTeamCertificate))) router.GET("/api/teams/:tid/certificate.p12", apiHandler(teamHandler(GetTeamCertificate))) router.DELETE("/api/teams/:tid/certificate.p12", apiHandler(teamHandler( func(team fic.Team, _ []byte) (interface{}, error) { return team.RevokeCert() }))) router.GET("/api/teams/:tid/certificate/generate", apiHandler(teamHandler( func(team fic.Team, _ []byte) (interface{}, error) { return team.GenerateCert() }))) } 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 } } 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.InitialName + ".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.InitialName + ".p12"); err == nil { return ioutil.ReadAll(fd) } else { return nil, err } }