summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api/admin.go11
-rw-r--r--model/client.go13
-rw-r--r--utils/utils.go15
-rw-r--r--webapp/client/client.jsx13
-rw-r--r--webapp/components/admin_console/saml_settings.jsx20
5 files changed, 71 insertions, 1 deletions
diff --git a/api/admin.go b/api/admin.go
index ca7961753..2771e5491 100644
--- a/api/admin.go
+++ b/api/admin.go
@@ -45,6 +45,7 @@ func InitAdmin() {
BaseRoutes.Admin.Handle("/saml_metadata", ApiAppHandler(samlMetadata)).Methods("GET")
BaseRoutes.Admin.Handle("/add_certificate", ApiAdminSystemRequired(addCertificate)).Methods("POST")
BaseRoutes.Admin.Handle("/remove_certificate", ApiAdminSystemRequired(removeCertificate)).Methods("POST")
+ BaseRoutes.Admin.Handle("/saml_cert_status", ApiAdminSystemRequired(samlCertificateStatus)).Methods("GET")
}
func getLogs(c *Context, w http.ResponseWriter, r *http.Request) {
@@ -659,3 +660,13 @@ func removeCertificate(c *Context, w http.ResponseWriter, r *http.Request) {
}
ReturnStatusOK(w)
}
+
+func samlCertificateStatus(c *Context, w http.ResponseWriter, r *http.Request) {
+ status := make(map[string]interface{})
+
+ status["IdpCertificateFile"] = utils.FileExistsInConfigFolder(*utils.Cfg.SamlSettings.IdpCertificateFile)
+ status["PrivateKeyFile"] = utils.FileExistsInConfigFolder(*utils.Cfg.SamlSettings.PrivateKeyFile)
+ status["PublicCertificateFile"] = utils.FileExistsInConfigFolder(*utils.Cfg.SamlSettings.PublicCertificateFile)
+
+ w.Write([]byte(model.StringInterfaceToJson(status)))
+}
diff --git a/model/client.go b/model/client.go
index b97a2f7ad..23648050f 100644
--- a/model/client.go
+++ b/model/client.go
@@ -1730,7 +1730,7 @@ func (c *Client) UploadCertificateFile(data []byte, contentType string) *AppErro
}
// Removes a x509 base64 Certificate or Private Key file used with SAML.
-// filename is required. Returns nil if succesful, otherwise returns an AppError
+// filename is required. Returns nil if successful, otherwise returns an AppError
func (c *Client) RemoveCertificateFile(filename string) *AppError {
if r, err := c.DoApiPost("/admin/remove_certificate", MapToJson(map[string]string{"filename": filename})); err != nil {
return err
@@ -1739,3 +1739,14 @@ func (c *Client) RemoveCertificateFile(filename string) *AppError {
return nil
}
}
+
+// Checks if the x509 base64 Certificates and Private Key files used with SAML exists on the file system.
+// Returns a map[string]interface{} if successful, otherwise returns an AppError. Must be System Admin authenticated.
+func (c *Client) SamlCertificateStatus(filename string) (map[string]interface{}, *AppError) {
+ if r, err := c.DoApiGet("/admin/remove_certificate", "", ""); err != nil {
+ return nil, err
+ } else {
+ defer closeBody(r)
+ return StringInterfaceFromJson(r.Body), nil
+ }
+}
diff --git a/utils/utils.go b/utils/utils.go
index f826c65a0..87c81b70f 100644
--- a/utils/utils.go
+++ b/utils/utils.go
@@ -3,6 +3,10 @@
package utils
+import (
+ "os"
+)
+
func StringArrayIntersection(arr1, arr2 []string) []string {
arrMap := map[string]bool{}
result := []string{}
@@ -19,3 +23,14 @@ func StringArrayIntersection(arr1, arr2 []string) []string {
return result
}
+
+func FileExistsInConfigFolder(filename string) bool {
+ if len(filename) == 0 {
+ return false
+ }
+
+ if _, err := os.Stat(FindConfigFile(filename)); err == nil {
+ return true
+ }
+ return false
+}
diff --git a/webapp/client/client.jsx b/webapp/client/client.jsx
index 5ee28be78..88da51372 100644
--- a/webapp/client/client.jsx
+++ b/webapp/client/client.jsx
@@ -1667,4 +1667,17 @@ export default class Client {
send({filename}).
end(this.handleResponse.bind(this, 'removeCertificateFile', success, error));
}
+
+ samlCertificateStatus(success, error) {
+ request.get(`${this.getAdminRoute()}/saml_cert_status`).
+ set(this.defaultHeaders).
+ type('application/json').
+ accept('application/json').
+ end((err, res) => {
+ if (err) {
+ return error(err);
+ }
+ return success(res.body);
+ });
+ }
}
diff --git a/webapp/components/admin_console/saml_settings.jsx b/webapp/components/admin_console/saml_settings.jsx
index ae6f3e169..9fb78f472 100644
--- a/webapp/components/admin_console/saml_settings.jsx
+++ b/webapp/components/admin_console/saml_settings.jsx
@@ -70,6 +70,26 @@ export default class SamlSettings extends AdminSettings {
};
}
+ componentWillMount() {
+ Client.samlCertificateStatus(
+ (data) => {
+ const files = {};
+ if (!data.IdpCertificateFile) {
+ files.idpCertificateFile = '';
+ }
+
+ if (!data.PublicCertificateFile) {
+ files.publicCertificateFile = '';
+ }
+
+ if (!data.PrivateKeyFile) {
+ files.privateKeyFile = '';
+ }
+ this.setState(files);
+ }
+ );
+ }
+
uploadCertificate(id, file, callback) {
Client.uploadCertificateFile(
file,