@@ -19,21 +19,32 @@ class CloudFlare(object):
1919 class _v4base (object ):
2020 """ Cloudflare v4 API"""
2121
22- def __init__ (self , email , token , certtoken , base_url , debug , raw , use_sessions , profile ):
22+ def __init__ (self , config ):
2323 """ Cloudflare v4 API"""
2424
25- self .email = email
26- self .token = token
27- self .certtoken = certtoken
28- self .base_url = base_url
29- self .raw = raw
30- self .use_sessions = use_sessions
31- self .profile = profile
25+ self .config = config
26+ if 'email' in config :
27+ self .email = config ['email' ]
28+ else :
29+ self .email = None
30+ if 'token' in config :
31+ self .token = config ['token' ]
32+ else :
33+ self .token = None
34+ if 'certtoken' in config :
35+ self .certtoken = config ['certtoken' ]
36+ else :
37+ self .certtoken = None
38+
39+ self .base_url = config ['base_url' ]
40+ self .raw = config ['raw' ]
41+ self .use_sessions = config ['use_sessions' ]
42+ self .profile = config ['profile' ]
3243 self .session = None
3344 self .user_agent = user_agent ()
3445
35- if debug :
36- self .logger = CFlogger (debug ).getLogger ()
46+ if ' debug' in config and config [ 'debug' ] :
47+ self .logger = CFlogger (config [ ' debug' ] ).getLogger ()
3748 else :
3849 self .logger = None
3950
@@ -43,42 +54,62 @@ def call_with_no_auth(self, method, parts,
4354 """ Cloudflare v4 API"""
4455
4556 headers = {}
46- self ._add_headers (headers )
57+ self ._AddHeaders (headers )
4758 return self ._call (method , headers , parts ,
4859 identifier1 , identifier2 , identifier3 ,
4960 params , data , files )
5061
51- def _add_headers (self , headers ):
62+ def _AddHeaders (self , headers ):
5263 """ Add default headers """
5364 headers ['User-Agent' ] = self .user_agent
5465 headers ['Content-Type' ] = 'application/json'
5566
56- def _add_auth_headers (self , headers ):
67+ def _AddAuthHeaders (self , headers , method ):
5768 """ Add authentication headers """
58- if self .email is None and self .token is None :
69+
70+ v = 'email' + '.' + method .lower ()
71+ if v in self .config :
72+ email = self .config [v ] # use specific value for this method
73+ else :
74+ email = self .email # use generic value for all methods
75+
76+ v = 'token' + '.' + method .lower ()
77+ if v in self .config :
78+ token = self .config [v ] # use specific value for this method
79+ else :
80+ token = self .token # use generic value for all methods
81+
82+ if email is None and token is None :
5983 raise CloudFlareAPIError (0 , 'no email and no token defined' )
60- if self . token is None :
84+ if token is None :
6185 raise CloudFlareAPIError (0 , 'no token defined' )
62- if self . email is None :
63- headers ['Authorization' ] = 'Bearer %s' % (self . token )
86+ if email is None :
87+ headers ['Authorization' ] = 'Bearer %s' % (token )
6488 else :
65- headers ['X-Auth-Email' ] = self . email
66- headers ['X-Auth-Key' ] = self . token
89+ headers ['X-Auth-Email' ] = email
90+ headers ['X-Auth-Key' ] = token
6791
68- def _add_certtoken_headers (self , headers ):
92+ def _AddCerttokenHeaders (self , headers , method ):
6993 """ Add authentication headers """
70- if self .certtoken is None :
94+
95+ v = 'certtoken' + '.' + method .lower ()
96+ if v in self .config :
97+ certtoken = self .config [v ] # use specific value for this method
98+ else :
99+ certtoken = self .certtoken # use generic value for all methods
100+
101+ if certtoken is None :
71102 raise CloudFlareAPIError (0 , 'no cert token defined' )
72- headers ['X-Auth-User-Service-Key' ] = self . certtoken
103+ headers ['X-Auth-User-Service-Key' ] = certtoken
73104
74105 def call_with_auth (self , method , parts ,
75106 identifier1 = None , identifier2 = None , identifier3 = None ,
76107 params = None , data = None , files = None ):
77108 """ Cloudflare v4 API"""
78109
79110 headers = {}
80- self ._add_headers (headers )
81- self ._add_auth_headers (headers )
111+ self ._AddHeaders (headers )
112+ self ._AddAuthHeaders (headers , method )
82113 if isinstance (data , str ):
83114 # passing javascript vs JSON
84115 headers ['Content-Type' ] = 'application/javascript'
@@ -97,8 +128,8 @@ def call_with_auth_unwrapped(self, method, parts,
97128 """ Cloudflare v4 API"""
98129
99130 headers = {}
100- self ._add_headers (headers )
101- self ._add_auth_headers (headers )
131+ self ._AddHeaders (headers )
132+ self ._AddAuthHeaders (headers , method )
102133 if isinstance (data , str ):
103134 # passing javascript vs JSON
104135 headers ['Content-Type' ] = 'application/javascript'
@@ -117,8 +148,8 @@ def call_with_certauth(self, method, parts,
117148 """ Cloudflare v4 API"""
118149
119150 headers = {}
120- self ._add_headers (headers )
121- self ._add_certtoken_headers (headers )
151+ self ._AddHeaders (headers )
152+ self ._AddCerttokenHeaders (headers , method )
122153 return self ._call (method , headers , parts ,
123154 identifier1 , identifier2 , identifier3 ,
124155 params , data , files )
@@ -506,7 +537,7 @@ def _call_unwrapped(self, method, headers, parts,
506537 result = response_data
507538 return result
508539
509- class _add_unused (object ):
540+ class _AddUnused (object ):
510541 """ Cloudflare v4 API"""
511542
512543 def __init__ (self , base , p1 , p2 = None , p3 = None ):
@@ -551,7 +582,7 @@ def delete(self, identifier1=None, identifier2=None, identifier3=None, params=No
551582
552583 raise CloudFlareAPIError (0 , 'delete() call not available for this endpoint' )
553584
554- class _add_noauth (object ):
585+ class _AddNoAuth (object ):
555586 """ Cloudflare v4 API"""
556587
557588 def __init__ (self , base , p1 , p2 = None , p3 = None ):
@@ -598,7 +629,7 @@ def delete(self, identifier1=None, identifier2=None, identifier3=None, params=No
598629
599630 raise CloudFlareAPIError (0 , 'delete() call not available for this endpoint' )
600631
601- class _add_with_auth (object ):
632+ class _AddWithAuth (object ):
602633 """ Cloudflare v4 API"""
603634
604635 def __init__ (self , base , p1 , p2 = None , p3 = None ):
@@ -653,7 +684,7 @@ def delete(self, identifier1=None, identifier2=None, identifier3=None, params=No
653684 identifier1 , identifier2 , identifier3 ,
654685 params , data )
655686
656- class _add_with_auth_unwrapped (object ):
687+ class _AddWithAuthUnwrapped (object ):
657688 """ Cloudflare v4 API"""
658689
659690 def __init__ (self , base , p1 , p2 = None , p3 = None ):
@@ -708,7 +739,7 @@ def delete(self, identifier1=None, identifier2=None, identifier3=None, params=No
708739 identifier1 , identifier2 , identifier3 ,
709740 params , data )
710741
711- class _add_with_cert_auth (object ):
742+ class _AddWithCertAuth (object ):
712743 """ Cloudflare v4 API"""
713744
714745 def __init__ (self , base , p1 , p2 = None , p3 = None ):
@@ -784,15 +815,15 @@ def add(self, t, p1, p2=None, p3=None):
784815 name = a [- 1 ]
785816
786817 if t == 'VOID' :
787- f = self ._add_unused (self ._base , p1 , p2 , p3 )
818+ f = self ._AddUnused (self ._base , p1 , p2 , p3 )
788819 elif t == 'OPEN' :
789- f = self ._add_noauth (self ._base , p1 , p2 , p3 )
820+ f = self ._AddNoAuth (self ._base , p1 , p2 , p3 )
790821 elif t == 'AUTH' :
791- f = self ._add_with_auth (self ._base , p1 , p2 , p3 )
822+ f = self ._AddWithAuth (self ._base , p1 , p2 , p3 )
792823 elif t == 'CERT' :
793- f = self ._add_with_cert_auth (self ._base , p1 , p2 , p3 )
824+ f = self ._AddWithCertAuth (self ._base , p1 , p2 , p3 )
794825 elif t == 'AUTH_UNWRAPPED' :
795- f = self ._add_with_auth_unwrapped (self ._base , p1 , p2 , p3 )
826+ f = self ._AddWithAuthUnwrapped (self ._base , p1 , p2 , p3 )
796827 else :
797828 # should never happen
798829 raise CloudFlareAPIError (0 , 'api load type mismatch' )
@@ -827,31 +858,41 @@ def __init__(self, email=None, token=None, certtoken=None, debug=False, raw=Fals
827858
828859 base_url = BASE_URL
829860
830- # class creation values override configuration values
831861 try :
832- [ conf_email , conf_token , conf_certtoken , extras , profile ] = read_configs (profile )
862+ config = read_configs (profile )
833863 except :
834864 raise CloudFlareAPIError (0 , 'profile/configuration read error' )
835865
836- if email is None :
837- email = conf_email
838- if token is None :
839- token = conf_token
840- if certtoken is None :
841- certtoken = conf_certtoken
842-
843- if email == '' :
844- email = None
845- if token == '' :
846- token = None
847- if certtoken == '' :
848- certtoken = None
849- self ._base = self ._v4base (email , token , certtoken , base_url , debug , raw , use_sessions , profile )
866+ # class creation values override all configuration values
867+ if email is not None :
868+ config ['email' ] = email
869+ if token is not None :
870+ config ['token' ] = token
871+ if certtoken is not None :
872+ config ['certtoken' ] = certtoken
873+ if base_url is not None :
874+ config ['base_url' ] = base_url
875+ if debug is not None :
876+ config ['debug' ] = debug
877+ if raw is not None :
878+ config ['raw' ] = raw
879+ if use_sessions is not None :
880+ config ['use_sessions' ] = use_sessions
881+ if profile is not None :
882+ config ['profile' ] = profile
883+
884+ # we do not need to handle item.call values - they pass straight thru
885+
886+ for x in config :
887+ if config [x ] == '' :
888+ config [x ] = None
889+
890+ self ._base = self ._v4base (config )
850891
851892 # add the API calls
852893 api_v4 (self )
853- if extras :
854- api_extras (self , extras )
894+ if ' extras' in config and config [ 'extras' ] :
895+ api_extras (self , config [ ' extras' ] )
855896
856897 def __call__ (self ):
857898 """ Cloudflare v4 API"""
0 commit comments