@@ -6,7 +6,6 @@ use actix_web_httpauth::middleware::HttpAuthentication;
6
6
use futures:: { future, Future } ;
7
7
use rand:: distributions:: Alphanumeric ;
8
8
use rand:: { thread_rng, Rng } ;
9
- use serde:: Deserialize ;
10
9
use std:: error:: Error ;
11
10
use std:: fs;
12
11
use std:: fs:: OpenOptions ;
@@ -77,10 +76,9 @@ fn new_paste(
77
76
( mp, form) : ( Multipart , web:: Data < form_data:: Form > ) ,
78
77
) -> impl Future < Item = HttpResponse , Error = form_data:: Error > {
79
78
form_data:: handle_multipart ( mp, form. get_ref ( ) . clone ( ) ) . map ( move |form_value| {
80
- // XXX: Can we safely unwrap form_value, thus avoiding this check?
81
- let paste = match form_value. text ( ) {
82
- Some ( paste) => paste,
83
- None => return HttpResponse :: InternalServerError ( ) . into ( ) ,
79
+ let paste = match form_value {
80
+ form_data:: Value :: Map ( mut form_map) => form_map. remove ( "paste" ) ?. text ( ) ?,
81
+ _ => return None ,
84
82
} ;
85
83
86
84
let mut rng = thread_rng ( ) ;
@@ -99,15 +97,18 @@ fn new_paste(
99
97
}
100
98
} ;
101
99
102
- let paste_url = format ! ( "{}/{}" , config . url_base , paste_id ) ;
100
+ file . write_all ( paste . as_bytes ( ) ) . ok ( ) ? ;
103
101
104
- match file. write_all ( paste. as_bytes ( ) ) {
105
- Ok ( _) => HttpResponse :: Created ( )
106
- . set_header ( "Location" , paste_url. clone ( ) )
107
- . content_type ( "text/plain" )
108
- . body ( paste_url) ,
109
- Err ( _) => HttpResponse :: InternalServerError ( ) . into ( ) ,
110
- }
102
+ let paste_url = format ! ( "{}/{}" , config. url_base, paste_id) ;
103
+ Some ( HttpResponse :: Created ( )
104
+ . set_header ( "Location" , paste_url. clone ( ) )
105
+ . content_type ( "text/plain" )
106
+ . body ( paste_url) )
107
+ } )
108
+ . map ( |res| match res {
109
+ Some ( response) => response,
110
+ // TODO: Add info to error response.
111
+ None => HttpResponse :: InternalServerError ( ) . finish ( ) ,
111
112
} )
112
113
}
113
114
0 commit comments