@@ -92,16 +92,17 @@ trait GistControllerBase extends ControllerBase {
9292 val files : Seq [(String , JGitUtil .ContentInfo )] = JGitUtil .getFileList(git, " master" , " ." ).map { file =>
9393 (if (isGistFile(file.name)) " " else file.name) -> JGitUtil .getContentInfo(git, file.name, file.id)
9494 }
95- html.edit(getGist(userName, repoName), files)
95+ html.edit(getGist(userName, repoName), files, None )
9696 }
9797 }
9898 })
9999
100100 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)
104103
104+ if (isEditable(userName, loginUserGroups)) {
105+ val files = getFileParameters()
105106 if (files.isEmpty){
106107 redirect(s " /gist " )
107108
@@ -110,14 +111,14 @@ trait GistControllerBase extends ControllerBase {
110111 val description = params(" description" )
111112
112113 // 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)
115116 gitdir.mkdirs()
116117 JGitUtil .initRepository(gitdir)
117118
118119 // Insert record
119120 registerGist(
120- loginAccount. userName,
121+ userName,
121122 repoName,
122123 getTitle(files.head._1, repoName),
123124 description,
@@ -129,9 +130,9 @@ trait GistControllerBase extends ControllerBase {
129130 commitFiles(git, loginAccount, " Initial commit" , files)
130131 }
131132
132- redirect(s " /gist/ ${loginAccount. userName}/ ${repoName}" )
133+ redirect(s " /gist/ ${userName}/ ${repoName}" )
133134 }
134- }
135+ } else Unauthorized ()
135136 })
136137
137138 post(" /gist/:userName/:repoName/edit" )(editorOnly {
@@ -166,14 +167,14 @@ trait GistControllerBase extends ControllerBase {
166167 refUpdate.update()
167168 }
168169
169- redirect(s " /gist/ ${loginAccount. userName}/ ${repoName}" )
170+ redirect(s " /gist/ ${userName}/ ${repoName}" )
170171 })
171172
172173 get(" /gist/:userName/:repoName/delete" )(editorOnly {
173174 val userName = params(" userName" )
174175 val repoName = params(" repoName" )
175176
176- if (isEditable(userName)){
177+ if (isEditable(userName, loginUserGroups )){
177178 deleteGist(userName, repoName)
178179
179180 val gitdir = new File (GistRepoDir , userName + " /" + repoName)
@@ -205,7 +206,7 @@ trait GistControllerBase extends ControllerBase {
205206 gist,
206207 getForkedCount(originUserName, originRepoName),
207208 GistRepositoryURL (gist, baseUrl, context.settings),
208- isEditable(userName),
209+ isEditable(userName, loginUserGroups ),
209210 commits
210211 )
211212 }
@@ -268,12 +269,18 @@ trait GistControllerBase extends ControllerBase {
268269 getUserGists(userName, context.loginAccount.map(_.userName), 0 , Limit ),
269270 countUserGists(userName, context.loginAccount.map(_.userName))
270271 )
272+
273+ val createSnippet = context.loginAccount.exists { loginAccount =>
274+ loginAccount.userName == userName || getGroupsByUserName(loginAccount.userName).contains(userName)
275+ }
276+
271277 getAccountByUserName(userName).map { account =>
272278 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
277284 )
278285 } getOrElse NotFound
279286 }
@@ -283,7 +290,11 @@ trait GistControllerBase extends ControllerBase {
283290 }
284291
285292 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 ()
287298 })
288299
289300 get(" /gist/_add" ){
@@ -335,7 +346,7 @@ trait GistControllerBase extends ControllerBase {
335346 getForkedCount(userName, repoName),
336347 GistRepositoryURL (gist, baseUrl, context.settings),
337348 getForkedGists(userName, repoName),
338- isEditable(userName)
349+ isEditable(userName, loginUserGroups )
339350 )
340351 } getOrElse NotFound
341352 }
@@ -504,7 +515,7 @@ trait GistControllerBase extends ControllerBase {
504515 revision,
505516 getGistFiles(userName, repoName, revision),
506517 getGistComments(userName, repoName),
507- isEditable(userName)
518+ isEditable(userName, loginUserGroups )
508519 )
509520 }
510521
@@ -527,4 +538,10 @@ trait GistControllerBase extends ControllerBase {
527538 }
528539 }
529540
541+ private def loginUserGroups : Seq [String ] = {
542+ context.loginAccount.map { account =>
543+ getGroupsByUserName(account.userName)
544+ }.getOrElse(Nil )
545+ }
546+
530547}
0 commit comments