def test_get_friend_emails(self):
        FRIEND_AMOUNT = 14

        for x in xrange(1, FRIEND_AMOUNT + 1):
            print 'Creating friend', x
            friend_email = u'*****@*****.**' % x
            friend_user = users.User(friend_email)
            create_user_profile(friend_user, friend_email)
            if x % 2:
                convert_user_to_service(friend_user)
            print 'Connecting with friend', x
            makeFriends(users.get_current_user(), friend_user, users.get_current_user(), servicetag=None,
                        origin=ORIGIN_USER_INVITE)

        start = time.time()
        response = getFriendEmails(GetFriendEmailsRequestTO())
        l = list()
        for email in response.emails:
            r = GetFriendRequestTO()
            r.email = email
            r.avatar_size = 100
            l.append(getFriend(r))

        print 'getFriendEmails took', time.time() - start, 'seconds'
        self.assertEqual(FRIEND_AMOUNT, len(response.emails))
        self.assertEqual(FRIEND_AMOUNT, len(l))
    def testStoreChunk(self):
        chunk_content1 = "bla"
        b64_zipped_content1 = base64.b64encode(zlib.compress(chunk_content1))
        hash_ = hashlib.sha256(chunk_content1)

        chunk_content2 = "bla2"
        b64_zipped_content2 = base64.b64encode(zlib.compress(chunk_content2))
        hash_2 = hashlib.sha256(chunk_content2)

        hash_ = hash_.hexdigest().upper()
        service_identity_user = users.User("[email protected]/+default+")

        store_chunk(users.get_current_user(), service_identity_user, "parent_message_key", "message_key", 2, 1,
                    b64_zipped_content1, hash_, None)


        hash_2 = hash_2.hexdigest().upper()
        store_chunk(users.get_current_user(), service_identity_user, "parent_message_key", "message_key", 2, 2,
                    b64_zipped_content2, hash_2, None)

        photo_upload_result = get_transfer_result("parent_message_key", "message_key")
        assert photo_upload_result.total_chunks == 2

        chunks = get_transfer_chunks(photo_upload_result.key())
        len_chunks = 0
        for photo_upload_chunk in chunks:
            len_chunks = len_chunks + 1
        assert photo_upload_result.total_chunks == len_chunks

        chunk_id_check = 1
        for photo_upload_chunk in chunks:
            assert photo_upload_chunk.number == chunk_id_check
            chunk_id_check += 1
 def testGetLocation(self):
     request = GetLocationRequestTO()
     request.friend = users.get_current_user().email()
     mobile = users.get_current_mobile()
     request.high_prio = False
     request.target = GetLocationRequestTO.TARGET_MOBILE if mobile else GetLocationRequestTO.TARGET_WEB
     getLocation(get_location_response_handler, logError, users.get_current_user(), request=request)
 def testSendLongMessageWithoutSpaces(self):
     from rogerthat.bizz.messaging import sendMessage
     # Set current mobile to iPhone
     users.get_current_mobile().type = Mobile.TYPE_IPHONE_HTTP_APNS_KICK
     # Send message
     message = u"qwertyuiopasdfghjklzxcvbnm1234567890qwertyuiopasdfghjklzxcvbnm1234567890qwertyuiopasdfghjklzxcvbnm1234567890qwertyuiopasdfghjklzxcvbnm1234567890qwertyuiopasdfghjklzxcvbnm1234567890"
     m = sendMessage(MC_DASHBOARD, [UserMemberTO(users.get_current_user())], 1, 0, None, message, [], None, None, None, is_mfr=False)
     sendMessage(MC_DASHBOARD, [UserMemberTO(users.get_current_user())], 1, 0, m.mkey, message, [], None, None, None, is_mfr=False)
예제 #5
0
    def testSetUserWith(self):
        user1 = users.User(u"*****@*****.**")
        set_current_user(user1)

        user2 = users.User(u"*****@*****.**")
        with set_current_user(user2):
            self.assertEqual(users.get_current_user(), user2)

        self.assertEqual(users.get_current_user(), user1)
def rm_broadcast_test_person(email, app_id=None):
    from rogerthat.bizz.service.broadcast import delete_broadcast_test_person
    service_user = users.get_current_user()
    default_service_identity_user = create_service_identity_user(service_user, ServiceIdentity.DEFAULT)
    app_id = get_and_validate_app_id_for_service_identity_user(default_service_identity_user, app_id, email)
    try:
        delete_broadcast_test_person(users.get_current_user(), create_app_user(users.User(email), app_id))
        return RETURNSTATUS_TO_SUCCESS
    except BusinessException, be:
        return ReturnStatusTO.create(False, be.message)
예제 #7
0
    def testSetUser(self):
        user1 = users.User(u"*****@*****.**")
        create_user_profile(user1, user1.email())
        set_current_user(user1)

        self.assertEqual(users.get_current_user(), user1)

        user2 = users.User(u"*****@*****.**")
        create_user_profile(user2, user2.email())
        set_current_user(user2)

        self.assertEqual(users.get_current_user(), user2)
