@@ -92,16 +92,17 @@ trait GistControllerBase extends ControllerBase {
92
92
val files : Seq [(String , JGitUtil .ContentInfo )] = JGitUtil .getFileList(git, " master" , " ." ).map { file =>
93
93
(if (isGistFile(file.name)) " " else file.name) -> JGitUtil .getContentInfo(git, file.name, file.id)
94
94
}
95
- html.edit(getGist(userName, repoName), files)
95
+ html.edit(getGist(userName, repoName), files, None )
96
96
}
97
97
}
98
98
})
99
99
100
100
post(" /gist/_new" )(usersOnly {
101
- if (context.loginAccount.isDefined){
102
- val loginAccount = context.loginAccount.get
103
- val files = getFileParameters()
101
+ val loginAccount = context.loginAccount.get
102
+ val userName = params.getOrElse(" userName" , loginAccount.userName)
104
103
104
+ if (isEditable(userName, loginUserGroups)) {
105
+ val files = getFileParameters()
105
106
if (files.isEmpty){
106
107
redirect(s " /gist " )
107
108
@@ -110,14 +111,14 @@ trait GistControllerBase extends ControllerBase {
110
111
val description = params(" description" )
111
112
112
113
// Create new repository
113
- val repoName = StringUtil .md5(loginAccount. userName + " " + datetime(new java.util.Date ()))
114
- val gitdir = new File (GistRepoDir , loginAccount. userName + " /" + repoName)
114
+ val repoName = StringUtil .md5(userName + " " + datetime(new java.util.Date ()))
115
+ val gitdir = new File (GistRepoDir , userName + " /" + repoName)
115
116
gitdir.mkdirs()
116
117
JGitUtil .initRepository(gitdir)
117
118
118
119
// Insert record
119
120
registerGist(
120
- loginAccount. userName,
121
+ userName,
121
122
repoName,
122
123
getTitle(files.head._1, repoName),
123
124
description,
@@ -129,9 +130,9 @@ trait GistControllerBase extends ControllerBase {
129
130
commitFiles(git, loginAccount, " Initial commit" , files)
130
131
}
131
132
132
- redirect(s " /gist/ ${loginAccount. userName}/ ${repoName}" )
133
+ redirect(s " /gist/ ${userName}/ ${repoName}" )
133
134
}
134
- }
135
+ } else Unauthorized ()
135
136
})
136
137
137
138
post(" /gist/:userName/:repoName/edit" )(editorOnly {
@@ -166,14 +167,14 @@ trait GistControllerBase extends ControllerBase {
166
167
refUpdate.update()
167
168
}
168
169
169
- redirect(s " /gist/ ${loginAccount. userName}/ ${repoName}" )
170
+ redirect(s " /gist/ ${userName}/ ${repoName}" )
170
171
})
171
172
172
173
get(" /gist/:userName/:repoName/delete" )(editorOnly {
173
174
val userName = params(" userName" )
174
175
val repoName = params(" repoName" )
175
176
176
- if (isEditable(userName)){
177
+ if (isEditable(userName, loginUserGroups )){
177
178
deleteGist(userName, repoName)
178
179
179
180
val gitdir = new File (GistRepoDir , userName + " /" + repoName)
@@ -205,7 +206,7 @@ trait GistControllerBase extends ControllerBase {
205
206
gist,
206
207
getForkedCount(originUserName, originRepoName),
207
208
GistRepositoryURL (gist, baseUrl, context.settings),
208
- isEditable(userName),
209
+ isEditable(userName, loginUserGroups ),
209
210
commits
210
211
)
211
212
}
@@ -268,12 +269,18 @@ trait GistControllerBase extends ControllerBase {
268
269
getUserGists(userName, context.loginAccount.map(_.userName), 0 , Limit ),
269
270
countUserGists(userName, context.loginAccount.map(_.userName))
270
271
)
272
+
273
+ val createSnippet = context.loginAccount.exists { loginAccount =>
274
+ loginAccount.userName == userName || getGroupsByUserName(loginAccount.userName).contains(userName)
275
+ }
276
+
271
277
getAccountByUserName(userName).map { account =>
272
278
html.profile(
273
- account,
274
- if (account.isGroupAccount) Nil else getGroupsByUserName(userName),
275
- getAccountExtraMailAddresses(userName),
276
- result._1
279
+ account = account,
280
+ groupNames = if (account.isGroupAccount) Nil else getGroupsByUserName(userName),
281
+ extraMailAddresses = getAccountExtraMailAddresses(userName),
282
+ gists = result._1,
283
+ createSnippet = createSnippet
277
284
)
278
285
} getOrElse NotFound
279
286
}
@@ -283,7 +290,11 @@ trait GistControllerBase extends ControllerBase {
283
290
}
284
291
285
292
get(" /gist/_new" )(usersOnly {
286
- html.edit(None , Seq ((" " , JGitUtil .ContentInfo (" text" , None , None , Some (" UTF-8" )))))
293
+ val userName = params.get(" userName" )
294
+
295
+ if (isEditable(userName.getOrElse(context.loginAccount.get.userName), loginUserGroups)){
296
+ html.edit(None , Seq ((" " , JGitUtil .ContentInfo (" text" , None , None , Some (" UTF-8" )))), userName)
297
+ } else Unauthorized ()
287
298
})
288
299
289
300
get(" /gist/_add" ){
@@ -335,7 +346,7 @@ trait GistControllerBase extends ControllerBase {
335
346
getForkedCount(userName, repoName),
336
347
GistRepositoryURL (gist, baseUrl, context.settings),
337
348
getForkedGists(userName, repoName),
338
- isEditable(userName)
349
+ isEditable(userName, loginUserGroups )
339
350
)
340
351
} getOrElse NotFound
341
352
}
@@ -504,7 +515,7 @@ trait GistControllerBase extends ControllerBase {
504
515
revision,
505
516
getGistFiles(userName, repoName, revision),
506
517
getGistComments(userName, repoName),
507
- isEditable(userName)
518
+ isEditable(userName, loginUserGroups )
508
519
)
509
520
}
510
521
@@ -527,4 +538,10 @@ trait GistControllerBase extends ControllerBase {
527
538
}
528
539
}
529
540
541
+ private def loginUserGroups : Seq [String ] = {
542
+ context.loginAccount.map { account =>
543
+ getGroupsByUserName(account.userName)
544
+ }.getOrElse(Nil )
545
+ }
546
+
530
547
}
0 commit comments