def login(username, password): # TODO: check for returning user ib db # connection_name = request.session.get('connection', 'default') cookie_dict = {} cursor = connections['default'].cursor() user_exists = cursor.callfunc(get_full_name('check_user_in_db'), cx_Oracle.BOOLEAN, [username, password]) if user_exists: role_name = cursor.callfunc(get_full_name('get_user_role'), cx_Oracle.FIXED_CHAR, [username, password]) role_name = role_name.strip() cookie_dict['username'] = username cookie_dict['connection'] = role_name connections['default'].close() connections[role_name].connect() cursor = connections[role_name].cursor() client_id = int( cursor.callfunc(get_full_name('get_client_id'), cx_Oracle.NUMBER, [username])) if client_id == 0: cookie_dict['client_id'] = None else: cookie_dict['client_id'] = client_id return True, cookie_dict return False, None
def call_procedure_in_db(request, proc_name, args=None): cursor = get_cursor(request) try: cursor.callproc(get_full_name(proc_name), args) return True except cx_Oracle.DatabaseError as e: logging.error('Error at call db procedure {}{: {}'.format(proc_name, str(e))) return False
def call_procedure_in_db(request, proc_name, args=None): cursor = get_cursor(request) try: cursor.callproc(get_full_name(proc_name), args) return True except cx_Oracle.DatabaseError as e: logging.error('Error at call db procedure {}{: {}'.format( proc_name, str(e))) return False
def register(username, password, client_id): cursor = connections['default'].cursor() registration_successful = cursor.callfunc(get_full_name('register_user'), cx_Oracle.BOOLEAN, [username, password, client_id]) if registration_successful: return True else: return False
def create_person(repo, fields): """Creates a Person entity in the given repository with the given field values. If 'fields' contains a 'person_record_id', calling put() on the resulting entity will overwrite any existing (original or clone) record with the same person_record_id. Otherwise, a new original person record is created in the given repository.""" person_fields = dict( entry_date=get_utcnow(), expiry_date=validate_datetime(fields.get('expiry_date')), author_name=strip(fields.get('author_name')), author_email=strip(fields.get('author_email')), author_phone=strip(fields.get('author_phone')), source_name=strip(fields.get('source_name')), source_url=strip(fields.get('source_url')), source_date=validate_datetime(fields.get('source_date')), full_name=strip(fields.get('full_name')), given_name=strip(fields.get('given_name')), family_name=strip(fields.get('family_name')), alternate_names=strip(fields.get('alternate_names')), description=strip(fields.get('description')), sex=validate_sex(fields.get('sex')), date_of_birth=validate_approximate_date(fields.get('date_of_birth')), age=validate_age(fields.get('age')), home_street=strip(fields.get('home_street')), home_neighborhood=strip(fields.get('home_neighborhood')), home_city=strip(fields.get('home_city')), home_state=strip(fields.get('home_state')), home_postal_code=strip(fields.get('home_postal_code')), home_country=strip(fields.get('home_country')), photo_url=strip(fields.get('photo_url')), profile_urls=strip(fields.get('profile_urls')), ) # For PFIF 1.3 or older, populate full_name (it was an optional field # before), using given_name and family_name if it is empty. if not person_fields['full_name'].strip(): person_fields['full_name'] = get_full_name( person_fields['given_name'], person_fields['family_name'], config.Configuration(repo)) # TODO(liuhsinwen): Separate existed and non-existed record id and # increment person counter for new records record_id = strip(fields.get('person_record_id')) if record_id: # create a record that might overwrite an existing one if is_clone(repo, record_id): return Person.create_clone(repo, record_id, **person_fields) else: return Person.create_original_with_record_id( repo, record_id, **person_fields) else: # create a new original record # TODO(liuhsinwen): fix performance problem by incrementing the counter # by the number of upload records # UsageCounter.increment_person_counter(repo) return Person.create_original(repo, **person_fields)
def login(username, password): # TODO: check for returning user ib db # connection_name = request.session.get('connection', 'default') cookie_dict = {} cursor = connections['default'].cursor() user_exists = cursor.callfunc(get_full_name('check_user_in_db'), cx_Oracle.BOOLEAN, [username, password]) if user_exists: role_name = cursor.callfunc(get_full_name('get_user_role'), cx_Oracle.FIXED_CHAR, [username, password]) role_name = role_name.strip() cookie_dict['username'] = username cookie_dict['connection'] = role_name connections['default'].close() connections[role_name].connect() cursor = connections[role_name].cursor() client_id = int(cursor.callfunc(get_full_name('get_client_id'), cx_Oracle.NUMBER, [username])) if client_id == 0: cookie_dict['client_id'] = None else: cookie_dict['client_id'] = client_id return True, cookie_dict return False, None
def start(update, context): full_name = get_full_name(update) context.bot.send_message(chat_id=update.effective_chat.id, text=(f"""Hello, {full_name}! \U0001F600""")) context.bot.send_message( chat_id=update.effective_chat.id, text=(""" Here you can see a list of available commands: /dogimage Show you a cute dog image /dogvideo Show you a cute dog video /catimage Show you a cute cat image /catvideo Show you a cute cat video /help List of available commands """))
def call_function_in_db(request, func_name, return_type=cx_Oracle.NUMBER, args=None, cast_func=None): """ Call db function :param request: need to extract connection date :param func_name: name of function to call :param return_type: cx_Oracle type of result :param args: arguments to call function :param cast_func: optional function to cast the result. Specify it to the desired return type or you will get string :return: """ cursor = get_cursor(request) try: result = cursor.callfunc(get_full_name(func_name), return_type, args) return result if cast_func is None else cast_func(result) except cx_Oracle.DatabaseError as e: logging.error('Error at call db function {}: {}'.format(func_name, str(e))) return None
def list_request(request, function_name, args=None): if args is None: args = [] if request.COOKIES. has_key('connection'): current_connection = request.COOKIES['connection'] else: current_connection = 'default' try: cursor = connections[current_connection].cursor() # print(connections[current_connection].connection.username) client_cursor = cursor.callfunc(get_full_name(function_name), cx_Oracle.CURSOR, args) data = client_cursor.fetchall() # print(len(data)) row_names = _get_row_names(client_cursor.description) return row_names, data except cx_Oracle.DatabaseError: raise AccessDeniedError()
def list_request(request, function_name, args=None): if args is None: args = [] if request.COOKIES.has_key('connection'): current_connection = request.COOKIES['connection'] else: current_connection = 'default' try: cursor = connections[current_connection].cursor() # print(connections[current_connection].connection.username) client_cursor = cursor.callfunc(get_full_name(function_name), cx_Oracle.CURSOR, args) data = client_cursor.fetchall() # print(len(data)) row_names = _get_row_names(client_cursor.description) return row_names, data except cx_Oracle.DatabaseError: raise AccessDeniedError()
def call_function_in_db(request, func_name, return_type=cx_Oracle.NUMBER, args=None, cast_func=None): """ Call db function :param request: need to extract connection date :param func_name: name of function to call :param return_type: cx_Oracle type of result :param args: arguments to call function :param cast_func: optional function to cast the result. Specify it to the desired return type or you will get string :return: """ cursor = get_cursor(request) try: result = cursor.callfunc(get_full_name(func_name), return_type, args) return result if cast_func is None else cast_func(result) except cx_Oracle.DatabaseError as e: logging.error('Error at call db function {}: {}'.format( func_name, str(e))) return None
def setup_env(request): """Constructs the 'env' object, which contains various template variables that are commonly used by most handlers.""" env = utils.Struct() env.repo, env.action = get_repo_and_action(request) env.config = config.Configuration(env.repo or '*') env.analytics_id = config.get('analytics_id') env.amp_gtm_id = config.get('amp_gtm_id') env.maps_api_key = config.get('maps_api_key') # Internationalization-related stuff. env.charset = select_charset(request) env.lang = select_lang(request, env.config) env.rtl = env.lang in const.LANGUAGES_BIDI env.virtual_keyboard_layout = const.VIRTUAL_KEYBOARD_LAYOUTS.get(env.lang) # Used for parsing query params. This must be done before accessing any # query params which may have multi-byte value, such as "given_name" below # in this function. request.charset = env.charset # Determine the resource bundle to use. env.default_resource_bundle = config.get('default_resource_bundle', '1') env.resource_bundle = (request.cookies.get('resource_bundle', '') or env.default_resource_bundle) # Information about the request. env.url = utils.set_url_param(request.url, 'lang', env.lang) env.scheme, env.netloc, env.path, _, _ = urlparse.urlsplit(request.url) env.force_https = False env.domain = env.netloc.split(':')[0] env.global_url = utils.get_repo_url(request, 'global') # Commonly used information that's rendered or localized for templates. env.language_options = get_language_options(request, env.config, env.lang) env.repo_options = get_repo_options(request, env.lang) env.expiry_options = [ utils.Struct(value=value, text=const.PERSON_EXPIRY_TEXT[value]) for value in sorted(const.PERSON_EXPIRY_TEXT.keys(), key=int) ] env.status_options = [ utils.Struct(value=value, text=const.NOTE_STATUS_TEXT[value]) for value in pfif.NOTE_STATUS_VALUES if (value != 'believed_dead' or not env.config or env.config.allow_believed_dead_via_ui) ] env.hidden_input_tags_for_preserved_query_params = ( get_hidden_input_tags_for_preserved_query_params(request)) ui_param = request.get('ui', '').strip().lower() # Interprets "small" and "style" parameters for backward compatibility. # TODO(ichikawa): Delete these in near future when we decide to drop # support of these parameters. small_param = request.get('small', '').strip().lower() style_param = request.get('style', '').strip().lower() if not ui_param and small_param == 'yes': ui_param = 'small' elif not ui_param and style_param: ui_param = style_param if ui_param: env.ui = ui_param elif user_agents.is_jp_tier2_mobile_phone(request): env.ui = 'light' else: env.ui = 'default' # UI configurations. # # Enables features which require JavaScript. env.enable_javascript = True # Enables operations which requires Captcha. env.enable_captcha = True # Enables photo upload. env.enable_photo_upload = True # Enables to flag/unflag notes as spam, and to reveal spam notes. env.enable_spam_ops = True # Enables duplicate marking mode. env.enable_dup_mode = True # Shows a logo on top of the page. env.show_logo = True # Shows language menu. env.show_language_menu = True # Uses short labels for buttons. env.use_short_buttons = False # Optional "target" attribute for links to non-small pages. env.target_attr = '' # Shows record IDs in the results page. env.show_record_ids_in_results = True # Shows non AMP HTML pages by default. env.amp = False if env.ui == 'small': env.show_logo = False env.target_attr = ' target="_blank" ' elif env.ui == 'light': # Disables features which requires JavaScript. Some feature phones # doesn't support JavaScript. env.enable_javascript = False # Disables operations which requires Captcha because Captcha requires # JavaScript. env.enable_captcha = False # Uploading is often not supported in feature phones. env.enable_photo_upload = False # Disables spam operations because it requires JavaScript and # supporting more pages on ui=light. env.enable_spam_ops = False # Disables duplicate marking mode because it doesn't support # small screens and it requires JavaScript. env.enable_dup_mode = False # Hides the logo on the top to save the space. Also, the logo links # to the global page which doesn't support small screens. env.show_logo = False # Hides language menu because the menu in the current position is # annoying in feature phones. # TODO(ichikawa): Consider layout of the language menu. env.show_language_menu = False # Too long buttons are not fully shown in some feature phones. env.use_short_buttons = True # To make it simple. env.show_record_ids_in_results = False env.back_chevron = u'\xab' back_chevron_in_charset = True try: env.back_chevron.encode(env.charset) except UnicodeEncodeError: # u'\xab' is not in the charset (e.g. Shift_JIS). back_chevron_in_charset = False if not back_chevron_in_charset or env.ui == 'light': # Use ASCII characters on ui=light too because some feature phones # support UTF-8 but don't render UTF-8 symbols such as u'\xab'. env.back_chevron = u'<<' env.enable_maps = (env.enable_javascript and not env.config.zero_rating_mode and env.maps_api_key) env.enable_analytics = (env.enable_javascript and not env.config.zero_rating_mode and env.analytics_id) env.enable_translate = (env.enable_javascript and not env.config.zero_rating_mode and env.config.translate_api_key) env.admin = AdminEnv(request) # Repo-specific information. if env.repo: # repo_url is the root URL for the repository. env.repo_url = utils.get_repo_url(request, env.repo) # start_url is like repo_url but preserves parameters such as 'ui'. env.start_url = utils.get_url(request, env.repo, '') # URL of the link in the heading. The link on ui=small links to the # normal UI. env.repo_title_url = (env.repo_url if env.ui == 'small' else env.start_url) # URL to force default UI. Note that we show ui=light version in some # user agents when ui parameter is not specified. env.default_ui_url = utils.get_url(request, env.repo, '', ui='default') env.repo_path = urlparse.urlsplit(env.repo_url)[2] env.repo_title = get_localized_message(env.config.repo_titles, env.lang, '?') env.start_page_custom_html = get_localized_message( env.config.start_page_custom_htmls, env.lang, '') env.results_page_custom_html = get_localized_message( env.config.results_page_custom_htmls, env.lang, '') env.view_page_custom_html = get_localized_message( env.config.view_page_custom_htmls, env.lang, '') env.seek_query_form_custom_html = get_localized_message( env.config.seek_query_form_custom_htmls, env.lang, '') env.footer_custom_html = get_localized_message( env.config.footer_custom_htmls, env.lang, '') # If the repository is deactivated, we should not show test mode # notification. env.repo_test_mode = (env.config.test_mode and not env.config.deactivated) env.force_https = env.config.force_https env.params_full_name = request.get('full_name', '').strip() if not env.params_full_name: # Preformat the name from 'given_name' and 'family_name' parameters. given_name = request.get('given_name', '').strip() family_name = request.get('family_name', '').strip() env.params_full_name = utils.get_full_name(given_name, family_name, env.config) return env
def setup_env(request): """Constructs the 'env' object, which contains various template variables that are commonly used by most handlers.""" env = utils.Struct() env.repo, env.action = get_repo_and_action(request) env.config = config.Configuration(env.repo or '*') # TODO(ryok): Rename to local_test_mode or something alike to disambiguate # better from repository's test_mode. env.test_mode = (request.remote_addr == '127.0.0.1' and request.get('test_mode')) # We sometimes want to disable analytics/maps for requests from a specific # mobile carrier (specified by IP ranges). # In this way, we can avoid requests to sites outside google.org, and # allow the carrier to zero-rate access to Person Finder. # TODO(ichikawa): Add server test for this feature. # # TODO(kpy): Make these global config settings and get rid of get_secret(). if utils.is_ip_address_in_one_of_networks( request.remote_addr, env.config.ip_networks_to_disable_analytics): env.analytics_id = None else: env.analytics_id = get_secret('analytics_id') if utils.is_ip_address_in_one_of_networks( request.remote_addr, env.config.ip_networks_to_disable_maps): env.maps_api_key = None else: env.maps_api_key = get_secret('maps_api_key') # Internationalization-related stuff. env.charset = select_charset(request) env.lang = select_lang(request, env.config) env.rtl = env.lang in django_setup.LANGUAGES_BIDI env.virtual_keyboard_layout = const.VIRTUAL_KEYBOARD_LAYOUTS.get(env.lang) # Used for parsing query params. This must be done before accessing any # query params which may have multi-byte value, such as "given_name" below # in this function. request.charset = env.charset # Determine the resource bundle to use. env.default_resource_bundle = config.get('default_resource_bundle', '1') env.resource_bundle = (request.cookies.get('resource_bundle', '') or env.default_resource_bundle) # Information about the request. env.url = utils.set_url_param(request.url, 'lang', env.lang) env.scheme, env.netloc, env.path, _, _ = urlparse.urlsplit(request.url) env.force_https = False env.domain = env.netloc.split(':')[0] env.global_url = utils.get_repo_url(request, 'global') # Commonly used information that's rendered or localized for templates. env.language_options = get_language_options(request, env.config) env.repo_options = get_repo_options(request, env.lang) env.expiry_options = [ utils.Struct(value=value, text=const.PERSON_EXPIRY_TEXT[value]) for value in sorted(const.PERSON_EXPIRY_TEXT.keys(), key=int) ] env.status_options = [ utils.Struct(value=value, text=const.NOTE_STATUS_TEXT[value]) for value in pfif.NOTE_STATUS_VALUES if (value != 'believed_dead' or not env.config or env.config.allow_believed_dead_via_ui) ] env.hidden_input_tags_for_preserved_query_params = ( get_hidden_input_tags_for_preserved_query_params(request)) ui_param = request.get('ui', '').strip().lower() # Interprets "small" and "style" parameters for backward compatibility. # TODO(ichikawa): Delete these in near future when we decide to drop # support of these parameters. small_param = request.get('small', '').strip().lower() style_param = request.get('style', '').strip().lower() if not ui_param and small_param == 'yes': ui_param = 'small' elif not ui_param and style_param: ui_param = style_param if ui_param: env.ui = ui_param elif user_agents.is_jp_tier2_mobile_phone(request): env.ui = 'light' else: env.ui = 'default' # UI configurations. # # Enables features which require JavaScript. env.enable_javascript = True # Enables operations which requires Captcha. env.enable_captcha = True # Enables photo upload. env.enable_photo_upload = True # Enables to flag/unflag notes as spam, and to reveal spam notes. env.enable_spam_ops = True # Enables duplicate marking mode. env.enable_dup_mode = True # Shows a logo on top of the page. env.show_logo = True # Shows language menu. env.show_language_menu = True # Uses short labels for buttons. env.use_short_buttons = False # Optional "target" attribute for links to non-small pages. env.target_attr = '' # Shows record IDs in the results page. env.show_record_ids_in_results = True if env.ui == 'small': env.show_logo = False env.target_attr = ' target="_blank" ' elif env.ui == 'light': # Disables features which requires JavaScript. Some feature phones # doesn't support JavaScript. env.enable_javascript = False # Disables operations which requires Captcha because Captcha requires # JavaScript. env.enable_captcha = False # Uploading is often not supported in feature phones. env.enable_photo_upload = False # Disables spam operations because it requires JavaScript and # supporting more pages on ui=light. env.enable_spam_ops = False # Disables duplicate marking mode because it doesn't support # small screens and it requires JavaScript. env.enable_dup_mode = False # Hides the logo on the top to save the space. Also, the logo links # to the global page which doesn't support small screens. env.show_logo = False # Hides language menu because the menu in the current position is # annoying in feature phones. # TODO(ichikawa): Consider layout of the language menu. env.show_language_menu = False # Too long buttons are not fully shown in some feature phones. env.use_short_buttons = True # To make it simple. env.show_record_ids_in_results = False env.back_chevron = u'\xab' back_chevron_in_charset = True try: env.back_chevron.encode(env.charset) except UnicodeEncodeError: # u'\xab' is not in the charset (e.g. Shift_JIS). back_chevron_in_charset = False if not back_chevron_in_charset or env.ui == 'light': # Use ASCII characters on ui=light too because some feature phones # support UTF-8 but don't render UTF-8 symbols such as u'\xab'. env.back_chevron = u'<<' # Repo-specific information. if env.repo: # repo_url is the root URL for the repository. env.repo_url = utils.get_repo_url(request, env.repo) # start_url is like repo_url but preserves parameters such as 'ui'. env.start_url = utils.get_url(request, env.repo, '') # URL of the link in the heading. The link on ui=small links to the # normal UI. env.repo_title_url = ( env.repo_url if env.ui == 'small' else env.start_url) # URL to force default UI. Note that we show ui=light version in some # user agents when ui parameter is not specified. env.default_ui_url = utils.get_url(request, env.repo, '', ui='default') env.repo_path = urlparse.urlsplit(env.repo_url)[2] env.repo_title = get_localized_message( env.config.repo_titles, env.lang, '?') env.start_page_custom_html = get_localized_message( env.config.start_page_custom_htmls, env.lang, '') env.results_page_custom_html = get_localized_message( env.config.results_page_custom_htmls, env.lang, '') env.view_page_custom_html = get_localized_message( env.config.view_page_custom_htmls, env.lang, '') env.seek_query_form_custom_html = get_localized_message( env.config.seek_query_form_custom_htmls, env.lang, '') env.footer_custom_html = get_localized_message( env.config.footer_custom_htmls, env.lang, '') # If the repository is deactivated, we should not show test mode # notification. env.repo_test_mode = ( env.config.test_mode and not env.config.deactivated) env.force_https = env.config.force_https env.params_full_name = request.get('full_name', '').strip() if not env.params_full_name: # Preformat the name from 'given_name' and 'family_name' parameters. given_name = request.get('given_name', '').strip() family_name = request.get('family_name', '').strip() env.params_full_name = utils.get_full_name( given_name, family_name, env.config) return env