def send_form(parent_key, parent_message_key, member, message, form, flags, alert_flags, branding, tag,
              service_identity=None, context=None, attachments=None, app_id=None, broadcast_guid=None, step_id=None):
    from rogerthat.bizz.messaging import sendForm
    from rogerthat.bizz.service import get_and_validate_service_identity_user, get_and_validate_app_id_for_service_identity_user

    flags = 0  # flags are currently not used; clear any flags set by api client (e.g. ALLOW_DISMISS or SHARED_MEMBERS)
    service_identity_user = get_and_validate_service_identity_user(users.get_current_user(), service_identity)
    app_id = get_and_validate_app_id_for_service_identity_user(service_identity_user, app_id, member)

    fm = sendForm(service_identity_user, parent_key if parent_key != MISSING else parent_message_key,
                  create_app_user(users.User(member), app_id), message, form, flags, branding, tag, alert_flags,
                  context=context, attachments=attachments, is_mfr=users.get_current_user().is_mfr,
                  broadcast_guid=broadcast_guid, step_id=step_id)
    return fm.mkey
 def get(self):
     web_user = users.get_current_user()
     if not web_user and not self.set_user():
         self.abort(401)
         return
     email, _ = get_app_user_tuple(users.get_current_user())
     user_id = get_uid(email.email())
     if web_user:
         token = create_custom_token(user_id, {})
     else:
         token = create_custom_token(user_id, {}, True)
     response = {
         'token': token
     }
     self.response.write(json.dumps(response))
예제 #10
0
def order_delete(order_key, message):
    service_user = users.get_current_user()
    try:
        delete_pharmacy_order(service_user, order_key, message)
        return RETURNSTATUS_TO_SUCCESS
    except BusinessException, e:
        return ReturnStatusTO.create(False, e.message)
예제 #11
0
def solution_remind_event(service_user, email, method, params, tag,
                          service_identity, user_details):
    settings = get_solution_settings(service_user)
    jsondata = json.loads(params)

    app_user = create_app_user_by_email(email, user_details[0].app_id)
    event_id = long(jsondata['eventId'])
    remind_before = int(jsondata['remindBefore'])
    if jsondata.get("eventStartEpoch", None):
        event_start_epoch = int(jsondata['eventStartEpoch'])
    else:
        event_start_epoch = get_event_by_id(service_user, settings.solution,
                                            event_id).start_dates[0]

    r = SendApiCallCallbackResultTO()
    if is_reminder_set(app_user, event_id, event_start_epoch,
                       remind_before) is False:
        er = EventReminder()
        er.service_identity_user = create_service_identity_user(
            users.get_current_user(), service_identity)
        er.human_user = app_user
        er.remind_before = remind_before
        er.event_id = event_id
        er.event_start_epoch = event_start_epoch
        er.put()
        r.result = u"successfully reminded"
    else:
        r.result = u"already reminded"
    r.error = None
    return r
예제 #12
0
def load_orders():
    service_user = users.get_current_user()
    customer = get_customer(service_user)
    if not customer:
        logging.error("Customer not found for %s", service_user)
        return []
    return [OrderTO.fromOrderModel(order) for order in Order.list_signed(customer)]
예제 #13
0
def get_reservations(year, month, day, hour, minute):
    from solutions.common.bizz.reservation import get_shift_by_datetime, get_next_shift

    service_user = users.get_current_user()
    session_ = users.get_current_session()
    service_identity = session_.service_identity
    result = list()
    shift, start_time = get_shift_by_datetime(service_user, service_identity, datetime(year, month, day, hour, minute))
    if shift:
        details = RestaurantShiftDetailsTO()
        details.shift = RestaurantShiftTO.fromShift(shift)
        details.start_time = TimestampTO.fromDatetime(start_time)
        details.reservations = list()
        for reservation in get_restaurant_reservation(service_user, service_identity, start_time):
            details.reservations.append(RestaurantReservationTO.fromReservation(reservation))
        result.append(details)
        shift, start_time = get_next_shift(service_user, service_identity, shift, start_time)
        if shift:
            details = RestaurantShiftDetailsTO()
            details.shift = RestaurantShiftTO.fromShift(shift)
            details.start_time = TimestampTO.fromDatetime(start_time)
            details.reservations = list()
            for reservation in get_restaurant_reservation(service_user, service_identity, start_time):
                details.reservations.append(RestaurantReservationTO.fromReservation(reservation))
            result.append(details)
    return result
예제 #14
0
def delete_table(table_id, force):
    from solutions.common.bizz.reservation import get_shift_by_datetime, delete_table as delete_table_bizz
    service_user = users.get_current_user()
    session_ = users.get_current_session()
    service_identity = session_.service_identity
    dtsTO = DeleteTableStatusTO()
    status, reservations = delete_table_bizz(service_user, service_identity, table_id, force)
    dtsTO.success = status
    dtsTO.reservations = list()
    if not status:
        for r in reservations:
            dtrTO = DeleteTableReservationTO()
            dtrTO.reservation = RestaurantReservationTO.fromReservation(r)

            shift, start_time = get_shift_by_datetime(service_user, service_identity, r.date)
            if shift:
                details = RestaurantShiftDetailsTO()
                details.shift = RestaurantShiftTO.fromShift(shift)
                details.start_time = TimestampTO.fromDatetime(start_time)
                details.reservations = list()
                for reservation in get_restaurant_reservation(service_user, service_identity, start_time):
                    details.reservations.append(RestaurantReservationTO.fromReservation(reservation))

                dtrTO.shift = details
            else:
                dtrTO.shift = None

            dtsTO.reservations.append(dtrTO)
    return dtsTO
