8
8
VerifyTokenQueryResult ,
9
9
VerifyTokenVariables ,
10
10
} from '../graphql/verifyTokenQuery'
11
+ import * as TE from 'fp-ts/lib/TaskEither'
12
+ import { verifyToken } from './Twilio/api'
13
+ import { pipe } from 'fp-ts/lib/pipeable'
11
14
12
15
export enum SlashCommand {
13
16
HELP = 'help' ,
@@ -43,32 +46,70 @@ export const SlashCommandHandler = ({
43
46
onChangeNick : ( nick : string ) => void
44
47
token : string
45
48
} ) => ( cmd : SlashCommand , arg ?: string ) => {
49
+ const showMessage = ( message : string | React . ReactNode ) =>
50
+ updateMessages ( prevMessages => ( {
51
+ ...prevMessages ,
52
+ messages : [
53
+ ...prevMessages . messages ,
54
+ {
55
+ sid : v4 ( ) ,
56
+ status : {
57
+ message,
58
+ timestamp : new Date ( ) ,
59
+ } ,
60
+ } ,
61
+ ] ,
62
+ } ) )
63
+
46
64
switch ( cmd ) {
47
65
case SlashCommand . HELP :
48
- updateMessages ( prevMessages => ( {
49
- ...prevMessages ,
50
- messages : [
51
- ...prevMessages . messages ,
52
- {
53
- sid : v4 ( ) ,
54
- status : {
55
- message : (
56
- < p >
57
- /me: show information about you
58
- < br />
59
- /join < code > <channel></ code > : join another channel
60
- < br />
61
- /nick < code > <nickname></ code > : set your nickname
62
- </ p >
63
- ) ,
64
- timestamp : new Date ( ) ,
65
- } ,
66
- } ,
67
- ] ,
68
- } ) )
66
+ showMessage (
67
+ < p >
68
+ /me: show information about you
69
+ < br />
70
+ /join < code > <channel></ code > : join another channel
71
+ < br />
72
+ /nick < code > <nickname></ code > : set your nickname
73
+ </ p > ,
74
+ )
69
75
break
70
76
case SlashCommand . JOIN :
71
- onSwitchChannel ( arg as string )
77
+ console . log ( token )
78
+ if ( ! arg || ! arg . length ) {
79
+ showMessage (
80
+ < p >
81
+ You must provide a channel name, e.g.:{ ' ' }
82
+ < code > /join some-channel</ code > !
83
+ </ p > ,
84
+ )
85
+ return
86
+ }
87
+ showMessage (
88
+ < p >
89
+ Joining < code > { arg } </ code > ...
90
+ </ p > ,
91
+ )
92
+ pipe (
93
+ verifyToken ( { apollo, token } ) ,
94
+ TE . map ( ( { contexts } ) => {
95
+ if ( ! contexts . includes ( arg ) ) {
96
+ showMessage (
97
+ < p >
98
+ You are not allowed to join the channel < code > { arg } </ code > .
99
+ < br />
100
+ These are the cannels join can join: { contexts . join ( ', ' ) }
101
+ </ p > ,
102
+ )
103
+ return
104
+ }
105
+ onSwitchChannel ( arg )
106
+ } ) ,
107
+ TE . mapLeft ( err => {
108
+ showMessage ( `Failed to verify token: ${ err . message } ` )
109
+ } ) ,
110
+ ) ( ) . catch ( err => {
111
+ console . error ( err )
112
+ } )
72
113
break
73
114
case SlashCommand . NICK :
74
115
onChangeNick ( arg as string )
@@ -81,52 +122,18 @@ export const SlashCommandHandler = ({
81
122
} )
82
123
. then ( ( { data } ) => {
83
124
if ( ! data ) {
84
- updateMessages ( prevMessages => ( {
85
- ...prevMessages ,
86
- messages : [
87
- ...prevMessages . messages ,
88
- {
89
- sid : v4 ( ) ,
90
- status : {
91
- message : `Failed to verify token!` ,
92
- timestamp : new Date ( ) ,
93
- } ,
94
- } ,
95
- ] ,
96
- } ) )
125
+ showMessage ( `Failed to verify token!` )
97
126
} else {
98
127
const { identity, contexts } = data . verifyToken
99
- updateMessages ( prevMessages => ( {
100
- ...prevMessages ,
101
- messages : [
102
- ...prevMessages . messages ,
103
- {
104
- sid : v4 ( ) ,
105
- status : {
106
- message : `Hey ${ identity } , you are allowed to access these channels: ${ contexts . join (
107
- ',' ,
108
- ) } .`,
109
- timestamp : new Date ( ) ,
110
- } ,
111
- } ,
112
- ] ,
113
- } ) )
128
+ showMessage (
129
+ `Hey ${ identity } , you are allowed to access these channels: ${ contexts . join (
130
+ ',' ,
131
+ ) } .`,
132
+ )
114
133
}
115
134
} )
116
135
. catch ( err => {
117
- updateMessages ( prevMessages => ( {
118
- ...prevMessages ,
119
- messages : [
120
- ...prevMessages . messages ,
121
- {
122
- sid : v4 ( ) ,
123
- status : {
124
- message : `Failed to verify token: ${ err . message } ` ,
125
- timestamp : new Date ( ) ,
126
- } ,
127
- } ,
128
- ] ,
129
- } ) )
136
+ showMessage ( `Failed to verify token: ${ err . message } ` )
130
137
} )
131
138
}
132
139
}
0 commit comments