def api_iyo_see_detail(params, user_detail): try: iyo_organization_id = get_iyo_organization_id() iyo_username = get_iyo_username(user_detail) return get_see_document(iyo_organization_id, iyo_username, params['uniqueid'], u'all') except: logging.error('iyo.see.detail exception occurred', exc_info=True) raise ApiCallException(u'Could not load ThreeFold document details. Please try again later.')
def get_investment_agreement_details(agreement_id): agreement = get_investment_agreement(agreement_id) if agreement.iyo_see_id: iyo_organization_id = get_iyo_organization_id() username = get_iyo_username(agreement.app_user) see_document = get_see_document(iyo_organization_id, username, agreement.iyo_see_id) else: see_document = None return InvestmentAgreementDetailsTO.from_model(agreement, see_document)
def get_node_order_details(order_id): # type: (long) -> NodeOrderDetailsTO node_order = get_node_order(order_id) if node_order.tos_iyo_see_id: iyo_organization_id = get_iyo_organization_id() username = get_iyo_username(node_order.app_user) see_document = get_see_document(iyo_organization_id, username, node_order.tos_iyo_see_id) else: see_document = None return NodeOrderDetailsTO.from_model(node_order, see_document)
def investment_agreement_signed(status, form_result, answer_id, member, message_key, tag, received_timestamp, acked_timestamp, parent_message_key, result_key, service_identity, user_details): """ Args: status (int) form_result (FormResultTO) answer_id (unicode) member (unicode) message_key (unicode) tag (unicode) received_timestamp (int) acked_timestamp (int) parent_message_key (unicode) result_key (unicode) service_identity (unicode) user_details(list[UserDetailsTO]) Returns: FormAcknowledgedCallbackResultTO """ try: user_detail = user_details[0] tag_dict = json.loads(tag) agreement = InvestmentAgreement.create_key( tag_dict['agreement_id']).get() # type: InvestmentAgreement if answer_id != FormTO.POSITIVE: logging.info('Investment agreement was canceled') agreement.status = InvestmentAgreement.STATUS_CANCELED agreement.cancel_time = now() agreement.put() return None logging.info('Received signature for Investment Agreement') sign_result = form_result.result.get_value() assert isinstance(sign_result, SignWidgetResultTO) payload_signature = sign_result.payload_signature iyo_organization_id = get_iyo_organization_id() iyo_username = get_iyo_username(user_detail) logging.debug('Getting IYO SEE document %s', agreement.iyo_see_id) doc = get_see_document(iyo_organization_id, iyo_username, agreement.iyo_see_id) doc_view = IYOSeeDocumentView(username=doc.username, globalid=doc.globalid, uniqueid=doc.uniqueid, **serialize_complex_value( doc.versions[-1], IYOSeeDocumenVersion, False)) doc_view.signature = payload_signature keystore_label = get_publickey_label(sign_result.public_key.public_key, user_detail) if not keystore_label: return create_error_message(FormAcknowledgedCallbackResultTO()) doc_view.keystore_label = keystore_label logging.debug('Signing IYO SEE document') sign_see_document(iyo_organization_id, iyo_username, doc_view) logging.debug('Storing signature in DB') agreement.populate(status=InvestmentAgreement.STATUS_SIGNED, signature=payload_signature, sign_time=now()) agreement.put_async() deferred.defer(add_user_to_role, user_detail, RogerthatRoles.INVESTOR) intercom_tags = get_intercom_tags_for_investment(agreement) if intercom_tags: for i_tag in intercom_tags: deferred.defer(intercom_helpers.tag_intercom_users, i_tag, [iyo_username]) deferred.defer(update_investor_progress, user_detail.email, user_detail.app_id, INVESTMENT_TODO_MAPPING[agreement.status]) deferred.defer(_inform_support_of_new_investment, iyo_username, agreement.id, agreement.token_count_float) logging.debug('Sending confirmation message') prefix_message = u'Thank you. We successfully received your digital signature.' \ u' We have stored a copy of this agreement in your ThreeFold Documents.' \ u' We will contact you again when we have received your payment.' \ u' Thanks again for your purchase and your support of the ThreeFold Foundation!' \ u'\n\nWe would like to take this opportunity to remind you once again to keep a back-up of' \ u' your wallet in a safe place, by writing down the 29 words that can be used to restore it' \ u' to a different device.' \ u' As usual, if you have any questions, don\'t hesitate to contact us.\n\n' msg = u'%sReference: %s' % (prefix_message, agreement.reference) deferred.defer(send_payment_instructions, agreement.app_user, agreement.id, prefix_message) message = MessageCallbackResultTypeTO() message.alert_flags = Message.ALERT_FLAG_VIBRATE message.answers = [] message.branding = get_main_branding_hash() message.dismiss_button_ui_flags = 0 message.flags = Message.FLAG_ALLOW_DISMISS | Message.FLAG_AUTO_LOCK message.message = msg message.step_id = u'investment_agreement_accepted' message.tag = None result = FormAcknowledgedCallbackResultTO() result.type = TYPE_MESSAGE result.value = message return result except: logging.exception('An unexpected error occurred') return create_error_message(FormAcknowledgedCallbackResultTO())
def order_node_signed(status, form_result, answer_id, member, message_key, tag, received_timestamp, acked_timestamp, parent_message_key, result_key, service_identity, user_details): """ Args: status (int) form_result (FormResultTO) answer_id (unicode) member (unicode) message_key (unicode) tag (unicode) received_timestamp (int) acked_timestamp (int) parent_message_key (unicode) result_key (unicode) service_identity (unicode) user_details(list[UserDetailsTO]) Returns: FormAcknowledgedCallbackResultTO """ try: user_detail = user_details[0] tag_dict = json.loads(tag) order = get_node_order(tag_dict['order_id']) if answer_id != FormTO.POSITIVE: logging.info('Zero-Node order was canceled') deferred.defer(_cancel_quotation, order.id) return None logging.info('Received signature for Zero-Node order') sign_result = form_result.result.get_value() assert isinstance(sign_result, SignWidgetResultTO) payload_signature = sign_result.payload_signature iyo_organization_id = get_iyo_organization_id() iyo_username = get_iyo_username(user_detail) logging.debug('Getting IYO SEE document %s', order.tos_iyo_see_id) doc = get_see_document(iyo_organization_id, iyo_username, order.tos_iyo_see_id) doc_view = IYOSeeDocumentView(username=doc.username, globalid=doc.globalid, uniqueid=doc.uniqueid, **serialize_complex_value(doc.versions[-1], IYOSeeDocumenVersion, False)) doc_view.signature = payload_signature keystore_label = get_publickey_label(sign_result.public_key.public_key, user_detail) if not keystore_label: return create_error_message(FormAcknowledgedCallbackResultTO()) doc_view.keystore_label = keystore_label logging.debug('Signing IYO SEE document') sign_see_document(iyo_organization_id, iyo_username, doc_view) logging.debug('Storing signature in DB') order.populate(status=NodeOrderStatus.SIGNED, signature=payload_signature, sign_time=now()) order.put() # TODO: send mail to TF support deferred.defer(add_user_to_role, user_detail, RogerthatRoles.HOSTERS) deferred.defer(update_hoster_progress, user_detail.email, user_detail.app_id, HosterSteps.FLOW_SIGN) intercom_tags = get_intercom_tags_for_node_order(order) for intercom_tag in intercom_tags: deferred.defer(tag_intercom_users, intercom_tag, [iyo_username]) logging.debug('Sending confirmation message') message = MessageCallbackResultTypeTO() message.alert_flags = Message.ALERT_FLAG_VIBRATE message.answers = [] message.branding = get_main_branding_hash() message.dismiss_button_ui_flags = 0 message.flags = Message.FLAG_ALLOW_DISMISS | Message.FLAG_AUTO_LOCK message.message = u'Thank you. We successfully received your digital signature.' \ u' We have stored a copy of this agreement in your ThreeFold Documents.\n\n' \ u'Your order with ID "%s" has been placed successfully.\n' % order.human_readable_id message.step_id = u'order_completed' message.tag = None result = FormAcknowledgedCallbackResultTO() result.type = TYPE_MESSAGE result.value = message return result except: logging.exception('An unexpected error occurred') return create_error_message(FormAcknowledgedCallbackResultTO())