Skip to content

Commit 4b3c650

Browse files
author
Ian
committed
email forwarding menu changes
1 parent f4edfe6 commit 4b3c650

File tree

7 files changed

+171
-23
lines changed

7 files changed

+171
-23
lines changed

check-forwarding.php

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<?php
2+
require_once __DIR__."/vendor/autoload.php";
3+
require_once "root.php";
4+
require_once "resources/require.php";
5+
require_once "resources/check_auth.php";
6+
7+
header("Content-Type: application/json");
8+
9+
foreach ($_SESSION['user']['extension'] as $ext) {
10+
if ($ext['extension_uuid'] == $_GET['extension_uuid']) {
11+
$extension = $ext;
12+
break;
13+
}
14+
}
15+
16+
if (!$extension) {
17+
http_response_code(400);
18+
echo json_encode(array("error" => "invalid or unauthorized extension"));
19+
die();
20+
}
21+
22+
$database = new database;
23+
24+
// get user's number
25+
$sql = "SELECT phone_number FROM webtexting_destinations WHERE phone_number = :phone_number AND extension_uuid = :extension_uuid";
26+
$parameters['extension_uuid'] = $extension['extension_uuid'];
27+
$parameters['phone_number'] = $_GET['dialedNumber'];
28+
29+
$ownNumber = $database->select($sql, $parameters, 'all');
30+
unset($parameters);
31+
//if number found continue registration hitting the sms.callpipe api
32+
// else return a legible fail message
33+
if($ownNumber[0]){
34+
35+
$desiredWebhookURL = "https://".$_SESSION['domain_name']."/app/webtexting/inbound-hook.php?provider=accelerate-networks";
36+
$validNumber = _checkValidDestination($ownNumber[0]);
37+
//the json_deecode(json_encode()) abomination is stackoverflow hax
38+
//echo($validNumber);
39+
if($validNumber){
40+
$registered = json_encode($validNumber);
41+
echo(json_encode($validNumber));
42+
return json_encode($validNumber);
43+
}
44+
}
45+
else{
46+
echo("Invalid phone number. Contact Accelerate Networks support staff.");
47+
}
48+
49+
50+
51+
function _checkValidDestination(array $ownPhone)
52+
{
53+
$args['asDialed']= $ownPhone['phone_number'];
54+
AccelerateNetworks::ValidateAccessToken();
55+
$client = new GuzzleHttp\Client();
56+
$res = $client->request(
57+
'GET', "https://sms.callpipe.com/client", [
58+
'headers' => [
59+
'Authorization' => "Bearer ".$_SESSION['webtexting']['acceleratenetworks_api_key']['text'],
60+
],
61+
'http_errors' => false,
62+
'query' => ['asDialed' => $args['asDialed'] ],
63+
],
64+
);
65+
if($res->getStatusCode() == 200){
66+
//everything's fine do nothing.
67+
$responseBody = ($res->getBody()->getContents());
68+
//echo($responseBody);
69+
$testcheck = json_decode($responseBody);
70+
return $responseBody;
71+
}
72+
else{
73+
error_log("got ".$res->getStatusCode()." ".$res->getReasonPhrase()."\n");
74+
$responseBody = json_encode($res->getBody());
75+
error_log("response body: ".print_r($responseBody, true)."\n");
76+
}
77+
}

