@@ -56,35 +56,33 @@ router.get('/api/:ref?', (req, res, next) => {
5656 res . redirect ( baseURL + '/view/api' ) ;
5757 } else {
5858 doc . code = fs . readFileSync ( './data/apis/' + doc . id + '.api' ) ; // Read api src into this...
59- res . render ( 'edit/api' , _ . merge ( defaultVars , { api : doc , socket : ':' + settings . general . socket , title : `Edit API ${ doc . name } [${ doc . ref } ]` } ) ) ;
59+ res . render ( 'edit/api' , _ . merge ( defaultVars , { api : doc , title : `Edit API ${ doc . name } [${ doc . ref } ]` } ) ) ;
6060 }
61- } ) . catch ( err => {
61+ } , ( ) => {
6262 res . redirect ( baseURL + '/view/api' ) ;
6363 } ) ;
6464} ) ;
6565
6666router . post ( '/api/:ref' , ( req , res , next ) => {
67- if ( missingProps ( req . body , [ 'rename' , 'code' ] ) ) {
67+ if ( missingProps ( req . body , [ 'rename' ] ) ) {
6868 req . flash ( 'warning' , 'Missing expected form properties' ) ;
69- res . send ( baseURL + '/edit/api/' + req . params . ref ) ;
69+ res . redirect ( baseURL + '/edit/api/' + req . params . ref ) ;
7070 return ;
7171 }
7272
7373 API . getCond ( { ref : req . params . ref } ) . then ( doc => {
7474 if ( doc . owner !== req . session . user . id ) {
75- res . send ( baseURL + '/view/api' ) ;
75+ res . redirect ( baseURL + '/view/api' ) ;
7676 } else {
7777 let name = req . body . rename ;
7878 if ( name === undefined || name === "" ) name = doc . name ;
7979 if ( name . match ( / ^ [ a - z A - Z 0 - 9 _ \- \. + \[ \] \{ \} \( \) ] { 1 , 32 } $ / ) === null ) {
8080 req . flash ( 'warning' , 'Only 32 chars max please! Accepted chars: a-Z0-9 _-.+[]{}()' ) ;
81- res . send ( baseURL + '/edit/api/' + req . params . ref ) ;
81+ res . redirect ( baseURL + '/edit/api/' + req . params . ref ) ;
8282 } else {
8383 API . update ( { name} , doc . ref ) . then ( ( ) => {
84- fs . writeFile ( './data/apis/' + doc . id + '.api' , req . body . code . replace ( / \r \n / g, '\n' ) . slice ( 0 , 8192 ) , 'utf8' , err => {
85- req . flash ( 'info' , `API ${ name } [${ doc . ref } ] was updated successfully!` ) ;
86- res . send ( baseURL + '/view/api' ) ;
87- } ) ;
84+ req . flash ( 'info' , `API ${ name } [${ doc . ref } ] was updated successfully!` ) ;
85+ res . redirect ( baseURL + '/view/api' ) ;
8886 } ) ;
8987 }
9088 }
@@ -161,52 +159,57 @@ router.post('/list/:ref', (req, res, next) => {
161159// Snippets
162160router . get ( '/snippet/:ref?' , ( req , res , next ) => {
163161 Snippet . getCond ( { ref : req . params . ref } ) . then ( doc => {
164- if ( doc . owner !== req . session . user . id ) {
165- res . redirect ( baseURL + '/view/snippet' ) ;
166- } else {
167- doc . code = fs . readFileSync ( './data/snippets/' + doc . id + '.snippet' ) ; // Read snippet src into this...
168- res . render ( 'edit/snippet' , _ . merge ( defaultVars , { snippet : doc , socket : ':' + settings . general . socket , title : `Edit Snippet ${ doc . name } ` } ) ) ;
169- }
170- } ) . catch ( err => {
162+ Snippet . getTags ( doc . id ) . then ( tags => {
163+ if ( doc . owner !== req . session . user . id ) {
164+ res . redirect ( baseURL + '/view/snippet' ) ;
165+ } else {
166+ doc . code = fs . readFileSync ( './data/snippets/' + doc . id + '.snippet' ) ; // Read snippet src into this...
167+ res . render ( 'edit/snippet' , _ . merge ( defaultVars , { snippet : doc , tags, socket : ':' + settings . general . socket , title : `Edit Snippet ${ doc . name } ` } ) ) ;
168+ }
169+ } ) ;
170+ } , ( ) => {
171171 res . redirect ( baseURL + '/view/snippet' ) ;
172172 } ) ;
173173} ) ;
174174
175175router . post ( '/snippet/:ref' , ( req , res , next ) => {
176- if ( missingProps ( req . body , [ 'name ' , 'tags' ] ) ) {
176+ if ( missingProps ( req . body , [ 'rename ' , 'tags' ] ) ) {
177177 req . flash ( 'warning' , 'Missing expected form properties' ) ;
178- res . send ( baseURL + '/edit/snippet/' + req . params . ref ) ;
178+ res . redirect ( baseURL + '/edit/snippet/' + req . params . ref ) ;
179179 return ;
180180 }
181+
182+ let tags = _ . uniq ( req . body . tags . split ( ',' ) . map ( tag => tag . trim ( ) ) . filter ( tag => tag !== "" ) ) ;
183+ let rejects = tags . filter ( tag => tag . match ( / ^ ( [ a - z A - Z 0 - 9 _ \- \. + \[ \] \{ \} \( \) ] { 1 , 32 } ) $ / g) === null ) ;
184+
181185 Snippet . getCond ( { ref : req . params . ref } ) . then ( doc => {
182186 if ( doc . owner !== req . session . user . id ) {
183- res . send ( baseURL + '/view/snippet' ) ;
187+ res . redirect ( baseURL + '/view/snippet' ) ;
184188 } else {
185189 let name = req . body . rename ;
186190 if ( name === undefined || name === "" ) name = doc . name ;
187191 if ( name . match ( / ^ [ a - z A - Z 0 - 9 _ \- \. + \[ \] \{ \} \( \) ] { 1 , 32 } $ / ) === null ) {
188192 req . flash ( 'warning' , 'Only 32 chars max please! Accepted chars: a-Z0-9 _-.+[]{}()' ) ;
189- res . send ( baseURL + '/edit/snippet/' + req . params . ref ) ;
193+ res . redirect ( baseURL + '/edit/snippet/' + req . params . ref ) ;
194+
195+ } else if ( rejects . length > 0 || req . body . tags . length > 255 ) {
196+ req . flash ( 'warning' , 'Snippet tags invalid! 32 chars per tag, accepted chars: a-Z0-9 _-.+[]{}()' ) ;
197+ res . redirect ( baseURL + '/edit/snippet/' + req . params . ref ) ;
198+
190199 } else {
191200 Snippet . getCond ( { name : req . body . rename , owner : req . session . user . id } ) . then ( dup => {
201+ if ( req . body . rename !== doc . name && dup !== null ) {
202+ req . flash ( 'warning' , `You already have another snippet named ${ req . body . rename } ` ) ;
203+ res . redirect ( baseURL + '/edit/snippet/' + req . params . ref ) ;
204+ return ;
205+ }
192206
193- if ( ( req . body . rename !== doc . name && dup === null ) || ( req . body . rename === doc . name ) ) {
194- Snippet . update ( { name} , doc . ref ) . then ( ( ) => {
195- fs . writeFile ( './data/snippets/' + doc . id + '.snippet' , req . body . code . replace ( / \r \n / g, '\n' ) . slice ( 0 , 8192 ) , 'utf8' , err => {
196- req . app . get ( 'removeSnippet' ) ( `${ req . session . user . username } /${ doc . name } ` ) ;
197- req . flash ( 'info' , `Snippet ${ name } was updated successfully!` ) ;
198- res . send ( baseURL + '/view/snippet' ) ;
199- } ) ;
200- } ) ;
201-
202- // Duplicate name - still update the file contents though
203- } else {
204- fs . writeFile ( './data/snippets/' + doc . id + '.snippet' , req . body . code . replace ( / \r \n / g, '\n' ) . slice ( 0 , 8192 ) , 'utf8' , err => {
205- req . app . get ( 'removeSnippet' ) ( `${ req . session . user . username } /${ doc . name } ` ) ;
206- req . flash ( 'warning' , `You already have another snippet named ${ req . body . rename } ` ) ;
207- res . send ( baseURL + '/edit/snippet/' + req . params . ref ) ;
207+ Snippet . update ( { name} , doc . id ) . then ( ( ) => {
208+ Snippet . updateTags ( tags , doc . id ) . then ( ( ) => {
209+ req . flash ( 'info' , `Snippet ${ name } was updated successfully!` ) ;
210+ res . redirect ( baseURL + '/view/snippet' ) ;
208211 } ) ;
209- }
212+ } ) ;
210213 } ) ;
211214 }
212215 }
0 commit comments