예제 #15
0
def edit_reservation_tables(reservation_key, tables):
    from solutions.common.bizz.reservation import edit_reservation_tables as edit_reservation_tables_bizz
    try:
        edit_reservation_tables_bizz(users.get_current_user(), reservation_key, tables)
        return RETURNSTATUS_TO_SUCCESS
    except BusinessException, e:
        return ReturnStatusTO.create(False, e.message)
예제 #16
0
def add_city_wide_lottery_info(city_app_id, winnings, date, x_winners):
    service_user = users.get_current_user()
    sln_settings = get_solution_settings(service_user)
    try:
        now_ = now()
        end_timestamp = date.toEpoch()
        if end_timestamp <= (now_ + 24 * 3600):
            raise BusinessException("end-date-24h-in-future")

        ll_info = SolutionCityWideLottery.load_pending(city_app_id)
        if ll_info:
            logging.warn("end_timestamp: %s", end_timestamp)
            logging.warn("ll_info.end_timestamp: %s", ll_info.end_timestamp)
            if end_timestamp <= ll_info.end_timestamp:
                raise BusinessException("lottery-time-bigger-first-upcoming")

        ll_info = SolutionCityWideLottery(parent=SolutionCityWideLottery.create_parent_key(city_app_id))
        ll_info.timestamp = now_
        ll_info.end_timestamp = end_timestamp
        ll_info.schedule_loot_time = ll_info.end_timestamp - 24 * 3600
        ll_info.winnings = winnings
        ll_info.x_winners = x_winners
        ll_info.winners = []
        ll_info.winner_info = []
        ll_info.skip_winners = []
        ll_info.deleted = False
        ll_info.pending = True
        ll_info.put()

        send_message(service_user, u"solutions.common.loyalty.lottery.update")

        return RETURNSTATUS_TO_SUCCESS
    except BusinessException, e:
        return ReturnStatusTO.create(False, common_translate(sln_settings.main_language, SOLUTION_COMMON, e.message))
예제 #17
0
def load_invoices():
    service_user = users.get_current_user()
    customer = get_customer(service_user)
    if not customer:
        logging.error("Customer not found for %s", service_user)
        return []
    return [InvoiceTO.fromInvoiceModel(invoice) for invoice in get_invoices(customer)]
예제 #18
0
def rest_put_discussion_group(discussion):
    service_user = users.get_current_user()
    discussion_id = None if discussion.id is MISSING else discussion.id
    discussion_group = put_discussion_group(service_user, discussion.topic,
                                            discussion.description,
                                            discussion_id)
    return DiscussionGroupTO.from_model(discussion_group)
예제 #19
0
    def get(self):
        customer_id = int(self.request.get("customer_id"))
        try:
            customer = Customer.get_by_id(customer_id)
        except CustomerNotFoundException:
            self.abort(404)

        current_user = users.get_current_user()
        current_customer = get_customer(current_user)
        sln_settings = get_solution_settings(current_user)
        if not sln_settings.can_edit_services(
                current_customer) or not current_customer.can_edit_service(
                    customer):
            logging.warn(
                'Service or user %s is trying to login to the dashboard of %s',
                current_user.email(), customer.name)
            self.abort(401)

        service_identity_user = create_service_identity_user(
            users.User(customer.service_email))
        current_session = users.get_current_session()
        new_secret, new_session = create_session(service_identity_user,
                                                 ignore_expiration=True)
        set_cookie(self.response,
                   get_server_settings().cookieSessionName, new_secret)
        new_session = switch_to_service_identity(new_session,
                                                 service_identity_user,
                                                 read_only=False,
                                                 shop=current_session.shop,
                                                 layout_only=True)
        new_session.parent_session_secret = current_session.secret
        new_session.put()
        self.redirect("/")
예제 #20
0
def load_unsinged_orders():
    service_user = users.get_current_user()
    customer = get_customer(service_user)
    if not customer:
        logging.error("Customer not found for %s", service_user)
        return []
    return [OrderTO.fromOrderModel(order) for order in Order.list_unsigned(customer) if order.order_number != Order.CUSTOMER_STORE_ORDER_NUMBER]
예제 #21
0
def delete_loyalty_lottery_info(key):
    ll_info_delete = SolutionLoyaltyLottery.get(key)
    if not ll_info_delete:
        return RETURNSTATUS_TO_SUCCESS

    service_user = users.get_current_user()
    session_ = users.get_current_session()
    service_identity = session_.service_identity
    sln_settings = get_solution_settings(service_user)

    try:
        ll_info = SolutionLoyaltyLottery.load_pending(service_user, service_identity)
        if ll_info_delete.key() == ll_info.key():
            raise RETURNSTATUS_TO_SUCCESS
        if ll_info_delete.schedule_loot_time > 0:
            ll_info_delete.delete()

        sln_settings.updates_pending = True
        put_and_invalidate_cache(sln_settings)
        broadcast_updates_pending(sln_settings)

        send_message(service_user, u"solutions.common.loyalty.lottery.update", service_identity=service_identity)

        return RETURNSTATUS_TO_SUCCESS
    except BusinessException, e:
        return ReturnStatusTO.create(False, common_translate(sln_settings.main_language, SOLUTION_COMMON, e.message))