frontend/components/EmailForwardMenu/EmailForwardMenu.vue

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
<script lang="ts">
22
import {emitter} from '../../lib/global';
3+
export type ForwardingCheckResponseObject={
4+
email: String,
5+
emailVerified: Boolean
6+
}
37
export default{
48
name:"ForwardingPlaceholder",
59
props:{
@@ -8,17 +12,17 @@ export default{
812
},
913
data(){
1014
return{
11-
emailForwardFormInputs:{
12-
phoneNumber:this.$props.ownNumber,
13-
emailAddress:''
14-
}
15+
phoneNumber:this.$props.ownNumber,
16+
emailAddress:'',
17+
emailVerified:false
1518
}
1619
},
20+
//onLoad emitter.emit("forwarded-email-check,this.$props.ownNumber")
1721
methods: {
1822
submitEmailForwardingRegisterRequest(){
1923
event.preventDefault();
2024
const params = {
21-
email: this.$data.emailForwardFormInputs.emailAddress.trim(),
25+
email: this.$data.emailAddress.trim(),
2226
dialedNumber: this.$props.ownNumber
2327
}
2428
emitter.emit("register-email-forwarding",params);
@@ -27,6 +31,20 @@ export default{
2731
emitter.emit('menu-change');
2832
},
2933
},
34+
mounted() {
35+
const checkParams={
36+
dialedNumber:this.$props.ownNumber
37+
}
38+
emitter.emit("forwarded-email-check",checkParams);
39+
emitter.on('returned-forwarding-check',(args:ForwardingCheckResponseObject) =>{
40+
this.$data.emailAddress = args.email
41+
this.$data.emailVerified = args.emailVerified
42+
});
43+
emitter.on('email-forwarding-register-success', (args:ForwardingCheckResponseObject) =>{
44+
this.$data.emailAddress = args.email
45+
this.$data.emailVerified = true
46+
})
47+
},
3048
}
3149
</script>
3250
<template>
@@ -54,14 +72,15 @@ export default{
5472
<div class="mt-form-row">
5573
<label class="category-desc" for="emailInput">Email Address to forward messages to.</label>
5674
<div class="area-for-text input-group">
57-
<input type="email" class="form-control" id="emailInput" v-model="emailForwardFormInputs.emailAddress" />
75+
<input type="email" class="form-control" id="emailInput" v-model="emailAddress" />
5876
<div class="input-group-append">
5977
<button class="btn btn-primary" @click="submitEmailForwardingRegisterRequest">Submit</button>
6078
</div>
6179
</div>
6280
</div>
6381
</div>
6482
<p v-if="!selectedConvo" class=""> Forward new text messages to your Email</p>
83+
<p v-if="emailVerified">✓ Email Forwarding set up.</p>
6584
</div>
6685
</div>
6786

frontend/components/WebTextingContainer/WebTextingContainer.vue

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { deleteTemplateQuery,deleteTemplate} from '../../lib/deleteTemplate';
1414
import {registerForwardAddress, registerForwardingRequest } from '../../lib/messageForwarding';
1515
import {computePosition} from 'https://cdn.jsdelivr.net/npm/@floating-ui/dom@1.6.11/+esm';
1616
import AlertFactory from '../Alerts/AlertFactory.vue';
17-
17+
import {checkIfForwardedAddress,checkForwardingRequest} from '../../lib/checkIfForwarded';
1818
1919
2020
//this component kind of functions as a partial state controller for the app
@@ -262,6 +262,18 @@ export default {
262262
args.extension_uuid = this.extensionUUID;
263263
await registerForwardAddress(args)
264264
});
265+
emitter.on("forwarded-email-check",async (args: checkForwardingRequest) =>{
266+
console.log("check if email already registered")
267+
args.extension_uuid = this.extensionUUID;
268+
await checkIfForwardedAddress(args);
269+
})
270+
emitter.on("forwarding-check-response",args =>{
271+
emitter.emit('returned-forwarding-check',args);
272+
})
273+
emitter.on("completed-email-forwarding-registration",args =>{
274+
emitter.emit("email-forwarding-register-success", args);
275+
})
276+
265277
},
266278
267279
}

