1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

# This file is part of Buildbot.  Buildbot is free software: you can 

# redistribute it and/or modify it under the terms of the GNU General Public 

# License as published by the Free Software Foundation, version 2. 

# 

# This program is distributed in the hope that it will be useful, but WITHOUT 

# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 

# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 

# details. 

# 

# You should have received a copy of the GNU General Public License along with 

# this program; if not, write to the Free Software Foundation, Inc., 51 

# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 

# 

# Copyright Buildbot Team Members 

 

import types 

import time 

 

def remove_userpassword(url): 

    if '@' not in url: 

        return url 

    if '://' not in url: 

        return url 

 

    # urlparse would've been nice, but doesn't support ssh... sigh     

    protocol_url = url.split('://') 

    protocol = protocol_url[0] 

    repo_url = protocol_url[1].split('@')[-1] 

 

    return protocol + '://' + repo_url 

 

 

def now(_reactor=None): 

    if _reactor and hasattr(_reactor, "seconds"): 

        return _reactor.seconds() 

    else: 

        return time.time() 

 

class Obfuscated: 

    """An obfuscated string in a command""" 

    def __init__(self, real, fake): 

        self.real = real 

        self.fake = fake 

 

    def __str__(self): 

        return self.fake 

 

    def __repr__(self): 

        return `self.fake` 

 

    def __eq__(self, other): 

        return other.__class__ is self.__class__ and \ 

                    other.real == self.real and \ 

                    other.fake == self.fake 

 

    @staticmethod 

    def to_text(s): 

        if isinstance(s, (str, unicode)): 

            return s 

        else: 

            return str(s) 

 

    @staticmethod 

    def get_real(command): 

        rv = command 

        if type(command) == types.ListType: 

            rv = [] 

            for elt in command: 

                if isinstance(elt, Obfuscated): 

                    rv.append(elt.real) 

                else: 

                    rv.append(Obfuscated.to_text(elt)) 

        return rv 

 

    @staticmethod 

    def get_fake(command): 

        rv = command 

        if type(command) == types.ListType: 

            rv = [] 

            for elt in command: 

                if isinstance(elt, Obfuscated): 

                    rv.append(elt.fake) 

                else: 

                    rv.append(Obfuscated.to_text(elt)) 

        return rv