예제 #22
0
def get_statistics(year, month, day):
    from solutions.common.bizz.reservation import get_statistics as get_statistics_bizz
    service_user = users.get_current_user()
    session_ = users.get_current_session()
    service_identity = session_.service_identity
    date = datetime(year, month, day)
    return get_statistics_bizz(service_user, service_identity, date)
예제 #23
0
    def get(self):
        service_user = users.get_current_user()
        sln_settings = get_solution_settings(service_user)
        if SolutionModule.CITY_VOUCHERS not in sln_settings.modules:
            self.response.set_status(404)
            return

        app_id = self.request.get('a')
        customer = get_customer(service_user)
        if app_id != customer.app_id:
            self.response.set_status(404)
            return

        year = self.request.get('y')
        month = self.request.get('m')

        sln_city_voucher_export_key = SolutionCityVoucherExport.create_key(
            app_id, year, month)
        export = SolutionCityVoucherExport.get(sln_city_voucher_export_key)
        if export:
            self.response.headers['Content-Type'] = 'application/vnd.ms-excel'
            filename = get_exported_filename(sln_settings.main_language, year,
                                             month)
            self.response.headers['Content-Disposition'] = str(
                'attachment; filename=%s' % filename)
            self.response.write(export.xls)
        else:
            self.response.set_status(404)
예제 #24
0
def can_edit_city_postal_codes():
    service_user = users.get_current_user()
    sln_settings = get_solution_settings(service_user)
    if SolutionModule.CITY_APP not in sln_settings.modules:
        raise BusinessException(common_translate(sln_settings.main_language,
                                                 SOLUTION_COMMON, u'insufficient-permissions'))
    return sln_settings
예제 #25
0
def press_menu_item(service, coords, generation, context):
    # generation is service identity menuGeneration
    from rogerthat.bizz.service import press_menu_item as press_menu_item_bizz
    user = users.get_current_user()
    service_identity_user = add_slash_default(users.User(service))
    azzert(get_friend_serviceidentity_connection(user, service_identity_user), "%s tried to press menu item of service %s" % (user.email(), service))
    press_menu_item_bizz(user, service_identity_user, coords, context, generation, timestamp=now())
예제 #26
0
def remove_order_weekday_timeframe(timeframe_id):
    service_user = users.get_current_user()
    try:
        delete_order_weekday_timeframe(service_user, timeframe_id)
        return RETURNSTATUS_TO_SUCCESS
    except BusinessException, e:
        return ReturnStatusTO.create(False, e.message)
예제 #27
0
def edit_city_wide_lottery_info(key, winnings, date, x_winners):
    ll_info_edit = SolutionCityWideLottery.get(key)
    if not ll_info_edit:
        return RETURNSTATUS_TO_SUCCESS

    service_user = users.get_current_user()
    sln_settings = get_solution_settings(service_user)

    try:
        now_ = now()
        end_timestamp = date.toEpoch()
        if end_timestamp <= (now_ + 24 * 3600):
            raise BusinessException("end-date-24h-in-future")

        ll_info = SolutionCityWideLottery.load_pending(ll_info_edit.app_id)
        if ll_info_edit.key() != ll_info.key() and end_timestamp <= ll_info.end_timestamp:
            raise BusinessException("lottery-time-bigger-first-upcoming")

        ll_info_edit.end_timestamp = end_timestamp
        ll_info_edit.schedule_loot_time = ll_info_edit.end_timestamp - 24 * 3600
        ll_info_edit.winnings = winnings
        ll_info_edit.x_winners = x_winners
        ll_info_edit.put()

        send_message(service_user, u"solutions.common.loyalty.lottery.update")

        return RETURNSTATUS_TO_SUCCESS
    except BusinessException, e:
        return ReturnStatusTO.create(False, common_translate(sln_settings.main_language, SOLUTION_COMMON, e.message))
예제 #28
0
    def get(self):
        service_user = users.get_current_user()
        azzert(get_service_profile(service_user))  # must exist
        message_flow_designs = get_service_message_flow_designs(service_user)

        result = []
        for wiring in message_flow_designs:
            if wiring.deleted or not wiring.definition:
                continue

            wiringDefinition = json.loads(wiring.definition)
            for k in wiringDefinition.iterkeys():
                if k == u"modules":
                    for m in wiringDefinition[k]:
                        if m["value"]:
                            m["config"]["formMessageDef"] = m["value"]

            result.append({"name": wiring.name, "language": wiring.language, "working": json.dumps(wiringDefinition)})

        if not result:
            wiring_id = "Sample message flow"
            language = "MessageFlow"
            result.append({"name": wiring_id, "language": language, "working": SAMPLE_MF})
            message_flow_design = MessageFlowDesign(parent=parent_key(service_user), key_name=wiring_id)
            message_flow_design.definition = SAMPLE_MF
            message_flow_design.name = wiring_id
            message_flow_design.language = language
            message_flow_design.design_timestamp = now()
            message_flow_design.status = MessageFlowDesign.STATUS_VALID
            message_flow_design.js_flow_definitions = JsFlowDefinitions()
            message_flow_design.put()
        self.response.out.write(json.dumps(result))