frontend/lib/checkIfForwarded.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { log } from "console";
2+
import { ClientRequest } from "http";
3+
import { emitter } from "./global";
4+
export type checkForwardingRequest={
5+
dialed_number:string,
6+
extension_uuid: string
7+
}
8+
9+
export type ClientResponse={
10+
clientRegistrationId:String,
11+
asDialed:String,
12+
callbackUrl:String,
13+
dateRegistered:String,
14+
clientSecret:String,
15+
registeredUpstream:Boolean,
16+
upstreamStatusDescription:String,
17+
dateLastTestMessageReceived:String,
18+
email:String,
19+
emailVerified:Boolean
20+
}
21+
22+
export async function checkIfForwardedAddress(query:checkForwardingRequest){
23+
let fetching = false;
24+
let test:ClientResponse;
25+
try{
26+
console.log("I'm trying " +query);
27+
fetching = true;
28+
test = await fetch('/app/webtexting/check-forwarding.php?' + new URLSearchParams(query).toString())
29+
.then(res=>res.json());
30+
31+
32+
}
33+
catch(e){
34+
console.log(e);
35+
throw(e);
36+
}
37+
finally{
38+
console.log("done checking for previous email forwarding registrations")
39+
fetching= false;
40+
emitter.emit('forwarding-check-response',JSON.parse(test));
41+
return test;
42+
}
43+
44+
}

frontend/lib/messageForwarding.ts

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { log } from "console";
2-
2+
import { emitter } from "./global";
33
export type registerForwardingRequest={
44
dialed_number:string,
55
email: string,
@@ -13,23 +13,17 @@ export async function registerForwardAddress(query:registerForwardingRequest){
1313
fetching = true;
1414
test= await fetch('/app/webtexting/register-forwarding.php?' + new URLSearchParams(query).toString(),{
1515
method:"POST"
16-
});
17-
if(test.ok){
18-
return await test;
19-
}
20-
else{
21-
throw new Error(`Response status: ${test.status}`)
22-
}
16+
}).then(res => res.json())
2317
}
2418
catch(e){
2519
console.log(e);
2620
throw(e);
2721
}
2822
finally{
29-
console.log("finally done registering")
30-
//console.log(await test.json());
23+
console.log("finally done registering for forwarding")
24+
emitter.emit("completed-email-forwarding-registration",test)
3125
fetching= false;
32-
return await test;
26+
return test;
3327
}
3428

3529
}

register-forwarding.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,14 @@
3232
// else return a legible fail message
3333
if($ownNumber[0]){
3434
$desiredWebhookURL = "https://".$_SESSION['domain_name']."/app/webtexting/inbound-hook.php?provider=accelerate-networks";
35-
$validNumber = json_decode(json_encode(_checkValidDestination($ownNumber[0])),true);
35+
$validNumber = json_decode(_checkValidDestination($ownNumber[0]),true);
3636
//the above is stackoverflow nonsense
3737
//echo($validNumber);
3838
if($validNumber){
3939
$registered = _registerForwarding(["dialedNumber" => $ownNumber[0]['phone_number'], "email" => $_GET['email'], "callbackUrl" => $validNumber['callbackUrl'], "clientSecret" => $validNumber['clientSecret']]);
4040
//return json_encode($registered );
41-
return $registered;
41+
echo($registered);
42+
return ($registered);
4243
}
4344
}
4445
else{
@@ -60,7 +61,8 @@ function _registerForwarding(array $body)
6061
);
6162
if($res->getStatusCode() == 200){
6263
//everything's fine do nothing.
63-
return json_encode($res->getBody()->getContents());
64+
$check = ($res->getBody()->getContents());
65+
return $check;
6466
}
6567
else{
6668
error_log("got ".$res->getStatusCode()." ".$res->getReasonPhrase()."\n");
@@ -87,7 +89,7 @@ function _checkValidDestination(array $ownPhone)
8789
//everything's fine do nothing.
8890
$responseBody = ($res->getBody()->getContents());
8991
//echo($responseBody);
90-
return json_decode($responseBody);
92+
return ($responseBody);
9193
}
9294
else{
9395
error_log("got ".$res->getStatusCode()." ".$res->getReasonPhrase()."\n");

vite.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export default defineConfig({
1212
}
1313
},
1414
define: {
15-
"process.env.NODE_ENV": "'production'",
15+
"process.env.NODE_ENV": "'development'",
1616
},
1717
root: "frontend",
1818
build: {

0 commit comments

Comments
 (0)