@@ -18,11 +18,11 @@ check_auth(struct lws *wsi) {
18
18
if (strlen (token ) == 0 )
19
19
continue ;
20
20
if (i ++ == 2 ) {
21
- b64_text = strdup ( token ) ;
21
+ b64_text = token ;
22
22
break ;
23
23
}
24
24
}
25
- if (b64_text != NULL && strcmp (b64_text , server -> credential ) == 0 )
25
+ if (b64_text != NULL && ! strcmp (b64_text , server -> credential ))
26
26
return 0 ;
27
27
}
28
28
51
51
callback_http (struct lws * wsi , enum lws_callback_reasons reason , void * user , void * in , size_t len ) {
52
52
unsigned char buffer [4096 + LWS_PRE ], * p , * end ;
53
53
char buf [256 ];
54
- int n ;
55
54
56
55
switch (reason ) {
57
56
case LWS_CALLBACK_HTTP :
58
- lwsl_notice ("lws_http_serve: %s\n" , in );
59
-
60
57
{
61
58
char name [100 ], rip [50 ];
62
- lws_get_peer_addresses (wsi , lws_get_socket_fd (wsi ), name ,
63
- sizeof (name ), rip , sizeof (rip ));
64
- sprintf (buf , "%s (%s)" , name , rip );
65
- lwsl_notice ("HTTP connect from %s\n" , buf );
59
+ lws_get_peer_addresses (wsi , lws_get_socket_fd (wsi ), name , sizeof (name ), rip , sizeof (rip ));
60
+ lwsl_notice ("HTTP connect from %s (%s), path: %s\n" , name , rip , in );
66
61
}
67
62
68
63
if (len < 1 ) {
69
64
lws_return_http_status (wsi , HTTP_STATUS_BAD_REQUEST , NULL );
70
65
goto try_to_reuse ;
71
66
}
72
67
73
- // TODO: this doesn't work for websocket
74
68
switch (check_auth (wsi )) {
75
69
case 0 :
76
70
break ;
@@ -85,37 +79,54 @@ callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, voi
85
79
if (lws_hdr_total_length (wsi , WSI_TOKEN_POST_URI ))
86
80
return 0 ;
87
81
88
- if (strcmp ((const char * ) in , "/" )) {
89
- lws_return_http_status (wsi , HTTP_STATUS_NOT_FOUND , NULL );
82
+ p = buffer + LWS_PRE ;
83
+ end = p + sizeof (buffer ) - LWS_PRE ;
84
+
85
+ if (!strncmp ((const char * )in , "/auth_token.js" , 14 )) {
86
+ size_t n = server -> credential != NULL ? sprintf (buf , "var tty_auth_token = '%s';" , server -> credential ) : 0 ;
87
+
88
+ if (lws_add_http_header_status (wsi , HTTP_STATUS_OK , & p , end ))
89
+ return 1 ;
90
+ if (lws_add_http_header_by_token (wsi ,
91
+ WSI_TOKEN_HTTP_CONTENT_TYPE ,
92
+ (unsigned char * ) "application/javascript" ,
93
+ 22 , & p , end ))
94
+ return 1 ;
95
+ if (lws_add_http_header_content_length (wsi , (unsigned long ) n , & p , end ))
96
+ return 1 ;
97
+ if (lws_finalize_http_header (wsi , & p , end ))
98
+ return 1 ;
99
+ if (lws_write (wsi , buffer + LWS_PRE , p - (buffer + LWS_PRE ), LWS_WRITE_HTTP_HEADERS ) < 0 )
100
+ return 1 ;
101
+ if (n > 0 && lws_write_http (wsi , buf , n ) < 0 ) {
102
+ return 1 ;
103
+ }
90
104
goto try_to_reuse ;
91
105
}
92
106
93
- p = buffer + LWS_PRE ;
94
- end = p + sizeof (buffer ) - LWS_PRE ;
107
+ if (strncmp ((const char * ) in , "/" , 1 )) {
108
+ lws_return_http_status (wsi , HTTP_STATUS_NOT_FOUND , NULL );
109
+ goto try_to_reuse ;
110
+ }
95
111
96
- if (lws_add_http_header_status (wsi , 200 , & p , end ))
112
+ if (lws_add_http_header_status (wsi , HTTP_STATUS_OK , & p , end ))
97
113
return 1 ;
98
114
if (lws_add_http_header_by_token (wsi ,
99
115
WSI_TOKEN_HTTP_CONTENT_TYPE ,
100
116
(unsigned char * ) "text/html" ,
101
117
9 , & p , end ))
102
118
return 1 ;
103
- if (lws_add_http_header_content_length (wsi , index_html_len , & p , end ))
119
+ if (lws_add_http_header_content_length (wsi , ( unsigned long ) index_html_len , & p , end ))
104
120
return 1 ;
105
121
if (lws_finalize_http_header (wsi , & p , end ))
106
122
return 1 ;
107
- n = lws_write (wsi , buffer + LWS_PRE , p - (buffer + LWS_PRE ), LWS_WRITE_HTTP_HEADERS );
108
- if (n < 0 ) {
123
+ if (lws_write (wsi , buffer + LWS_PRE , p - (buffer + LWS_PRE ), LWS_WRITE_HTTP_HEADERS ) < 0 ) {
109
124
return 1 ;
110
125
}
111
126
112
- n = lws_write_http (wsi , index_html , index_html_len );
113
- if (n < 0 )
127
+ if (lws_write_http (wsi , index_html , index_html_len ) < 0 )
114
128
return 1 ;
115
129
goto try_to_reuse ;
116
- case LWS_CALLBACK_HTTP_WRITEABLE :
117
- lwsl_info ("LWS_CALLBACK_HTTP_WRITEABLE\n" );
118
- break ;
119
130
default :
120
131
break ;
121
132
}
0 commit comments