예제 #29
0
    def post(self):
        description = self.request.get("description", None)
        platform = int(self.request.get("platform", 0))
        platform_version = self.request.get("platform_version", None)
        timestamp = long(self.request.get("timestamp", 0))
        mobicage_version = self.request.get("mobicage_version", None)
        error_message = self.request.get("error_message", None)

        logging.debug("Error logged over HTTP:\n%s", error_message)

        ler = LogErrorRequestTO()
        ler.description = description
        ler.platform = platform
        ler.platformVersion = platform_version
        ler.timestamp = timestamp
        ler.mobicageVersion = mobicage_version
        ler.errorMessage = error_message

        from rogerthat.bizz.system import logErrorBizz

        user = self.request.headers.get("X-MCTracker-User", None)
        password = self.request.headers.get("X-MCTracker-Pass", None)
        if user and password:
            users.set_json_rpc_user(base64.decodestring(user), base64.decodestring(password))
            return logErrorBizz(ler, users.get_current_user())
        else:
#           language = self.request.get("language", None)  # Unused
#           deviceId = self.request.get("device_id", None)  # Unused
            install_id = self.request.get("install_id", None)
            return logErrorBizz(ler, user=None, install_id=install_id)
예제 #30
0
def order_send_message(order_key, order_status, message):
    service_user = users.get_current_user()
    try:
        send_message_for_order(service_user, order_key, order_status, message)
        return RETURNSTATUS_TO_SUCCESS
    except BusinessException, e:
        return ReturnStatusTO.create(False, e.message)
예제 #31
0
    def post(self):
        user = users.get_current_user()
        app_id = self.request.get("app_id")
        if not app_id:
            app_id = self.request.POST.get("app_id_hidden", None)

        if not app_id:
            self.redirect('/admin/osa/launcher/apps')
            return

        uploaded_file = self.request.POST.get('package')  # type: FieldStorage
        if not isinstance(uploaded_file, FieldStorage):
            self.redirect('/admin/osa/launcher/apps')
            return

        filename = '%s/oca/launcher/apps/%s.apk' % (ROGERTHAT_ATTACHMENTS_BUCKET, app_id)
        upload_to_gcs(uploaded_file.value, uploaded_file.type, filename)

        version_code = long(self.request.get("version_code"))
        app = OSALauncherApp.get_by_app_id(app_id)
        if not app:
            app = OSALauncherApp(key=OSALauncherApp.create_key(app_id))
        app.user = user
        app.timestamp = now()
        app.app_id = app_id
        app.version_code = version_code
        app.package = None
        app.put()

        self.redirect('/admin/osa/launcher/apps')
예제 #32
0
def breakFriendship(request):
    from rogerthat.bizz.friends import breakFriendShip as bizzBreakFriendship
    from rogerthat.rpc import users
    user = users.get_current_user()
    bizzBreakFriendship(user, users.User(request.friend), users.get_current_mobile())
    slog('T', user.email(), "com.mobicage.api.friends.breakFriendShip", email=request.friend)
    return None
예제 #33
0
def putGroup(request):
    from rogerthat.bizz.friends import putGroup as putGroupBizz
    from rogerthat.rpc import users
    response = PutGroupResponseTO()
    avatar_hash_str = putGroupBizz(users.get_current_user(), request.guid, request.name, request.members, request.avatar, users.get_current_mobile())
    response.avatar_hash = None if avatar_hash_str is None else avatar_hash_str.decode('utf-8')
    return response
예제 #34
0
def del_profile_data(email, profile_data_keys, app_id):
    from rogerthat.bizz.profile import set_profile_data
    service_user = users.get_current_user()
    validate_app_admin(service_user, [app_id])
    set_profile_data(service_user,
                     create_app_user(users.User(email), app_id),
                     json.dumps(dict(((key, None) for key in profile_data_keys))))
예제 #35
0
def list_users(app_id, cursor):
    service_user = users.get_current_user()
    validate_app_admin(service_user, [app_id])

    if cursor:
        cursor = decrypt(service_user, cursor)

    query = get_user_profiles_by_app_id(app_id)
    query.with_cursor(cursor)
    user_profiles = query.fetch(1000)
    cursor = query.cursor()
    extra_key = query.fetch(1)

    result = AppUserListResultTO()
    result.cursor = unicode(encrypt(service_user, cursor)) if len(extra_key) > 0 else None

    work = Queue()
    results = Queue()
    for items in [user_profiles[x:x + 50] for x in xrange(0, len(user_profiles), 50)]:
        work.put(items)

    def slave():
        while True:
            try:
                user_profiles = work.get_nowait()
            except Empty:
                break  # No more work, goodbye
            try:
                friendMaps = db.get([get_friends_map_key_by_user(user_profile.user) for user_profile in user_profiles])
                for user_profile, friendMap in zip(user_profiles, friendMaps):
                    results.put(AppUserTO(user_profile, friendMap))
            except Exception, e:
                results.put(e)
