diff --git a/app/assets/javascripts/srp/.gitlab-ci.yml b/app/assets/javascripts/srp/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..fc861e508d6bf1a00c18496c15c38eb83c2628fa
--- /dev/null
+++ b/app/assets/javascripts/srp/.gitlab-ci.yml
@@ -0,0 +1,12 @@
+image: ruby:latest
+
+# This folder is cached between builds
+# http://docs.gitlab.com/ce/ci/yaml/README.html#cache
+cache:
+  paths:
+  - node_modules/
+
+test:
+  script:
+   - npm install
+   - npm test
\ No newline at end of file
diff --git a/app/assets/javascripts/srp/.gitrepo b/app/assets/javascripts/srp/.gitrepo
index 89f521aeae91b31dbdd6598efd812d023b058c0d..b935cadc8a91a32046a1959bcf948148d19d9b79 100644
--- a/app/assets/javascripts/srp/.gitrepo
+++ b/app/assets/javascripts/srp/.gitrepo
@@ -6,6 +6,6 @@
 [subrepo]
 	remote = https://leap.se/git/srp_js
 	branch = master
-	commit = 9e1a41733468d4a3f5102b04277b9cd7b52d0a45
-	parent = ac4cf4a1da4dcc697f1f5219f0073c5991a135e0
+	commit = 2088cbec310bb2c5768f4e8a1d424f8468e17c73
+	parent = 8370b62870a3100e126e6434a09eb518c26dfd71
 	cmdver = 0.3.1
diff --git a/app/assets/javascripts/srp/.nvmrc b/app/assets/javascripts/srp/.nvmrc
index 9212624f5640309b12d0f2efbbe48b84f57e30ee..1416d7ec0cf12b911f2421fac428670c2cc325b3 100644
--- a/app/assets/javascripts/srp/.nvmrc
+++ b/app/assets/javascripts/srp/.nvmrc
@@ -1 +1 @@
-v0.12.7
+v8.9
diff --git a/app/assets/javascripts/srp/Version b/app/assets/javascripts/srp/Version
index 1d0ba9ea182b0f7354f3daf12120744ec5e0c2f8..8f0916f768f0487bcf8d33827ce2c8dcecb645c1 100644
--- a/app/assets/javascripts/srp/Version
+++ b/app/assets/javascripts/srp/Version
@@ -1 +1 @@
-0.4.0
+0.5.0
diff --git a/app/assets/javascripts/srp/package.json b/app/assets/javascripts/srp/package.json
index 611c18783937c002d7e5c43aec2bb0359272b8b6..03b57b1408f7f6e3d1826aec4169b54e479bdf8a 100644
--- a/app/assets/javascripts/srp/package.json
+++ b/app/assets/javascripts/srp/package.json
@@ -1,18 +1,18 @@
 {
   "name": "srp_js",
-  "version": "0.4.0",
+  "version": "0.5.0",
   "description": "A secure remote password implementation for JavaScript",
   "homepage": "https://github.com/leapcode/srp_js#readme",
   "main": "index.js",
   "devDependencies": {
     "jasmine-core": "^2.3.4",
     "jasmine-jquery": "^2.1.0",
-    "jquery": "^2.1.4",
-    "karma": "^0.13.9",
-    "karma-jasmine": "^0.3.6",
-    "karma-phantomjs-launcher": "^0.2.1",
-    "phantomjs": "^1.9.18",
-    "sinon": "^1.16.1"
+    "jquery": "^3.3.1",
+    "karma": "^2.0.0",
+    "karma-jasmine": "^1.1.1",
+    "karma-phantomjs-launcher": "^1.0.4",
+    "phantomjs-prebuilt": "^2.1.16",
+    "sinon": "^4.2.1"
   },
   "scripts": {
     "test": "node_modules/karma/bin/karma start --single-run"
diff --git a/app/assets/javascripts/srp/src/jqueryRest.js b/app/assets/javascripts/srp/src/jqueryRest.js
index 437bd65581070d213882197ec73c9549c1c81b44..0c58eb2bfbe33f6e9e2bddcd03b954856706b04b 100644
--- a/app/assets/javascripts/srp/src/jqueryRest.js
+++ b/app/assets/javascripts/srp/src/jqueryRest.js
@@ -88,17 +88,10 @@ srp.remote = (function(){
   // the http error response.
   function error(xhr, text, thrown)
   {
-    var message;
-    if (xhr.responseText && xhr.responseText != "") {
-      try {
-        message = $.parseJSON(xhr.responseText);
-      } catch (err) {
-        message = xhr.responseText;
-      }
-    } else {
-      message = "Server did not respond.";
-    }
-    srp.error(message);
+    if (xhr.responseText && xhr.responseText != "")
+      srp.error($.parseJSON(xhr.responseText));
+    else
+      srp.error("Server did not respond.");
   };
 
   return {