diff --git a/app/services/UserService.php b/app/services/UserService.php
index 5842bcca4..de2647224 100644
--- a/app/services/UserService.php
+++ b/app/services/UserService.php
@@ -346,19 +346,28 @@ public function RequestPasswordReset($email) {
* @return mixed
*/
public function RequestSlackInvite($email) {
- $ch = curl_init('http://slack-invite:3000/invite');
+ $url = 'https://' . SLACK_URL . '/api/users.admin.invite';
+
+ $body = [
+ 'email' => $email,
+ 'token' => SLACK_INVITE_TOKEN,
+ 'set_active' => true
+ ];
+
+ $ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_POSTFIELDS, 'email=' . $email);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($body));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Connection: Close']);
$error = null;
+ $response = curl_exec($ch);
- if (!($response = curl_exec($ch))) {
+ if (!$response) {
$error = 'Error: Got ' . curl_error($ch) . " when request slack invite for email: '" . $email . "'";
}
@@ -369,7 +378,30 @@ public function RequestSlackInvite($email) {
return $error;
}
- return $response;
+ $json_data = json_decode($response, true);
+ // body looks like:
+ // {"ok":true}
+ // or
+ // {"ok":false,"error":"already_invited"}
+
+ if ($json_data['ok']) {
+ return 'Invite sent';
+ }
+
+ $ErrorMap = [
+ 'invalid_email' => 'The email you entered is an invalid email.',
+ 'invalid_auth' => 'Something has gone wrong. Please contact a system administrator.'
+ ];
+
+ $error = $json_data['error'];
+
+ if ($error == 'already_invited' || $error == 'already_in_team') {
+ return 'Success! You were already invited.
Visit ' . SLACK_URL . '';
+ }
+
+ $error = $ErrorMap[$error] ?? $error;
+
+ return $error;
}
/**
diff --git a/conf/config.docker.ini.php b/conf/config.docker.ini.php
index 52cd4209f..930b6d825 100644
--- a/conf/config.docker.ini.php
+++ b/conf/config.docker.ini.php
@@ -43,8 +43,11 @@
define('STRIPE_WEBHOOK_SECRET', NOMOS_STRIPE_WEBHOOK_SECRET);
define('STRIPE_PRODUCTS', json_decode(NOMOS_STRIPE_PRODUCTS, true));
+define('SLACK_INVITE_TOKEN', NOMOS_SLACK_INVITE_TOKEN);
+define('SLACK_URL', NOMOS_SLACK_URL);
+
/**
* Show MySql Errors.
- * Not recomended for live site. true/false
+ * Not recomended for live site. true/false.
*/
define('DEBUG', false);
diff --git a/docker/nomos.env.template b/docker/nomos.env.template
index b71993ed3..2a71364c2 100644
--- a/docker/nomos.env.template
+++ b/docker/nomos.env.template
@@ -18,6 +18,9 @@ NOMOS_STRIPE_API_KEY=
NOMOS_STRIPE_WEBHOOK_SECRET=
NOMOS_STRIPE_PRODUCTS=
+NOMOS_SLACK_INVITE_TOKEN=foobar
+NOMOS_SLACK_URL=vanhack.slack.com
+
NOMOS_RABBITMQ_HOST=nomos-rabbitmq
NOMOS_RABBITMQ_PORT=5672
NOMOS_RABBITMQ_USER=nomos