예제 #36
0
def remove_from_order(item_id):
    service_user = users.get_current_user()
    customer = get_customer(service_user)
    azzert(customer)
    customer_store_order_key = Order.create_key(
        customer.id, Order.CUSTOMER_STORE_ORDER_NUMBER)
    order_item_key = OrderItem.create_key(customer.id,
                                          Order.CUSTOMER_STORE_ORDER_NUMBER,
                                          item_id)
    order_item, order = db.get([order_item_key, customer_store_order_key])

    if not order_item:
        logging.warn(
            "Customer %s tried to delete an already deleted item (%s)",
            service_user.email(), item_id)
        return RETURNSTATUS_TO_SUCCESS
    azzert(order)

    # Subtract the price from this product, then remove the product.
    vat = order_item.count * order_item.price * order.vat_pct / 100
    total = order_item.count * order_item.price
    total_inc_vat = total + vat
    order.amount -= total
    order.total_amount -= total_inc_vat
    order.vat -= vat
    order_item.delete()
    order.put()
    return RETURNSTATUS_TO_SUCCESS
 def __init__(self, user, is_mfr=False, skip_create_session=False, set_google_user=True):
     from rogerthat.rpc import users
     self.previous_current_user = users.get_current_user()
     self.previous_current_session = users.get_current_session()
     self.previous_current_guser = gusers.get_current_user()
     user.is_mfr = is_mfr
     self._set_user(user, skip_create_session, set_google_user)
def getMessages(cursor):
    from rogerthat.rpc import users
    user = users.get_current_user()
    result = RootMessageListTO()
    result.messages, result.cursor = _get_messages(cursor, user)
    result.batch_size = MESSAGES_BATCH_SIZE
    return result
예제 #39
0
def uitdatabank_check_cityapp_settings():
    service_user = users.get_current_user()

    cap = get_cityapp_profile(service_user)
    sln_settings = get_solution_settings(service_user)
    try:
        success, result = get_uitdatabank_events(cap, 1, 50)
        if not success:
            try:
                result = translate(sln_settings.main_language, SOLUTION_COMMON,
                                   result)
            except ValueError:
                pass
    except Exception:
        logging.debug('Failed to check uitdatabank.be settings: %s',
                      dict(key=cap.uitdatabank_key,
                           regions=cap.uitdatabank_regions),
                      exc_info=1)
        success, result = False, translate(sln_settings.main_language,
                                           SOLUTION_COMMON,
                                           'error-occured-unknown-try-again')

    def trans():
        cap = get_cityapp_profile(service_user)
        if success:
            cap.uitdatabank_enabled = True
            cap.put()
            return RETURNSTATUS_TO_SUCCESS

        cap.uitdatabank_enabled = False
        cap.put()
        return ReturnStatusTO.create(False, result)

    return db.run_in_transaction(trans)
예제 #40
0
 def trans():
     friendMap = get_friends_map(users.get_current_user())
     response = GetFriendEmailsResponseTO()
     response.emails = [remove_app_id(f).email() for f in friendMap.friends]
     response.generation = friendMap.generation
     response.friend_set_version = friendMap.version
     return response
예제 #41
0
def start_admin_debugging(app_user, timeout):
    mobiles = list(get_user_active_mobiles(app_user))
    azzert(len(mobiles) == 1)

    m = mobiles[0]
    if m.type in (Mobile.TYPE_IPHONE_HTTP_APNS_KICK,
                  Mobile.TYPE_IPHONE_HTTP_XMPP_KICK,
                  Mobile.TYPE_WINDOWS_PHONE) \
              or (m.is_android and m.pushId):
        # No XMPP account needs to be created
        settings = get_server_settings()
        jid = base64.b64encode(encrypt_value(md5(settings.secret), users.get_current_user().email().encode('utf8')))
        password = None
        type_ = CurrentlyForwardingLogs.TYPE_GAE_CHANNEL_API
    else:
        account = generate_account(u'dbg_%s' % uuid.uuid4().get_hex())
        if not APPSCALE:
            create_jabber_account(account, None)
        jid = account.account
        password = account.password
        type_ = CurrentlyForwardingLogs.TYPE_XMPP

    def trans():
        debug_request = StartDebuggingRequest(key=StartDebuggingRequest.create_key(app_user, jid),
                                              timestamp=now())
        db.put_async(debug_request)
        deferred.defer(stop_debugging, app_user, jid, debug_request=debug_request, notify_user=False,
                       _countdown=timeout * 60, _transactional=True, _queue=SCHEDULED_QUEUE)
        return start_log_forwarding(app_user, jid, xmpp_target_password=password, type_=type_)

    xg_on = db.create_transaction_options(xg=True)
    return db.run_in_transaction_options(xg_on, trans)
예제 #42
0
def getFriend(request):
    from rogerthat.rpc import users
    from rogerthat.dal.friend import get_friends_map
    from rogerthat.pages.profile import get_avatar

    user = users.get_current_user()
    friendMap = get_friends_map(user)

    response = GetFriendResponseTO()
    response.generation = friendMap.generation

    friend = users.User(request.email)
    avatar_size = 100 if request.avatar_size is MISSING else request.avatar_size

    def populateFriendResponse():
        friendDetail = friendMap.friendDetails[friend.email()]
        response.friend = FriendTO.fromDBFriendDetail(friendDetail, True, True, targetUser=user)
        response.avatar = unicode(base64.b64encode(get_avatar(friendDetail.avatarId, avatar_size)))

    if friend.email() in friendMap.friendDetails:
        populateFriendResponse()
    else:
        friend = create_app_user(friend, get_app_id_from_app_user(user))
        if friend.email() in friendMap.friendDetails:
            populateFriendResponse()
        else:
            response.friend = None
            response.avatar = None
    return response
