@@ -44,7 +44,11 @@ def get_tyler_token(request, state=None):
4444
4545 auth_tokens = request .session .get ('auth_tokens' , {})
4646 print (f"Auth tokens in session: { auth_tokens } " )
47- tyler_token = auth_tokens .get (f'TYLER-TOKEN-{ state .upper ()} ' )
47+
48+ # Try different Tyler token key formats
49+ tyler_token = (auth_tokens .get (f'TYLER-TOKEN-{ state .upper ()} ' ) or
50+ auth_tokens .get (f'tyler_token_{ state } ' ) or
51+ auth_tokens .get (f'tyler-token-{ state } ' ))
4852
4953 if tyler_token :
5054 return tyler_token
@@ -127,25 +131,40 @@ def user_profile(request):
127131 external_data = api_response .json ()
128132 print (f"External data retrieved: { external_data } " )
129133
134+ # Extract address information from external API response
135+ address_info = external_data .get ('address' , {})
136+ address_line1 = address_info .get ('addressLine1' , '' )
137+ address_line2 = address_info .get ('addressLine2' , '' )
138+ city = address_info .get ('city' , '' )
139+ state = address_info .get ('state' , 'IL' )
140+ zip_code = address_info .get ('zipCode' , '60601' )
141+ phone_number = external_data .get ('phoneNumber' , '' )
142+
130143 # Build user profile data combining local and external data
131144 user_data = {
132145 'external_firm_data' : external_data ,
133146 # Local user data (if authenticated)
134147 'id' : request .user .id if request .user .is_authenticated else None ,
135148 'username' : request .user .username if request .user .is_authenticated else 'guest' ,
136- 'email' : request .user .email if request .user .is_authenticated else None ,
149+ 'email' : request .user .email if request .user .is_authenticated else request . session . get ( 'user_email' ) ,
137150 'first_name' : request .user .first_name if request .user .is_authenticated else 'Demo' ,
138151 'last_name' : request .user .last_name if request .user .is_authenticated else 'User' ,
139152 'date_joined' : request .user .date_joined .isoformat () if request .user .is_authenticated else None ,
140153 'last_login' : request .user .last_login .isoformat () if (request .user .is_authenticated and request .user .last_login ) else None ,
154+ # Address information from external API
155+ 'address' : address_line1 ,
156+ 'address_line2' : address_line2 ,
157+ 'city' : city ,
158+ 'state' : state ,
159+ 'zip' : zip_code ,
160+ 'phone' : phone_number ,
141161 # Default location information
142162 'preferred_county' : 'cook' ,
143- 'zip_code' : '60601' , # Downtown Chicago zip for demo
144- 'state' : 'IL' ,
163+ 'zip_code' : zip_code , # Use actual zip from API
145164 'location' : {
146165 'county' : 'Cook County' ,
147166 'state' : 'Illinois' ,
148- 'zip_code' : '60601' ,
167+ 'zip_code' : zip_code ,
149168 'available_counties' : ['cook' , 'dupage' , 'kane' , 'lake' , 'mchenry' , 'will' ]
150169 }
151170 }
@@ -158,12 +177,18 @@ def user_profile(request):
158177 'note' : 'Suffolk eFile API requires authentication. Using demo data.' ,
159178 'id' : request .user .id if request .user .is_authenticated else None ,
160179 'username' : request .user .username if request .user .is_authenticated else 'demo_user' ,
161- 'email' : request .user .email if request .user .is_authenticated else ' demo@example.com' ,
180+ 'email' : request .user .email if request .user .is_authenticated else request . session . get ( 'user_email' , ' demo@example.com') ,
162181 'first_name' : request .user .first_name if request .user .is_authenticated else 'John' ,
163182 'last_name' : request .user .last_name if request .user .is_authenticated else 'Doe' ,
183+ # Default address information for demo
184+ 'address' : '123 Main St' ,
185+ 'address_line2' : '' ,
186+ 'city' : 'Chicago' ,
187+ 'state' : 'IL' ,
188+ 'zip' : '60601' ,
189+ 'phone' : '(312) 555-1234' ,
164190 'preferred_county' : 'cook' ,
165191 'zip_code' : '60601' , # Downtown Chicago zip for demo
166- 'state' : 'IL' ,
167192 'location' : {
168193 'county' : 'Cook County' ,
169194 'state' : 'Illinois' ,
@@ -194,12 +219,18 @@ def user_profile(request):
194219 'response_text' : api_response .text [:200 ] if api_response .text else 'No response body' ,
195220 'id' : request .user .id if request .user .is_authenticated else None ,
196221 'username' : request .user .username if request .user .is_authenticated else 'guest' ,
197- 'email' : request .user .email if request .user .is_authenticated else None ,
222+ 'email' : request .user .email if request .user .is_authenticated else request . session . get ( 'user_email' ) ,
198223 'first_name' : request .user .first_name if request .user .is_authenticated else 'Demo' ,
199224 'last_name' : request .user .last_name if request .user .is_authenticated else 'User' ,
225+ # Default address information
226+ 'address' : '123 Main St' ,
227+ 'address_line2' : '' ,
228+ 'city' : 'Chicago' ,
229+ 'state' : 'IL' ,
230+ 'zip' : '60601' ,
231+ 'phone' : '(312) 555-1234' ,
200232 'preferred_county' : 'cook' ,
201233 'zip_code' : '60601' , # Downtown Chicago zip for demo
202- 'state' : 'IL' ,
203234 'location' : {
204235 'county' : 'Cook County' ,
205236 'state' : 'Illinois' ,
@@ -217,12 +248,18 @@ def user_profile(request):
217248 'external_api_error' : f"Could not connect to Suffolk API: { str (e )} " ,
218249 'id' : request .user .id if request .user .is_authenticated else None ,
219250 'username' : request .user .username if request .user .is_authenticated else 'guest' ,
220- 'email' : request .user .email if request .user .is_authenticated else None ,
251+ 'email' : request .user .email if request .user .is_authenticated else request . session . get ( 'user_email' ) ,
221252 'first_name' : request .user .first_name if request .user .is_authenticated else 'Demo' ,
222253 'last_name' : request .user .last_name if request .user .is_authenticated else 'User' ,
254+ # Default address information
255+ 'address' : '123 Main St' ,
256+ 'address_line2' : '' ,
257+ 'city' : 'Chicago' ,
258+ 'state' : 'IL' ,
259+ 'zip' : '60601' ,
260+ 'phone' : '(312) 555-1234' ,
223261 'preferred_county' : 'cook' ,
224262 'zip_code' : '60601' , # Downtown Chicago zip for demo
225- 'state' : 'IL' ,
226263 'location' : {
227264 'county' : 'Cook County' ,
228265 'state' : 'Illinois' ,
@@ -322,10 +359,79 @@ def external_profile(request):
322359 except Exception as e :
323360 return AuthAPIViews .error_response (f"Error: { str (e )} " )
324361
362+ @staticmethod
363+ @require_http_methods (["GET" ])
364+ def tyler_token (request ):
365+ """Get Tyler token and API key for external form submissions"""
366+ try :
367+ # Get state and Tyler token dynamically
368+ state = AuthAPIViews .get_state_from_request (request )
369+ tyler_token = AuthAPIViews .get_tyler_token (request , state )
370+ api_key = getattr (settings , "SUFFOLK_EFILE_API_KEY" , None )
371+
372+ return AuthAPIViews .success_response ({
373+ 'tyler_token' : tyler_token ,
374+ 'api_key' : api_key ,
375+ 'state' : state
376+ })
377+ except Exception as e :
378+ return AuthAPIViews .error_response (f"Error: { str (e )} " )
379+
380+ @staticmethod
381+ @require_http_methods (["GET" ])
382+ def payment_accounts (request ):
383+ """Get payment accounts from Suffolk eFile API with proper authentication"""
384+ try :
385+ # Get state and Tyler token dynamically
386+ state = AuthAPIViews .get_state_from_request (request )
387+ tyler_token = AuthAPIViews .get_tyler_token (request , state )
388+ api_key = getattr (settings , "SUFFOLK_EFILE_API_KEY" , None )
389+
390+ headers = {
391+ 'Content-Type' : 'application/json' ,
392+ 'User-Agent' : f'{ state .title ()} -eFile-Client/1.0' ,
393+ 'X-API-Key' : api_key if api_key else '' ,
394+ }
395+
396+ # Add Tyler token if available
397+ if tyler_token :
398+ headers [f'tyler-token-{ state } ' ] = tyler_token
399+ else :
400+ # Log that no token was found for debugging
401+ print (f"Warning: No Tyler token found for state '{ state } ' in Suffolk eFile payment accounts request" )
402+
403+ api_response = requests .get (
404+ f'https://efile-test.suffolklitlab.org/jurisdictions/{ state } /payments/payment-accounts/' ,
405+ headers = headers ,
406+ timeout = 10
407+ )
408+
409+ if api_response .status_code == 200 :
410+ payment_accounts = api_response .json ()
411+ return AuthAPIViews .success_response (payment_accounts )
412+ elif api_response .status_code == 401 :
413+ # Return empty list for unauthorized - frontend will show "add new payment method"
414+ return AuthAPIViews .success_response ([])
415+ else :
416+ # Return error with status info
417+ return AuthAPIViews .error_response (
418+ f"Payment accounts API returned status { api_response .status_code } : { api_response .text [:200 ]} " ,
419+ api_response .status_code
420+ )
421+
422+ except requests .exceptions .Timeout :
423+ return AuthAPIViews .error_response ("Payment accounts API request timed out" , 408 )
424+ except requests .exceptions .RequestException as e :
425+ return AuthAPIViews .error_response (f"Could not connect to payment accounts API: { str (e )} " , 503 )
426+ except Exception as e :
427+ return AuthAPIViews .error_response (f"Error: { str (e )} " )
428+
325429
326430# Individual view functions for URL mapping
327431user_login = AuthAPIViews .user_login
328432user_logout = AuthAPIViews .user_logout
329433user_profile = AuthAPIViews .user_profile
330434external_auth = AuthAPIViews .external_auth
331435external_profile = AuthAPIViews .external_profile
436+ payment_accounts = AuthAPIViews .payment_accounts
437+ tyler_token = AuthAPIViews .tyler_token
0 commit comments