@@ -28,7 +28,7 @@ def subscribe_with_no_role(session_id, name: str, email: str, *tags, id='0', pho
2828def sync_user_on_discourse (subscription : Subscription ):
2929 """
3030 Synchronize user data on forum if API is configured
31- :param user_or_id: Django user or his id
31+ :param subscription
3232 :return: returns result of hitting Discourse api
3333 """
3434 can_make_api_call = bool (settings .DISCOURSE_API_KEY and settings .DISCOURSE_API_USER )
@@ -59,6 +59,74 @@ def sync_user_on_discourse(subscription: Subscription):
5959 requests .post (url , data = {'sso' : sso_payload , 'sig' : signature }, headers = headers )
6060
6161
62+ def remove_from_discourse (subscription : Subscription ):
63+ """
64+ Synchronize user data on forum if API is configured
65+ :param subscription
66+ :return: returns result of hitting Discourse api
67+ """
68+ can_make_api_call = bool (settings .DISCOURSE_API_KEY and settings .DISCOURSE_API_USER )
69+ can_work_without_sync = not (settings .DISCOURSE_BASE_URL or can_make_api_call )
70+ if can_work_without_sync :
71+ _logger .info ('Discourse Integration not available' )
72+ return
73+ elif not can_make_api_call :
74+ raise MissingDiscourseAPICredentials ('Must define both DISCOURSE_API_KEY and DISCOURSE_API_USER configs' )
75+
76+ # https://meta.discourse.org/t/sync-sso-user-data-with-the-sync-sso-route/84398
77+ subscriber = subscription .subscriber
78+ params = {
79+ 'email' : subscriber .email ,
80+ 'external_id' : subscriber .id ,
81+ 'require_actisubscription.discourse_groups' : 'false' ,
82+ 'remove_groups' : ',' .join (subscription .discourse_groups )
83+ }
84+ sso_payload , signature = discourse_facade .generate_sso_payload_and_signature (params )
85+ # query_string = parse.urlencode()
86+ url = f'{ settings .DISCOURSE_BASE_URL } /admin/users/sync_sso'
87+ headers = {
88+ 'content-type' : 'multipart/form-data' ,
89+ 'Api-Key' : settings .DISCOURSE_API_KEY ,
90+ 'Api-Username' : settings .DISCOURSE_API_USER ,
91+ }
92+
93+ requests .post (url , data = {'sso' : sso_payload , 'sig' : signature }, headers = headers )
94+
95+
96+ def remove_user_from_discourse (subscription : Subscription ):
97+ """
98+ Synchronize user data on forum if API is configured
99+ :param user_or_id: Django user or his id
100+ :return: returns result of hitting Discourse api
101+ """
102+ can_make_api_call = bool (settings .DISCOURSE_API_KEY and settings .DISCOURSE_API_USER )
103+ can_work_without_sync = not (settings .DISCOURSE_BASE_URL or can_make_api_call )
104+ if can_work_without_sync :
105+ _logger .info ('Discourse Integration not available' )
106+ return
107+ elif not can_make_api_call :
108+ raise MissingDiscourseAPICredentials ('Must define both DISCOURSE_API_KEY and DISCOURSE_API_USER configs' )
109+
110+ # https://meta.discourse.org/t/sync-sso-user-data-with-the-sync-sso-route/84398
111+ subscriber = subscription .subscriber
112+ params = {
113+ 'email' : subscriber .email ,
114+ 'external_id' : subscriber .id ,
115+ 'require_actisubscription.discourse_groups' : 'false' ,
116+ 'remove_groups' : ',' .join (subscription .discourse_groups )
117+ }
118+ sso_payload , signature = discourse_facade .generate_sso_payload_and_signature (params )
119+ # query_string = parse.urlencode()
120+ url = f'{ settings .DISCOURSE_BASE_URL } /admin/users/sync_sso'
121+ headers = {
122+ 'content-type' : 'multipart/form-data' ,
123+ 'Api-Key' : settings .DISCOURSE_API_KEY ,
124+ 'Api-Username' : settings .DISCOURSE_API_USER ,
125+ }
126+
127+ requests .post (url , data = {'sso' : sso_payload , 'sig' : signature }, headers = headers )
128+
129+
62130def create_subscription_and_activate_services (payment : PagarmePayment ) -> Subscription :
63131 subscription = memberkit_facade .create_new_subscription (payment , 'Criação como resposta de pagamento no Pagarme' )
64132 phone = None
@@ -97,3 +165,26 @@ def activate_subscription_on_all_services(subscription: Subscription, responsibl
97165 phone = phone
98166 )
99167 return subscription
168+
169+
170+ def inactivate_subscription_on_all_services (subscription : Subscription , responsible = None ,
171+ observation = '' ) -> Subscription :
172+ """
173+ Inactivate user account on Memberkit, Active Campaign and Discourse
174+ :param subscription:
175+ :return:
176+ """
177+ remove_user_from_discourse (subscription )
178+ memberkit_facade .inactivate (subscription , responsible , observation )
179+ subscriber = subscription .subscriber
180+ tags = list (subscription .email_marketing_tags )
181+ email_marketing_facade .remove_tags .delay (
182+ subscriber .email ,
183+ subscriber .id ,
184+ * tags
185+ )
186+ return subscription
187+
188+
189+ def inactivate_payment_subscription (payment : PagarmePayment ):
190+ inactivate_subscription_on_all_services (payment .subscription )
0 commit comments