예제 #43
0
def getStaticFlow(request):
    from rogerthat.dal.service import get_service_menu_item_by_coordinates
    from rogerthat.rpc import users
    service_identity_user = add_slash_default(users.User(request.service))
    get_service_identity(service_identity_user)  # azzerts

    smd = get_service_menu_item_by_coordinates(service_identity_user, request.coords)
    if not smd:
        logging.info("No menu item found with coords %s" % request.coords)
        return None

    if smd.isBroadcastSettings:
        response = GetStaticFlowResponseTO()
        helper = FriendHelper.from_data_store(service_identity_user, FRIEND_TYPE_SERVICE)
        response.staticFlow = generate_broadcast_settings_static_flow(helper, users.get_current_user())
        return response

    if not smd.staticFlowKey:
        logging.info("Menu item %s doesn't reference a static flow" % request.coords)
        return None

    mfd = MessageFlowDesign.get(smd.staticFlowKey)
    static_flow = mfd.js_flow_definitions.get_by_hash(request.staticFlowHash)
    if not static_flow:
        logging.info("No static flow found on MFD '%s' with hash %s" % (mfd.name, request.staticFlowHash))
        return None

    response = GetStaticFlowResponseTO()
    response.staticFlow = static_flow.definition
    return response
 def get(self):
     user = users.get_current_user()
     self.response.headers['Content-Type'] = 'text/json'
     app_settings = get_app_settings(App.APP_ID_ROGERTHAT)
     user_profile = get_user_profile(user)
     self.response.out.write(
         json.dumps(serialize_complex_value(SettingsTO.fromDBSettings(app_settings, user_profile, Settings.get()), SettingsTO, False)))
    def post(self):
        params = dict(self.request.POST)
        logging.debug("PaymentLoginAppHandler with params %s", params)
        user = self.request.headers.get("X-MCTracker-User", None)
        password = self.request.headers.get("X-MCTracker-Pass", None)
        if not (user and password):
            logging.debug("user not provided")
            self.response.set_status(500)
            return

        if not users.set_json_rpc_user(base64.decodestring(user), base64.decodestring(password)):
            logging.debug("user not set")
            self.response.set_status(500)
            return
        app_user = users.get_current_user()

        state = params["state"]
        login_state = get_login_state(state)
        if app_user != login_state.app_user:
            self.response.set_status(500)
            logging.error("%s tried to finish anothers user login %s", app_user, state)
            return

        token = get_api_module(login_state.provider_id).handle_code(login_state)
        logging.debug('Received token: %s', token)
        if not finish_login_state(state, token):
            logging.debug("user already finished this login")
            self.response.set_status(500)
            return

        args = {"result": "success",
                "payment_provider": serialize_complex_value(
                    get_payment_provider_for_user(app_user, login_state.provider_id), AppPaymentProviderTO, False)}
        r = json.dumps(args)
        self.response.out.write(r)
예제 #46
0
def pokeService(request):
    from rogerthat.rpc import users
    current_user = users.get_current_user()
    timestamp = None if request.timestamp is MISSING else request.timestamp
    poke_service_by_hashed_tag(current_user, add_slash_default(users.User(request.email)), request.hashed_tag,
                               request.context, timestamp)
    return None
예제 #47
0
    def post(self):
        try:
            user = users.get_current_user()
            tb = TempBlob(parent=parent_key(user))
            tb.timeout = now() + 24 * 60 * 60
            image = self.request.get("newAvatar")
            image_type = imghdr.what(None, image)
            try:
                img = images.Image(image)
                img.horizontal_flip()
                img.horizontal_flip()
                orig_width = img.width
                orig_height = img.height
                orig_image = image
                size = min(100, 100 * 4000 / max(orig_width, orig_height))  # max 4000 wide/high
                while len(image) > (1024 * 1024 - 100 * 1024):
                    size -= size / 10
                    img = images.Image(orig_image)
                    img.resize(orig_width * size / 100, orig_height * size / 100)
                    image = img.execute_transforms(images.JPEG if image_type == 'jpeg' else images.PNG)

                tb.blob = db.Blob(image)
            except images.NotImageError:
                logging.info("Sending failure to the logged on users (%s) channel" % user.email())
                self.response.out.write(broadcast_via_iframe_result(u"rogerthat.profile.avatar_upload_failed", error=u"The uploaded file is not an image!"))
                return
            except IOError, e:
                logging.info("Sending failure to the logged on users (%s) channel" % user.email())
                self.response.out.write(broadcast_via_iframe_result(u"rogerthat.profile.avatar_upload_failed", error=e.message))
                return
            except BadRequestError, e:
                logging.info("Sending failure to the logged on users (%s) channel" % user.email())
                self.response.out.write(broadcast_via_iframe_result(u"rogerthat.profile.avatar_upload_failed",
                                                                    error=e.message))
                return
