##// END OF EJS Templates
#478 permissions overview for admin in user edit view
marcink -
r2435:751c1c56 beta
parent child Browse files
Show More
@@ -1,698 +1,699 b''
1 1 .. _changelog:
2 2
3 3 =========
4 4 Changelog
5 5 =========
6 6
7 7 1.4.0 (**2012-XX-XX**)
8 8 ----------------------
9 9
10 10 :status: in-progress
11 11 :branch: beta
12 12
13 13 news
14 14 ++++
15 15
16 16 - new codereview system
17 17 - email map, allowing users to have multiple email addresses mapped into
18 18 their accounts
19 19 - improved git-hook system. Now all actions for git are logged into journal
20 20 including pushed revisions, user and IP address
21 21 - changed setup-app into setup-rhodecode and added default options to it.
22 22 - new git repos are created as bare now by default
23 23 - #464 added links to groups in permission box
24 24 - #465 mentions autocomplete inside comments boxes
25 25 - #469 added --update-only option to whoosh to re-index only given list
26 26 of repos in index
27 27 - rhodecode-api CLI client
28 28 - new git http protocol replaced buggy dulwich implementation.
29 29 Now based on pygrack & gitweb
30 30 - Improved RSS/ATOM feeds. Discoverable by browsers using proper headers, and
31 31 reformated based on user suggestions. Additional rss/atom feeds for user
32 32 journal
33 33 - various i18n improvements
34 - #478 permissions overview for admin in user edit view
34 35
35 36 fixes
36 37 +++++
37 38
38 39 - improved translations
39 40 - fixes issue #455 Creating an archive generates an exception on Windows
40 41 - fixes #448 Download ZIP archive keeps file in /tmp open and results
41 42 in out of disk space
42 43 - fixes issue #454 Search results under Windows include proceeding
43 44 backslash
44 45 - fixed issue #450. Rhodecode no longer will crash when bad revision is
45 46 present in journal data.
46 47 - fix for issue #417, git execution was broken on windows for certain
47 48 commands.
48 49 - fixed #413. Don't disable .git directory for bare repos on deleting
49 50 - fixed issue #459. Changed the way of obtaining logger in reindex task.
50 51 - fixed #453 added ID field in whoosh SCHEMA that solves the issue of
51 52 reindexing modified files
52 53
53 54 1.3.6 (**2012-05-17**)
54 55 ----------------------
55 56
56 57 news
57 58 ++++
58 59
59 60 - chinese traditional translation
60 61 - changed setup-app into setup-rhodecode and added arguments for auto-setup
61 62 mode that doesn't need user interaction
62 63
63 64 fixes
64 65 +++++
65 66
66 67 - fixed no scm found warning
67 68 - fixed __future__ import error on rcextensions
68 69 - made simplejson required lib for speedup on JSON encoding
69 70 - fixes #449 bad regex could get more than revisions from parsing history
70 71 - don't clear DB session when CELERY_EAGER is turned ON
71 72
72 73 1.3.5 (**2012-05-10**)
73 74 ----------------------
74 75
75 76 news
76 77 ++++
77 78
78 79 - use ext_json for json module
79 80 - unified annotation view with file source view
80 81 - notification improvements, better inbox + css
81 82 - #419 don't strip passwords for login forms, make rhodecode
82 83 more compatible with LDAP servers
83 84 - Added HTTP_X_FORWARDED_FOR as another method of extracting
84 85 IP for pull/push logs. - moved all to base controller
85 86 - #415: Adding comment to changeset causes reload.
86 87 Comments are now added via ajax and doesn't reload the page
87 88 - #374 LDAP config is discarded when LDAP can't be activated
88 89 - limited push/pull operations are now logged for git in the journal
89 90 - bumped mercurial to 2.2.X series
90 91 - added support for displaying submodules in file-browser
91 92 - #421 added bookmarks in changelog view
92 93
93 94 fixes
94 95 +++++
95 96
96 97 - fixed dev-version marker for stable when served from source codes
97 98 - fixed missing permission checks on show forks page
98 99 - #418 cast to unicode fixes in notification objects
99 100 - #426 fixed mention extracting regex
100 101 - fixed remote-pulling for git remotes remopositories
101 102 - fixed #434: Error when accessing files or changesets of a git repository
102 103 with submodules
103 104 - fixed issue with empty APIKEYS for users after registration ref. #438
104 105 - fixed issue with getting README files from git repositories
105 106
106 107 1.3.4 (**2012-03-28**)
107 108 ----------------------
108 109
109 110 news
110 111 ++++
111 112
112 113 - Whoosh logging is now controlled by the .ini files logging setup
113 114 - added clone-url into edit form on /settings page
114 115 - added help text into repo add/edit forms
115 116 - created rcextensions module with additional mappings (ref #322) and
116 117 post push/pull/create repo hooks callbacks
117 118 - implemented #377 Users view for his own permissions on account page
118 119 - #399 added inheritance of permissions for users group on repos groups
119 120 - #401 repository group is automatically pre-selected when adding repos
120 121 inside a repository group
121 122 - added alternative HTTP 403 response when client failed to authenticate. Helps
122 123 solving issues with Mercurial and LDAP
123 124 - #402 removed group prefix from repository name when listing repositories
124 125 inside a group
125 126 - added gravatars into permission view and permissions autocomplete
126 127 - #347 when running multiple RhodeCode instances, properly invalidates cache
127 128 for all registered servers
128 129
129 130 fixes
130 131 +++++
131 132
132 133 - fixed #390 cache invalidation problems on repos inside group
133 134 - fixed #385 clone by ID url was loosing proxy prefix in URL
134 135 - fixed some unicode problems with waitress
135 136 - fixed issue with escaping < and > in changeset commits
136 137 - fixed error occurring during recursive group creation in API
137 138 create_repo function
138 139 - fixed #393 py2.5 fixes for routes url generator
139 140 - fixed #397 Private repository groups shows up before login
140 141 - fixed #396 fixed problems with revoking users in nested groups
141 142 - fixed mysql unicode issues + specified InnoDB as default engine with
142 143 utf8 charset
143 144 - #406 trim long branch/tag names in changelog to not break UI
144 145
145 146 1.3.3 (**2012-03-02**)
146 147 ----------------------
147 148
148 149 news
149 150 ++++
150 151
151 152
152 153 fixes
153 154 +++++
154 155
155 156 - fixed some python2.5 compatibility issues
156 157 - fixed issues with removed repos was accidentally added as groups, after
157 158 full rescan of paths
158 159 - fixes #376 Cannot edit user (using container auth)
159 160 - fixes #378 Invalid image urls on changeset screen with proxy-prefix
160 161 configuration
161 162 - fixed initial sorting of repos inside repo group
162 163 - fixes issue when user tried to resubmit same permission into user/user_groups
163 164 - bumped beaker version that fixes #375 leap error bug
164 165 - fixed raw_changeset for git. It was generated with hg patch headers
165 166 - fixed vcs issue with last_changeset for filenodes
166 167 - fixed missing commit after hook delete
167 168 - fixed #372 issues with git operation detection that caused a security issue
168 169 for git repos
169 170
170 171 1.3.2 (**2012-02-28**)
171 172 ----------------------
172 173
173 174 news
174 175 ++++
175 176
176 177
177 178 fixes
178 179 +++++
179 180
180 181 - fixed git protocol issues with repos-groups
181 182 - fixed git remote repos validator that prevented from cloning remote git repos
182 183 - fixes #370 ending slashes fixes for repo and groups
183 184 - fixes #368 improved git-protocol detection to handle other clients
184 185 - fixes #366 When Setting Repository Group To Blank Repo Group Wont Be
185 186 Moved To Root
186 187 - fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
187 188 - fixed #373 missing cascade drop on user_group_to_perm table
188 189
189 190 1.3.1 (**2012-02-27**)
190 191 ----------------------
191 192
192 193 news
193 194 ++++
194 195
195 196
196 197 fixes
197 198 +++++
198 199
199 200 - redirection loop occurs when remember-me wasn't checked during login
200 201 - fixes issues with git blob history generation
201 202 - don't fetch branch for git in file history dropdown. Causes unneeded slowness
202 203
203 204 1.3.0 (**2012-02-26**)
204 205 ----------------------
205 206
206 207 news
207 208 ++++
208 209
209 210 - code review, inspired by github code-comments
210 211 - #215 rst and markdown README files support
211 212 - #252 Container-based and proxy pass-through authentication support
212 213 - #44 branch browser. Filtering of changelog by branches
213 214 - mercurial bookmarks support
214 215 - new hover top menu, optimized to add maximum size for important views
215 216 - configurable clone url template with possibility to specify protocol like
216 217 ssh:// or http:// and also manually alter other parts of clone_url.
217 218 - enabled largefiles extension by default
218 219 - optimized summary file pages and saved a lot of unused space in them
219 220 - #239 option to manually mark repository as fork
220 221 - #320 mapping of commit authors to RhodeCode users
221 222 - #304 hashes are displayed using monospace font
222 223 - diff configuration, toggle white lines and context lines
223 224 - #307 configurable diffs, whitespace toggle, increasing context lines
224 225 - sorting on branches, tags and bookmarks using YUI datatable
225 226 - improved file filter on files page
226 227 - implements #330 api method for listing nodes ar particular revision
227 228 - #73 added linking issues in commit messages to chosen issue tracker url
228 229 based on user defined regular expression
229 230 - added linking of changesets in commit messages
230 231 - new compact changelog with expandable commit messages
231 232 - firstname and lastname are optional in user creation
232 233 - #348 added post-create repository hook
233 234 - #212 global encoding settings is now configurable from .ini files
234 235 - #227 added repository groups permissions
235 236 - markdown gets codehilite extensions
236 237 - new API methods, delete_repositories, grante/revoke permissions for groups
237 238 and repos
238 239
239 240
240 241 fixes
241 242 +++++
242 243
243 244 - rewrote dbsession management for atomic operations, and better error handling
244 245 - fixed sorting of repo tables
245 246 - #326 escape of special html entities in diffs
246 247 - normalized user_name => username in api attributes
247 248 - fixes #298 ldap created users with mixed case emails created conflicts
248 249 on saving a form
249 250 - fixes issue when owner of a repo couldn't revoke permissions for users
250 251 and groups
251 252 - fixes #271 rare JSON serialization problem with statistics
252 253 - fixes #337 missing validation check for conflicting names of a group with a
253 254 repositories group
254 255 - #340 fixed session problem for mysql and celery tasks
255 256 - fixed #331 RhodeCode mangles repository names if the a repository group
256 257 contains the "full path" to the repositories
257 258 - #355 RhodeCode doesn't store encrypted LDAP passwords
258 259
259 260 1.2.5 (**2012-01-28**)
260 261 ----------------------
261 262
262 263 news
263 264 ++++
264 265
265 266 fixes
266 267 +++++
267 268
268 269 - #340 Celery complains about MySQL server gone away, added session cleanup
269 270 for celery tasks
270 271 - #341 "scanning for repositories in None" log message during Rescan was missing
271 272 a parameter
272 273 - fixed creating archives with subrepos. Some hooks were triggered during that
273 274 operation leading to crash.
274 275 - fixed missing email in account page.
275 276 - Reverted Mercurial to 2.0.1 for windows due to bug in Mercurial that makes
276 277 forking on windows impossible
277 278
278 279 1.2.4 (**2012-01-19**)
279 280 ----------------------
280 281
281 282 news
282 283 ++++
283 284
284 285 - RhodeCode is bundled with mercurial series 2.0.X by default, with
285 286 full support to largefiles extension. Enabled by default in new installations
286 287 - #329 Ability to Add/Remove Groups to/from a Repository via AP
287 288 - added requires.txt file with requirements
288 289
289 290 fixes
290 291 +++++
291 292
292 293 - fixes db session issues with celery when emailing admins
293 294 - #331 RhodeCode mangles repository names if the a repository group
294 295 contains the "full path" to the repositories
295 296 - #298 Conflicting e-mail addresses for LDAP and RhodeCode users
296 297 - DB session cleanup after hg protocol operations, fixes issues with
297 298 `mysql has gone away` errors
298 299 - #333 doc fixes for get_repo api function
299 300 - #271 rare JSON serialization problem with statistics enabled
300 301 - #337 Fixes issues with validation of repository name conflicting with
301 302 a group name. A proper message is now displayed.
302 303 - #292 made ldap_dn in user edit readonly, to get rid of confusion that field
303 304 doesn't work
304 305 - #316 fixes issues with web description in hgrc files
305 306
306 307 1.2.3 (**2011-11-02**)
307 308 ----------------------
308 309
309 310 news
310 311 ++++
311 312
312 313 - added option to manage repos group for non admin users
313 314 - added following API methods for get_users, create_user, get_users_groups,
314 315 get_users_group, create_users_group, add_user_to_users_groups, get_repos,
315 316 get_repo, create_repo, add_user_to_repo
316 317 - implements #237 added password confirmation for my account
317 318 and admin edit user.
318 319 - implements #291 email notification for global events are now sent to all
319 320 administrator users, and global config email.
320 321
321 322 fixes
322 323 +++++
323 324
324 325 - added option for passing auth method for smtp mailer
325 326 - #276 issue with adding a single user with id>10 to usergroups
326 327 - #277 fixes windows LDAP settings in which missing values breaks the ldap auth
327 328 - #288 fixes managing of repos in a group for non admin user
328 329
329 330 1.2.2 (**2011-10-17**)
330 331 ----------------------
331 332
332 333 news
333 334 ++++
334 335
335 336 - #226 repo groups are available by path instead of numerical id
336 337
337 338 fixes
338 339 +++++
339 340
340 341 - #259 Groups with the same name but with different parent group
341 342 - #260 Put repo in group, then move group to another group -> repo becomes unavailable
342 343 - #258 RhodeCode 1.2 assumes egg folder is writable (lockfiles problems)
343 344 - #265 ldap save fails sometimes on converting attributes to booleans,
344 345 added getter and setter into model that will prevent from this on db model level
345 346 - fixed problems with timestamps issues #251 and #213
346 347 - fixes #266 RhodeCode allows to create repo with the same name and in
347 348 the same parent as group
348 349 - fixes #245 Rescan of the repositories on Windows
349 350 - fixes #248 cannot edit repos inside a group on windows
350 351 - fixes #219 forking problems on windows
351 352
352 353 1.2.1 (**2011-10-08**)
353 354 ----------------------
354 355
355 356 news
356 357 ++++
357 358
358 359
359 360 fixes
360 361 +++++
361 362
362 363 - fixed problems with basic auth and push problems
363 364 - gui fixes
364 365 - fixed logger
365 366
366 367 1.2.0 (**2011-10-07**)
367 368 ----------------------
368 369
369 370 news
370 371 ++++
371 372
372 373 - implemented #47 repository groups
373 374 - implemented #89 Can setup google analytics code from settings menu
374 375 - implemented #91 added nicer looking archive urls with more download options
375 376 like tags, branches
376 377 - implemented #44 into file browsing, and added follow branch option
377 378 - implemented #84 downloads can be enabled/disabled for each repository
378 379 - anonymous repository can be cloned without having to pass default:default
379 380 into clone url
380 381 - fixed #90 whoosh indexer can index chooses repositories passed in command
381 382 line
382 383 - extended journal with day aggregates and paging
383 384 - implemented #107 source code lines highlight ranges
384 385 - implemented #93 customizable changelog on combined revision ranges -
385 386 equivalent of githubs compare view
386 387 - implemented #108 extended and more powerful LDAP configuration
387 388 - implemented #56 users groups
388 389 - major code rewrites optimized codes for speed and memory usage
389 390 - raw and diff downloads are now in git format
390 391 - setup command checks for write access to given path
391 392 - fixed many issues with international characters and unicode. It uses utf8
392 393 decode with replace to provide less errors even with non utf8 encoded strings
393 394 - #125 added API KEY access to feeds
394 395 - #109 Repository can be created from external Mercurial link (aka. remote
395 396 repository, and manually updated (via pull) from admin panel
396 397 - beta git support - push/pull server + basic view for git repos
397 398 - added followers page and forks page
398 399 - server side file creation (with binary file upload interface)
399 400 and edition with commits powered by codemirror
400 401 - #111 file browser file finder, quick lookup files on whole file tree
401 402 - added quick login sliding menu into main page
402 403 - changelog uses lazy loading of affected files details, in some scenarios
403 404 this can improve speed of changelog page dramatically especially for
404 405 larger repositories.
405 406 - implements #214 added support for downloading subrepos in download menu.
406 407 - Added basic API for direct operations on rhodecode via JSON
407 408 - Implemented advanced hook management
408 409
409 410 fixes
410 411 +++++
411 412
412 413 - fixed file browser bug, when switching into given form revision the url was
413 414 not changing
414 415 - fixed propagation to error controller on simplehg and simplegit middlewares
415 416 - fixed error when trying to make a download on empty repository
416 417 - fixed problem with '[' chars in commit messages in journal
417 418 - fixed #99 Unicode errors, on file node paths with non utf-8 characters
418 419 - journal fork fixes
419 420 - removed issue with space inside renamed repository after deletion
420 421 - fixed strange issue on formencode imports
421 422 - fixed #126 Deleting repository on Windows, rename used incompatible chars.
422 423 - #150 fixes for errors on repositories mapped in db but corrupted in
423 424 filesystem
424 425 - fixed problem with ascendant characters in realm #181
425 426 - fixed problem with sqlite file based database connection pool
426 427 - whoosh indexer and code stats share the same dynamic extensions map
427 428 - fixes #188 - relationship delete of repo_to_perm entry on user removal
428 429 - fixes issue #189 Trending source files shows "show more" when no more exist
429 430 - fixes issue #197 Relative paths for pidlocks
430 431 - fixes issue #198 password will require only 3 chars now for login form
431 432 - fixes issue #199 wrong redirection for non admin users after creating a repository
432 433 - fixes issues #202, bad db constraint made impossible to attach same group
433 434 more than one time. Affects only mysql/postgres
434 435 - fixes #218 os.kill patch for windows was missing sig param
435 436 - improved rendering of dag (they are not trimmed anymore when number of
436 437 heads exceeds 5)
437 438
438 439 1.1.8 (**2011-04-12**)
439 440 ----------------------
440 441
441 442 news
442 443 ++++
443 444
444 445 - improved windows support
445 446
446 447 fixes
447 448 +++++
448 449
449 450 - fixed #140 freeze of python dateutil library, since new version is python2.x
450 451 incompatible
451 452 - setup-app will check for write permission in given path
452 453 - cleaned up license info issue #149
453 454 - fixes for issues #137,#116 and problems with unicode and accented characters.
454 455 - fixes crashes on gravatar, when passed in email as unicode
455 456 - fixed tooltip flickering problems
456 457 - fixed came_from redirection on windows
457 458 - fixed logging modules, and sql formatters
458 459 - windows fixes for os.kill issue #133
459 460 - fixes path splitting for windows issues #148
460 461 - fixed issue #143 wrong import on migration to 1.1.X
461 462 - fixed problems with displaying binary files, thanks to Thomas Waldmann
462 463 - removed name from archive files since it's breaking ui for long repo names
463 464 - fixed issue with archive headers sent to browser, thanks to Thomas Waldmann
464 465 - fixed compatibility for 1024px displays, and larger dpi settings, thanks to
465 466 Thomas Waldmann
466 467 - fixed issue #166 summary pager was skipping 10 revisions on second page
467 468
468 469
469 470 1.1.7 (**2011-03-23**)
470 471 ----------------------
471 472
472 473 news
473 474 ++++
474 475
475 476 fixes
476 477 +++++
477 478
478 479 - fixed (again) #136 installation support for FreeBSD
479 480
480 481
481 482 1.1.6 (**2011-03-21**)
482 483 ----------------------
483 484
484 485 news
485 486 ++++
486 487
487 488 fixes
488 489 +++++
489 490
490 491 - fixed #136 installation support for FreeBSD
491 492 - RhodeCode will check for python version during installation
492 493
493 494 1.1.5 (**2011-03-17**)
494 495 ----------------------
495 496
496 497 news
497 498 ++++
498 499
499 500 - basic windows support, by exchanging pybcrypt into sha256 for windows only
500 501 highly inspired by idea of mantis406
501 502
502 503 fixes
503 504 +++++
504 505
505 506 - fixed sorting by author in main page
506 507 - fixed crashes with diffs on binary files
507 508 - fixed #131 problem with boolean values for LDAP
508 509 - fixed #122 mysql problems thanks to striker69
509 510 - fixed problem with errors on calling raw/raw_files/annotate functions
510 511 with unknown revisions
511 512 - fixed returned rawfiles attachment names with international character
512 513 - cleaned out docs, big thanks to Jason Harris
513 514
514 515 1.1.4 (**2011-02-19**)
515 516 ----------------------
516 517
517 518 news
518 519 ++++
519 520
520 521 fixes
521 522 +++++
522 523
523 524 - fixed formencode import problem on settings page, that caused server crash
524 525 when that page was accessed as first after server start
525 526 - journal fixes
526 527 - fixed option to access repository just by entering http://server/<repo_name>
527 528
528 529 1.1.3 (**2011-02-16**)
529 530 ----------------------
530 531
531 532 news
532 533 ++++
533 534
534 535 - implemented #102 allowing the '.' character in username
535 536 - added option to access repository just by entering http://server/<repo_name>
536 537 - celery task ignores result for better performance
537 538
538 539 fixes
539 540 +++++
540 541
541 542 - fixed ehlo command and non auth mail servers on smtp_lib. Thanks to
542 543 apollo13 and Johan Walles
543 544 - small fixes in journal
544 545 - fixed problems with getting setting for celery from .ini files
545 546 - registration, password reset and login boxes share the same title as main
546 547 application now
547 548 - fixed #113: to high permissions to fork repository
548 549 - fixed problem with '[' chars in commit messages in journal
549 550 - removed issue with space inside renamed repository after deletion
550 551 - db transaction fixes when filesystem repository creation failed
551 552 - fixed #106 relation issues on databases different than sqlite
552 553 - fixed static files paths links to use of url() method
553 554
554 555 1.1.2 (**2011-01-12**)
555 556 ----------------------
556 557
557 558 news
558 559 ++++
559 560
560 561
561 562 fixes
562 563 +++++
563 564
564 565 - fixes #98 protection against float division of percentage stats
565 566 - fixed graph bug
566 567 - forced webhelpers version since it was making troubles during installation
567 568
568 569 1.1.1 (**2011-01-06**)
569 570 ----------------------
570 571
571 572 news
572 573 ++++
573 574
574 575 - added force https option into ini files for easier https usage (no need to
575 576 set server headers with this options)
576 577 - small css updates
577 578
578 579 fixes
579 580 +++++
580 581
581 582 - fixed #96 redirect loop on files view on repositories without changesets
582 583 - fixed #97 unicode string passed into server header in special cases (mod_wsgi)
583 584 and server crashed with errors
584 585 - fixed large tooltips problems on main page
585 586 - fixed #92 whoosh indexer is more error proof
586 587
587 588 1.1.0 (**2010-12-18**)
588 589 ----------------------
589 590
590 591 news
591 592 ++++
592 593
593 594 - rewrite of internals for vcs >=0.1.10
594 595 - uses mercurial 1.7 with dotencode disabled for maintaining compatibility
595 596 with older clients
596 597 - anonymous access, authentication via ldap
597 598 - performance upgrade for cached repos list - each repository has its own
598 599 cache that's invalidated when needed.
599 600 - performance upgrades on repositories with large amount of commits (20K+)
600 601 - main page quick filter for filtering repositories
601 602 - user dashboards with ability to follow chosen repositories actions
602 603 - sends email to admin on new user registration
603 604 - added cache/statistics reset options into repository settings
604 605 - more detailed action logger (based on hooks) with pushed changesets lists
605 606 and options to disable those hooks from admin panel
606 607 - introduced new enhanced changelog for merges that shows more accurate results
607 608 - new improved and faster code stats (based on pygments lexers mapping tables,
608 609 showing up to 10 trending sources for each repository. Additionally stats
609 610 can be disabled in repository settings.
610 611 - gui optimizations, fixed application width to 1024px
611 612 - added cut off (for large files/changesets) limit into config files
612 613 - whoosh, celeryd, upgrade moved to paster command
613 614 - other than sqlite database backends can be used
614 615
615 616 fixes
616 617 +++++
617 618
618 619 - fixes #61 forked repo was showing only after cache expired
619 620 - fixes #76 no confirmation on user deletes
620 621 - fixes #66 Name field misspelled
621 622 - fixes #72 block user removal when he owns repositories
622 623 - fixes #69 added password confirmation fields
623 624 - fixes #87 RhodeCode crashes occasionally on updating repository owner
624 625 - fixes #82 broken annotations on files with more than 1 blank line at the end
625 626 - a lot of fixes and tweaks for file browser
626 627 - fixed detached session issues
627 628 - fixed when user had no repos he would see all repos listed in my account
628 629 - fixed ui() instance bug when global hgrc settings was loaded for server
629 630 instance and all hgrc options were merged with our db ui() object
630 631 - numerous small bugfixes
631 632
632 633 (special thanks for TkSoh for detailed feedback)
633 634
634 635
635 636 1.0.2 (**2010-11-12**)
636 637 ----------------------
637 638
638 639 news
639 640 ++++
640 641
641 642 - tested under python2.7
642 643 - bumped sqlalchemy and celery versions
643 644
644 645 fixes
645 646 +++++
646 647
647 648 - fixed #59 missing graph.js
648 649 - fixed repo_size crash when repository had broken symlinks
649 650 - fixed python2.5 crashes.
650 651
651 652
652 653 1.0.1 (**2010-11-10**)
653 654 ----------------------
654 655
655 656 news
656 657 ++++
657 658
658 659 - small css updated
659 660
660 661 fixes
661 662 +++++
662 663
663 664 - fixed #53 python2.5 incompatible enumerate calls
664 665 - fixed #52 disable mercurial extension for web
665 666 - fixed #51 deleting repositories don't delete it's dependent objects
666 667
667 668
668 669 1.0.0 (**2010-11-02**)
669 670 ----------------------
670 671
671 672 - security bugfix simplehg wasn't checking for permissions on commands
672 673 other than pull or push.
673 674 - fixed doubled messages after push or pull in admin journal
674 675 - templating and css corrections, fixed repo switcher on chrome, updated titles
675 676 - admin menu accessible from options menu on repository view
676 677 - permissions cached queries
677 678
678 679 1.0.0rc4 (**2010-10-12**)
679 680 --------------------------
680 681
681 682 - fixed python2.5 missing simplejson imports (thanks to Jens BΓ€ckman)
682 683 - removed cache_manager settings from sqlalchemy meta
683 684 - added sqlalchemy cache settings to ini files
684 685 - validated password length and added second try of failure on paster setup-app
685 686 - fixed setup database destroy prompt even when there was no db
686 687
687 688
688 689 1.0.0rc3 (**2010-10-11**)
689 690 -------------------------
690 691
691 692 - fixed i18n during installation.
692 693
693 694 1.0.0rc2 (**2010-10-11**)
694 695 -------------------------
695 696
696 697 - Disabled dirsize in file browser, it's causing nasty bug when dir renames
697 698 occure. After vcs is fixed it'll be put back again.
698 699 - templating/css rewrites, optimized css. No newline at end of file
@@ -1,217 +1,219 b''
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 rhodecode.controllers.admin.users
4 4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5 5
6 6 Users crud controller for pylons
7 7
8 8 :created_on: Apr 4, 2010
9 9 :author: marcink
10 10 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
11 11 :license: GPLv3, see COPYING for more details.
12 12 """
13 13 # This program is free software: you can redistribute it and/or modify
14 14 # it under the terms of the GNU General Public License as published by
15 15 # the Free Software Foundation, either version 3 of the License, or
16 16 # (at your option) any later version.
17 17 #
18 18 # This program is distributed in the hope that it will be useful,
19 19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
20 20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 21 # GNU General Public License for more details.
22 22 #
23 23 # You should have received a copy of the GNU General Public License
24 24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
25 25
26 26 import logging
27 27 import traceback
28 28 import formencode
29 29
30 30 from formencode import htmlfill
31 31 from pylons import request, session, tmpl_context as c, url, config
32 32 from pylons.controllers.util import redirect
33 33 from pylons.i18n.translation import _
34 34
35 35 from rhodecode.lib.exceptions import DefaultUserException, \
36 36 UserOwnsReposException
37 37 from rhodecode.lib import helpers as h
38 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
38 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator,\
39 AuthUser
39 40 from rhodecode.lib.base import BaseController, render
40 41
41 42 from rhodecode.model.db import User, Permission
42 43 from rhodecode.model.forms import UserForm
43 44 from rhodecode.model.user import UserModel
44 45 from rhodecode.model.meta import Session
45 46 from rhodecode.lib.utils import action_logger
46 47
47 48 log = logging.getLogger(__name__)
48 49
49 50
50 51 class UsersController(BaseController):
51 52 """REST Controller styled on the Atom Publishing Protocol"""
52 53 # To properly map this controller, ensure your config/routing.py
53 54 # file has a resource setup:
54 55 # map.resource('user', 'users')
55 56
56 57 @LoginRequired()
57 58 @HasPermissionAllDecorator('hg.admin')
58 59 def __before__(self):
59 60 c.admin_user = session.get('admin_user')
60 61 c.admin_username = session.get('admin_username')
61 62 super(UsersController, self).__before__()
62 63 c.available_permissions = config['available_permissions']
63 64
64 65 def index(self, format='html'):
65 66 """GET /users: All items in the collection"""
66 67 # url('users')
67 68
68 69 c.users_list = self.sa.query(User).all()
69 70 return render('admin/users/users.html')
70 71
71 72 def create(self):
72 73 """POST /users: Create a new item"""
73 74 # url('users')
74 75
75 76 user_model = UserModel()
76 77 user_form = UserForm()()
77 78 try:
78 79 form_result = user_form.to_python(dict(request.POST))
79 80 user_model.create(form_result)
80 81 usr = form_result['username']
81 82 action_logger(self.rhodecode_user, 'admin_created_user:%s' % usr,
82 83 None, self.ip_addr, self.sa)
83 84 h.flash(_('created user %s') % usr,
84 85 category='success')
85 86 Session.commit()
86 87 except formencode.Invalid, errors:
87 88 return htmlfill.render(
88 89 render('admin/users/user_add.html'),
89 90 defaults=errors.value,
90 91 errors=errors.error_dict or {},
91 92 prefix_error=False,
92 93 encoding="UTF-8")
93 94 except Exception:
94 95 log.error(traceback.format_exc())
95 96 h.flash(_('error occurred during creation of user %s') \
96 97 % request.POST.get('username'), category='error')
97 98 return redirect(url('users'))
98 99
99 100 def new(self, format='html'):
100 101 """GET /users/new: Form to create a new item"""
101 102 # url('new_user')
102 103 return render('admin/users/user_add.html')
103 104
104 105 def update(self, id):
105 106 """PUT /users/id: Update an existing item"""
106 107 # Forms posted to this method should contain a hidden field:
107 108 # <input type="hidden" name="_method" value="PUT" />
108 109 # Or using helpers:
109 110 # h.form(url('update_user', id=ID),
110 111 # method='put')
111 112 # url('user', id=ID)
112 113 user_model = UserModel()
113 114 c.user = user_model.get(id)
114
115 c.perm_user = AuthUser(user_id=id)
115 116 _form = UserForm(edit=True, old_data={'user_id': id,
116 117 'email': c.user.email})()
117 118 form_result = {}
118 119 try:
119 120 form_result = _form.to_python(dict(request.POST))
120 121 user_model.update(id, form_result)
121 122 usr = form_result['username']
122 123 action_logger(self.rhodecode_user, 'admin_updated_user:%s' % usr,
123 124 None, self.ip_addr, self.sa)
124 125 h.flash(_('User updated successfully'), category='success')
125 126 Session.commit()
126 127 except formencode.Invalid, errors:
127 128 e = errors.error_dict or {}
128 129 perm = Permission.get_by_key('hg.create.repository')
129 130 e.update({'create_repo_perm': user_model.has_perm(id, perm)})
130 131 return htmlfill.render(
131 132 render('admin/users/user_edit.html'),
132 133 defaults=errors.value,
133 134 errors=e,
134 135 prefix_error=False,
135 136 encoding="UTF-8")
136 137 except Exception:
137 138 log.error(traceback.format_exc())
138 139 h.flash(_('error occurred during update of user %s') \
139 140 % form_result.get('username'), category='error')
140 141
141 142 return redirect(url('users'))
142 143
143 144 def delete(self, id):
144 145 """DELETE /users/id: Delete an existing item"""
145 146 # Forms posted to this method should contain a hidden field:
146 147 # <input type="hidden" name="_method" value="DELETE" />
147 148 # Or using helpers:
148 149 # h.form(url('delete_user', id=ID),
149 150 # method='delete')
150 151 # url('user', id=ID)
151 152 user_model = UserModel()
152 153 try:
153 154 user_model.delete(id)
154 155 Session.commit()
155 156 h.flash(_('successfully deleted user'), category='success')
156 157 except (UserOwnsReposException, DefaultUserException), e:
157 158 h.flash(e, category='warning')
158 159 except Exception:
159 160 log.error(traceback.format_exc())
160 161 h.flash(_('An error occurred during deletion of user'),
161 162 category='error')
162 163 return redirect(url('users'))
163 164
164 165 def show(self, id, format='html'):
165 166 """GET /users/id: Show a specific item"""
166 167 # url('user', id=ID)
167 168
168 169 def edit(self, id, format='html'):
169 170 """GET /users/id/edit: Form to edit an existing item"""
170 171 # url('edit_user', id=ID)
171 172 c.user = User.get(id)
172 173 if not c.user:
173 174 return redirect(url('users'))
174 175 if c.user.username == 'default':
175 176 h.flash(_("You can't edit this user"), category='warning')
176 177 return redirect(url('users'))
178 c.perm_user = AuthUser(user_id=id)
177 179 c.user.permissions = {}
178 180 c.granted_permissions = UserModel().fill_perms(c.user)\
179 181 .permissions['global']
180 182
181 183 defaults = c.user.get_dict()
182 184 perm = Permission.get_by_key('hg.create.repository')
183 185 defaults.update({'create_repo_perm': UserModel().has_perm(id, perm)})
184 186
185 187 return htmlfill.render(
186 188 render('admin/users/user_edit.html'),
187 189 defaults=defaults,
188 190 encoding="UTF-8",
189 191 force_defaults=False
190 192 )
191 193
192 194 def update_perm(self, id):
193 195 """PUT /users_perm/id: Update an existing item"""
194 196 # url('user_perm', id=ID, method='put')
195 197
196 198 grant_perm = request.POST.get('create_repo_perm', False)
197 199 user_model = UserModel()
198 200
199 201 if grant_perm:
200 202 perm = Permission.get_by_key('hg.create.none')
201 203 user_model.revoke_perm(id, perm)
202 204
203 205 perm = Permission.get_by_key('hg.create.repository')
204 206 user_model.grant_perm(id, perm)
205 207 h.flash(_("Granted 'repository create' permission to user"),
206 208 category='success')
207 209 Session.commit()
208 210 else:
209 211 perm = Permission.get_by_key('hg.create.repository')
210 212 user_model.revoke_perm(id, perm)
211 213
212 214 perm = Permission.get_by_key('hg.create.none')
213 215 user_model.grant_perm(id, perm)
214 216 h.flash(_("Revoked 'repository create' permission to user"),
215 217 category='success')
216 218 Session.commit()
217 219 return redirect(url('edit_user', id=id))
@@ -1,161 +1,207 b''
1 1 ## -*- coding: utf-8 -*-
2 2 <%inherit file="/base/base.html"/>
3 3
4 4 <%def name="title()">
5 5 ${_('Edit user')} ${c.user.username} - ${c.rhodecode_name}
6 6 </%def>
7 7
8 8 <%def name="breadcrumbs_links()">
9 9 ${h.link_to(_('Admin'),h.url('admin_home'))}
10 10 &raquo;
11 11 ${h.link_to(_('Users'),h.url('users'))}
12 12 &raquo;
13 13 ${_('edit')} "${c.user.username}"
14 14 </%def>
15 15
16 16 <%def name="page_nav()">
17 17 ${self.menu('admin')}
18 18 </%def>
19 19
20 20 <%def name="main()">
21 21 <div class="box box-left">
22 22 <!-- box / title -->
23 23 <div class="title">
24 24 ${self.breadcrumbs()}
25 25 </div>
26 26 <!-- end box / title -->
27 27 ${h.form(url('update_user', id=c.user.user_id),method='put')}
28 28 <div class="form">
29 29 <div class="field">
30 30 <div class="gravatar_box">
31 31 <div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(c.user.email)}"/></div>
32 32 <p>
33 33 %if c.use_gravatar:
34 34 <strong>${_('Change your avatar at')} <a href="http://gravatar.com">gravatar.com</a></strong>
35 35 <br/>${_('Using')} ${c.user.email}
36 36 %else:
37 37 <br/>${c.user.email}
38 38 %endif
39 39 </div>
40 40 </div>
41 41 <div class="field">
42 42 <div class="label">
43 43 <label>${_('API key')}</label> ${c.user.api_key}
44 44 </div>
45 45 </div>
46 46
47 47 <div class="fields">
48 48 <div class="field">
49 49 <div class="label">
50 50 <label for="username">${_('Username')}:</label>
51 51 </div>
52 52 <div class="input">
53 53 ${h.text('username',class_='medium')}
54 54 </div>
55 55 </div>
56 56
57 57 <div class="field">
58 58 <div class="label">
59 59 <label for="ldap_dn">${_('LDAP DN')}:</label>
60 60 </div>
61 61 <div class="input">
62 62 ${h.text('ldap_dn',class_='medium disabled',readonly="readonly")}
63 63 </div>
64 64 </div>
65 65
66 66 <div class="field">
67 67 <div class="label">
68 68 <label for="new_password">${_('New password')}:</label>
69 69 </div>
70 70 <div class="input">
71 71 ${h.password('new_password',class_='medium',autocomplete="off")}
72 72 </div>
73 73 </div>
74 74
75 75 <div class="field">
76 76 <div class="label">
77 77 <label for="password_confirmation">${_('New password confirmation')}:</label>
78 78 </div>
79 79 <div class="input">
80 80 ${h.password('password_confirmation',class_="medium",autocomplete="off")}
81 81 </div>
82 82 </div>
83 83
84 84 <div class="field">
85 85 <div class="label">
86 86 <label for="name">${_('First Name')}:</label>
87 87 </div>
88 88 <div class="input">
89 89 ${h.text('name',class_='medium')}
90 90 </div>
91 91 </div>
92 92
93 93 <div class="field">
94 94 <div class="label">
95 95 <label for="lastname">${_('Last Name')}:</label>
96 96 </div>
97 97 <div class="input">
98 98 ${h.text('lastname',class_='medium')}
99 99 </div>
100 100 </div>
101 101
102 102 <div class="field">
103 103 <div class="label">
104 104 <label for="email">${_('Email')}:</label>
105 105 </div>
106 106 <div class="input">
107 107 ${h.text('email',class_='medium')}
108 108 </div>
109 109 </div>
110 110
111 111 <div class="field">
112 112 <div class="label label-checkbox">
113 113 <label for="active">${_('Active')}:</label>
114 114 </div>
115 115 <div class="checkboxes">
116 116 ${h.checkbox('active',value=True)}
117 117 </div>
118 118 </div>
119 119
120 120 <div class="field">
121 121 <div class="label label-checkbox">
122 122 <label for="admin">${_('Admin')}:</label>
123 123 </div>
124 124 <div class="checkboxes">
125 125 ${h.checkbox('admin',value=True)}
126 126 </div>
127 127 </div>
128 128 <div class="buttons">
129 129 ${h.submit('save',_('Save'),class_="ui-button")}
130 130 ${h.reset('reset',_('Reset'),class_="ui-button")}
131 131 </div>
132 132 </div>
133 133 </div>
134 134 ${h.end_form()}
135 135 </div>
136 136 <div class="box box-right">
137 137 <!-- box / title -->
138 138 <div class="title">
139 139 <h5>${_('Permissions')}</h5>
140 140 </div>
141 141 ${h.form(url('user_perm', id=c.user.user_id),method='put')}
142 142 <div class="form">
143 143 <!-- fields -->
144 144 <div class="fields">
145 145 <div class="field">
146 146 <div class="label label-checkbox">
147 147 <label for="create_repo_perm">${_('Create repositories')}:</label>
148 148 </div>
149 149 <div class="checkboxes">
150 150 ${h.checkbox('create_repo_perm',value=True)}
151 151 </div>
152 152 </div>
153 153 <div class="buttons">
154 154 ${h.submit('save',_('Save'),class_="ui-button")}
155 155 ${h.reset('reset',_('Reset'),class_="ui-button")}
156 156 </div>
157 157 </div>
158 158 </div>
159 159 ${h.end_form()}
160
161 ## permissions overview
162 <div id="perms" class="table">
163 %for section in sorted(c.perm_user.permissions.keys()):
164 <div class="perms_section_head">${section.replace("_"," ").capitalize()}</div>
165
166 <div id='tbl_list_wrap_${section}' class="yui-skin-sam">
167 <table id="tbl_list_${section}">
168 <thead>
169 <tr>
170 <th class="left">${_('Name')}</th>
171 <th class="left">${_('Permission')}</th>
172 </thead>
173 <tbody>
174 %for k in c.perm_user.permissions[section]:
175 <%
176 if section != 'global':
177 section_perm = c.perm_user.permissions[section].get(k)
178 _perm = section_perm.split('.')[-1]
179 else:
180 _perm = section_perm = None
181 %>
182 <tr>
183 <td>
184 %if section == 'repositories':
185 <a href="${h.url('summary_home',repo_name=k)}">${k}</a>
186 %elif section == 'repositories_groups':
187 <a href="${h.url('repos_group_home',group_name=k)}">${k}</a>
188 %else:
189 ${k}
190 %endif
191 </td>
192 <td>
193 %if section == 'global':
194 ${h.bool2icon(True)}
195 %else:
196 <span class="perm_tag ${_perm}">${section_perm}</span>
197 %endif
198 </td>
199 </tr>
200 %endfor
201 </tbody>
202 </table>
203 </div>
204 %endfor
205 </div>
160 206 </div>
161 207 </%def>
General Comments 0
You need to be logged in to leave comments. Login now