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