예제 #48
0
def cancel_location_tracker(tracker_key):
    from rogerthat.bizz.location import disable_service_location_tracker
    """
    Cancels the location tracking for a certain user
    """
    service_user = users.get_current_user()
    disable_service_location_tracker(service_user, tracker_key)
예제 #49
0
    def get(self):
        user = users.get_current_user()
        path = os.path.join(os.path.dirname(__file__), "about.html")

        self.response.out.write(template.render(path, {
            'user':user,
            'session':users.create_logout_url("/") if user else users.create_login_url("/")}))
예제 #50
0
 def get(self):
     user = users.get_current_user()
     key = self.request.GET['key']
     tb = TempBlob.get(key)
     azzert(tb.parent_key() == parent_key(user))
     self.response.headers['Content-Type'] = "image/png"
     self.response.out.write(tb.blob)
예제 #51
0
 def get(self):
     user = users.get_current_user()
     path = os.path.join(os.path.dirname(__file__), 'explorer.html')
     self.response.out.write(template.render(path, {
         'debug':DEBUG,
         'user':user,
         'session':create_logout_url("/")}))
예제 #52
0
 def get(self):
     service_user = users.get_current_user()
     session_ = users.get_current_session()
     service_identity = session_.service_identity
     slide_id = self.request.get('i')
     if not slide_id:
         self.redirect("/ourcityapp")
         return
     slide_id = long(slide_id)
     if is_default_service_identity(service_identity):
         service_identity_user = service_user
     else:
         service_identity_user = create_service_identity_user(service_user, service_identity)
     def trans():
         slide = SolutionLoyaltySlide.get_by_id(slide_id, parent=parent_key_unsafe(service_identity_user, SOLUTION_COMMON))
         return slide
     slide = db.run_in_transaction(trans)
     if not slide:
         self.redirect("/ourcityapp")
         return
     server_settings = get_server_settings()
     jinja_template = JINJA_ENVIRONMENT.get_template('loyalty_preview.html')
     self.response.out.write(jinja_template.render({'slide_id': slide_id,
                                                    'full_url': slide.slide_url(),
                                                    'overlay_url': '%s/common/loyalty/slide/overlay' % (server_settings.baseUrl)}))
예제 #53
0
def delete_loyalty_visit(key):
    service_user = users.get_current_user()
    try:
        delete_visit(service_user, key)
        return RETURNSTATUS_TO_SUCCESS
    except BusinessException, e:
        sln_settings = get_solution_settings(service_user)
        return ReturnStatusTO.create(False, common_translate(sln_settings.main_language, SOLUTION_COMMON, e.message))
예제 #54
0
def save_order_weekday_timeframe(timeframe_id, day, time_from, time_until):
    service_user = users.get_current_user()
    try:
        put_order_weekday_timeframe(service_user, timeframe_id, day, time_from,
                                    time_until)
        return RETURNSTATUS_TO_SUCCESS
    except BusinessException, e:
        return ReturnStatusTO.create(False, e.message)
예제 #55
0
def get_billing_contacts():
    from shop.models import Contact
    service_user = users.get_current_user()
    customer = get_customer(service_user)
    if not customer:
        logging.error("Customer not found for %s", service_user)
        return []
    return [ContactTO.fromContactModel(c) for c in Contact.list(customer)]
예제 #56
0
def load_chance_user(email, app_id):
    service_user = users.get_current_user()
    session_ = users.get_current_session()
    service_identity = session_.service_identity
    app_user = create_app_user_by_email(email, app_id)
    r = LoyaltyLotteryChanceTO()
    r.total_visits, r.my_visits, r.chance = calculate_chance_for_user(service_user, service_identity, app_user)
    return r
예제 #57
0
 def get(self):
     service_user = users.get_current_user()
     logo = db.get(self.MODEL_CLASS.create_key(service_user))
     self.response.headers['Content-Type'] = "image/png"
     if logo and logo.picture:
         self.response.out.write(str(logo.picture))
     else:
         self.response.out.write(self.not_found())
예제 #58
0
def signup(user, service_name, service_description):
    solution_server_settings = get_solution_server_settings()
    azzert(users.get_current_user() == users.User(
        solution_server_settings.solution_trial_service_email))

    user = users.User(user)
    from rogerthat.bizz.service.yourservicehere import signup as trial_signup
    return trial_signup(user, service_name, service_description, True)
예제 #59
0
def delete_loyalty_slide(slide_id):
    service_user = users.get_current_user()
    session_ = users.get_current_session()
    service_identity = session_.service_identity
    try:
        loyalty_bizz.delete_loyalty_slide(service_user, service_identity, slide_id)
        return RETURNSTATUS_TO_SUCCESS
    except BusinessException, e:
        return ReturnStatusTO.create(False, e.message)
예제 #60
0
def get_order_timeframes():
    service_user = users.get_current_user()
    sln_settings = get_solution_settings(service_user)
    return [
        SolutionOrderWeekdayTimeframeTO.fromModel(f,
                                                  sln_settings.main_language)
        for f in SolutionOrderWeekdayTimeframe.list(service_user,
                                                    sln_settings.solution)
    ]