##// END OF EJS Templates
more detailed logging on auth system...
marcink -
r2125:097327aa beta
parent child Browse files
Show More
@@ -1,7 +1,7 b''
1 .. _debugging:
1 .. _debugging:
2
2
3 ===================
3 ===================
4 DEBUGGING RHODECODE
4 Debugging RhodeCode
5 ===================
5 ===================
6
6
7 If you encountered problems with RhodeCode here are some instructions how to
7 If you encountered problems with RhodeCode here are some instructions how to
@@ -15,11 +15,16 b' enable detailed debug'
15 RhodeCode uses standard python logging modules to log it's output.
15 RhodeCode uses standard python logging modules to log it's output.
16 By default only loggers with INFO level are displayed. To enable full output
16 By default only loggers with INFO level are displayed. To enable full output
17 change `level = DEBUG` for all logging handlers in currently used .ini file.
17 change `level = DEBUG` for all logging handlers in currently used .ini file.
18 After this you can check much more detailed output of actions happening on
18 This change will allow to see much more detailed output in the logfile or
19 RhodeCode system.
19 console. This generally helps a lot to track issues.
20
20
21
21
22 enable interactive debug mode
22 enable interactive debug mode
23 -----------------------------
23 -----------------------------
24
24
25 To enable interactive debug mode simply
25 To enable interactive debug mode simply comment out `set debug = false` in
26 .ini file, this will trigger and interactive debugger each time there an
27 error in browser, or send a http link if error occured in the backend. This
28 is a great tool for fast debugging as you get a handy python console right
29 in the web view. ** NEVER ENABLE THIS ON PRODUCTION ** the interactive console
30 can be a serious security threat to you system.
@@ -521,8 +521,7 b' class PermsDecorator(object):'
521 self.user = cls.rhodecode_user
521 self.user = cls.rhodecode_user
522 self.user_perms = self.user.permissions
522 self.user_perms = self.user.permissions
523 log.debug('checking %s permissions %s for %s %s',
523 log.debug('checking %s permissions %s for %s %s',
524 self.__class__.__name__, self.required_perms, cls,
524 self.__class__.__name__, self.required_perms, cls, self.user)
525 self.user)
526
525
527 if self.check_permissions():
526 if self.check_permissions():
528 log.debug('Permission granted for %s %s' % (cls, self.user))
527 log.debug('Permission granted for %s %s' % (cls, self.user))
@@ -604,6 +603,7 b' class HasRepoPermissionAnyDecorator(Perm'
604 user_perms = set([self.user_perms['repositories'][repo_name]])
603 user_perms = set([self.user_perms['repositories'][repo_name]])
605 except KeyError:
604 except KeyError:
606 return False
605 return False
606
607 if self.required_perms.intersection(user_perms):
607 if self.required_perms.intersection(user_perms):
608 return True
608 return True
609 return False
609 return False
@@ -658,26 +658,34 b' class PermsFunction(object):'
658 raise Exception("'%s' permission is not defined" % perm)
658 raise Exception("'%s' permission is not defined" % perm)
659 self.required_perms = set(perms)
659 self.required_perms = set(perms)
660 self.user_perms = None
660 self.user_perms = None
661 self.granted_for = ''
662 self.repo_name = None
661 self.repo_name = None
662 self.group_name = None
663
663
664 def __call__(self, check_Location=''):
664 def __call__(self, check_Location=''):
665 user = request.user
665 user = request.user
666 log.debug('checking %s %s %s', self.__class__.__name__,
666 cls_name = self.__class__.__name__
667 self.required_perms, user)
667 check_scope = {
668 'HasPermissionAll': '',
669 'HasPermissionAny': '',
670 'HasRepoPermissionAll': 'repo:%s' % self.repo_name,
671 'HasRepoPermissionAny': 'repo:%s' % self.repo_name,
672 'HasReposGroupPermissionAll': 'group:%s' % self.group_name,
673 'HasReposGroupPermissionAny': 'group:%s' % self.group_name,
674 }.get(cls_name, '?')
675 log.debug('checking cls:%s %s usr:%s %s @ %s', cls_name,
676 self.required_perms, user, check_scope,
677 check_Location or 'unspecified location')
668 if not user:
678 if not user:
669 log.debug('Empty request user')
679 log.debug('Empty request user')
670 return False
680 return False
671 self.user_perms = user.permissions
681 self.user_perms = user.permissions
672 self.granted_for = user
673
674 if self.check_permissions():
682 if self.check_permissions():
675 log.debug('Permission granted %s @ %s', self.granted_for,
683 log.debug('Permission granted for user: %s @ %s', user,
676 check_Location or 'unspecified location')
684 check_Location or 'unspecified location')
677 return True
685 return True
678
686
679 else:
687 else:
680 log.debug('Permission denied for %s @ %s', self.granted_for,
688 log.debug('Permission denied for user: %s @ %s', user,
681 check_Location or 'unspecified location')
689 check_Location or 'unspecified location')
682 return False
690 return False
683
691
@@ -701,7 +709,6 b' class HasPermissionAny(PermsFunction):'
701
709
702
710
703 class HasRepoPermissionAll(PermsFunction):
711 class HasRepoPermissionAll(PermsFunction):
704
705 def __call__(self, repo_name=None, check_Location=''):
712 def __call__(self, repo_name=None, check_Location=''):
706 self.repo_name = repo_name
713 self.repo_name = repo_name
707 return super(HasRepoPermissionAll, self).__call__(check_Location)
714 return super(HasRepoPermissionAll, self).__call__(check_Location)
@@ -711,19 +718,17 b' class HasRepoPermissionAll(PermsFunction'
711 self.repo_name = get_repo_slug(request)
718 self.repo_name = get_repo_slug(request)
712
719
713 try:
720 try:
714 self.user_perms = set(
721 self._user_perms = set(
715 [self.user_perms['repositories'][self.repo_name]]
722 [self.user_perms['repositories'][self.repo_name]]
716 )
723 )
717 except KeyError:
724 except KeyError:
718 return False
725 return False
719 self.granted_for = self.repo_name
726 if self.required_perms.issubset(self._user_perms):
720 if self.required_perms.issubset(self.user_perms):
721 return True
727 return True
722 return False
728 return False
723
729
724
730
725 class HasRepoPermissionAny(PermsFunction):
731 class HasRepoPermissionAny(PermsFunction):
726
727 def __call__(self, repo_name=None, check_Location=''):
732 def __call__(self, repo_name=None, check_Location=''):
728 self.repo_name = repo_name
733 self.repo_name = repo_name
729 return super(HasRepoPermissionAny, self).__call__(check_Location)
734 return super(HasRepoPermissionAny, self).__call__(check_Location)
@@ -733,13 +738,12 b' class HasRepoPermissionAny(PermsFunction'
733 self.repo_name = get_repo_slug(request)
738 self.repo_name = get_repo_slug(request)
734
739
735 try:
740 try:
736 self.user_perms = set(
741 self._user_perms = set(
737 [self.user_perms['repositories'][self.repo_name]]
742 [self.user_perms['repositories'][self.repo_name]]
738 )
743 )
739 except KeyError:
744 except KeyError:
740 return False
745 return False
741 self.granted_for = self.repo_name
746 if self.required_perms.intersection(self._user_perms):
742 if self.required_perms.intersection(self.user_perms):
743 return True
747 return True
744 return False
748 return False
745
749
@@ -751,13 +755,12 b' class HasReposGroupPermissionAny(PermsFu'
751
755
752 def check_permissions(self):
756 def check_permissions(self):
753 try:
757 try:
754 self.user_perms = set(
758 self._user_perms = set(
755 [self.user_perms['repositories_groups'][self.group_name]]
759 [self.user_perms['repositories_groups'][self.group_name]]
756 )
760 )
757 except KeyError:
761 except KeyError:
758 return False
762 return False
759 self.granted_for = self.repo_name
763 if self.required_perms.intersection(self._user_perms):
760 if self.required_perms.intersection(self.user_perms):
761 return True
764 return True
762 return False
765 return False
763
766
@@ -769,13 +772,12 b' class HasReposGroupPermissionAll(PermsFu'
769
772
770 def check_permissions(self):
773 def check_permissions(self):
771 try:
774 try:
772 self.user_perms = set(
775 self._user_perms = set(
773 [self.user_perms['repositories_groups'][self.group_name]]
776 [self.user_perms['repositories_groups'][self.group_name]]
774 )
777 )
775 except KeyError:
778 except KeyError:
776 return False
779 return False
777 self.granted_for = self.repo_name
780 if self.required_perms.issubset(self._user_perms):
778 if self.required_perms.issubset(self.user_perms):
779 return True
781 return True
780 return False
782 return False
781
783
@@ -798,7 +800,6 b' class HasPermissionAnyMiddleware(object)'
798 log.error('Exception while accessing permissions %s' %
800 log.error('Exception while accessing permissions %s' %
799 traceback.format_exc())
801 traceback.format_exc())
800 self.user_perms = set()
802 self.user_perms = set()
801 self.granted_for = ''
802 self.username = user.username
803 self.username = user.username
803 self.repo_name = repo_name
804 self.repo_name = repo_name
804 return self.check_permissions()
805 return self.check_permissions()
@@ -808,7 +809,13 b' class HasPermissionAnyMiddleware(object)'
808 'permissions %s for user:%s repository:%s', self.user_perms,
809 'permissions %s for user:%s repository:%s', self.user_perms,
809 self.username, self.repo_name)
810 self.username, self.repo_name)
810 if self.required_perms.intersection(self.user_perms):
811 if self.required_perms.intersection(self.user_perms):
811 log.debug('permission granted')
812 log.debug('permission granted for user:%s on repo:%s' % (
813 self.username, self.repo_name
814 )
815 )
812 return True
816 return True
813 log.debug('permission denied')
817 log.debug('permission denied for user:%s on repo:%s' % (
818 self.username, self.repo_name
819 )
820 )
814 return False
821 return False
@@ -804,7 +804,7 b' def urlify_text(text_):'
804 def urlify_changesets(text_, repository):
804 def urlify_changesets(text_, repository):
805 """
805 """
806 Extract revision ids from changeset and make link from them
806 Extract revision ids from changeset and make link from them
807
807
808 :param text_:
808 :param text_:
809 :param repository:
809 :param repository:
810 """
810 """
@@ -845,10 +845,10 b' def urlify_commit(text_, repository=None'
845 """
845 """
846 import re
846 import re
847 import traceback
847 import traceback
848
848
849 def escaper(string):
849 def escaper(string):
850 return string.replace('<', '&lt;').replace('>', '&gt;')
850 return string.replace('<', '&lt;').replace('>', '&gt;')
851
851
852 def linkify_others(t, l):
852 def linkify_others(t, l):
853 urls = re.compile(r'(\<a.*?\<\/a\>)',)
853 urls = re.compile(r'(\<a.*?\<\/a\>)',)
854 links = []
854 links = []
@@ -859,8 +859,8 b' def urlify_commit(text_, repository=None'
859 links.append(e)
859 links.append(e)
860
860
861 return ''.join(links)
861 return ''.join(links)
862
862
863
863
864 # urlify changesets - extrac revisions and make link out of them
864 # urlify changesets - extrac revisions and make link out of them
865 text_ = urlify_changesets(escaper(text_), repository)
865 text_ = urlify_changesets(escaper(text_), repository)
866
866
General Comments 0
You need to be logged in to leave comments. Login now