def gsuite_callback(code=None): doc = dataent.get_doc("GSuite Settings") if code is None: return { 'url': 'https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&response_type=code&client_id={}&scope={}&redirect_uri={}?cmd=dataent.integrations.doctype.gsuite_settings.gsuite_settings.gsuite_callback' .format(doc.client_id, SCOPES, get_request_site_address(True)) } else: try: data = { 'code': code, 'client_id': doc.client_id, 'client_secret': doc.get_password(fieldname='client_secret', raise_exception=False), 'redirect_uri': get_request_site_address(True) + '?cmd=dataent.integrations.doctype.gsuite_settings.gsuite_settings.gsuite_callback', 'grant_type': 'authorization_code' } r = requests.post('https://www.googleapis.com/oauth2/v4/token', data=data).json() dataent.db.set_value("Gsuite Settings", None, "authorization_code", code) if 'refresh_token' in r: dataent.db.set_value("Gsuite Settings", None, "refresh_token", r['refresh_token']) dataent.db.commit() return except Exception as e: dataent.throw(e.message)
def google_callback(code=None, state=None, account=None): redirect_uri = get_request_site_address(True) + "?cmd=dataent.integrations.doctype.gcalendar_settings.gcalendar_settings.google_callback" if account is not None: dataent.cache().hset("gcalendar_account","GCalendar Account", account) doc = dataent.get_doc("GCalendar Settings") if code is None: return { 'url': 'https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&response_type=code&prompt=consent&client_id={}&include_granted_scopes=true&scope={}&redirect_uri={}'.format(doc.client_id, SCOPES, redirect_uri) } else: try: account = dataent.get_doc("GCalendar Account", dataent.cache().hget("gcalendar_account", "GCalendar Account")) data = {'code': code, 'client_id': doc.client_id, 'client_secret': doc.get_password(fieldname='client_secret',raise_exception=False), 'redirect_uri': redirect_uri, 'grant_type': 'authorization_code'} r = requests.post('https://www.googleapis.com/oauth2/v4/token', data=data).json() dataent.db.set_value("GCalendar Account", account.name, "authorization_code", code) if 'access_token' in r: dataent.db.set_value("GCalendar Account", account.name, "session_token", r['access_token']) if 'refresh_token' in r: dataent.db.set_value("GCalendar Account", account.name, "refresh_token", r['refresh_token']) dataent.db.commit() dataent.local.response["type"] = "redirect" dataent.local.response["location"] = "/integrations/gcalendar-success.html" return except Exception as e: dataent.throw(e.message)
def get_context(context): """generate rss feed""" host = get_request_site_address() blog_list = dataent.db.sql("""\ select route as name, published_on, modified, title, content from `tabBlog Post` where ifnull(published,0)=1 order by published_on desc limit 20""", as_dict=1) for blog in blog_list: blog_page = cstr(quote(blog.name.encode("utf-8"))) blog.link = urljoin(host, blog_page) blog.content = escape_html(blog.content or "") if blog_list: modified = max((blog['modified'] for blog in blog_list)) else: modified = now() blog_settings = dataent.get_doc('Blog Settings', 'Blog Settings') context = { 'title': blog_settings.blog_title or "Blog", 'description': blog_settings.blog_introduction or "", 'modified': modified, 'items': blog_list, 'link': host + '/blog' } # print context return context
def get_dropbox_settings(redirect_uri=False): if not dataent.conf.dropbox_broker_site: dataent.conf.dropbox_broker_site = 'https://dropbox.epaas.xyz' settings = dataent.get_doc("Dropbox Settings") app_details = { "app_key": settings.app_access_key or dataent.conf.dropbox_access_key, "app_secret": settings.get_password(fieldname="app_secret_key", raise_exception=False) if settings.app_secret_key else dataent.conf.dropbox_secret_key, 'access_token': settings.get_password('dropbox_access_token', raise_exception=False) if settings.dropbox_access_token else '', 'access_key': settings.get_password('dropbox_access_key', raise_exception=False), 'access_secret': settings.get_password('dropbox_access_secret', raise_exception=False), 'file_backup':settings.file_backup } if redirect_uri: app_details.update({ 'redirect_uri': get_request_site_address(True) \ + '/api/method/dataent.integrations.doctype.dropbox_settings.dropbox_settings.dropbox_auth_finish' \ if settings.app_secret_key else dataent.conf.dropbox_broker_site\ + '/api/method/dropbox_epaas_broker.www.setup_dropbox.generate_dropbox_access_token', }) if not app_details['app_key'] or not app_details['app_secret']: raise Exception(_("Please set Dropbox access keys in your site config")) return app_details
def get_website_settings(): hooks = dataent.get_hooks() context = dataent._dict({ 'top_bar_items': get_items('top_bar_items'), 'footer_items': get_items('footer_items'), "post_login": [ {"label": _("My Account"), "url": "/me"}, # {"class": "divider"}, {"label": _("Logout"), "url": "/?cmd=web_logout"} ] }) settings = dataent.get_single("Website Settings") for k in ["banner_html", "brand_html", "copyright", "twitter_share_via", "facebook_share", "google_plus_one", "twitter_share", "linked_in_share", "disable_signup", "hide_footer_signup", "head_html", "title_prefix", "navbar_search"]: if hasattr(settings, k): context[k] = settings.get(k) if settings.address: context["footer_address"] = settings.address for k in ["facebook_share", "google_plus_one", "twitter_share", "linked_in_share", "disable_signup"]: context[k] = int(context.get(k) or 0) if dataent.request: context.url = quote(str(get_request_site_address(full_address=True)), safe="/:") context.encoded_title = quote(encode(context.title or ""), str("")) for update_website_context in hooks.update_website_context or []: dataent.get_attr(update_website_context)(context) context.web_include_js = hooks.web_include_js or [] context.web_include_css = hooks.web_include_css or [] via_hooks = dataent.get_hooks("website_context") for key in via_hooks: context[key] = via_hooks[key] if key not in ("top_bar_items", "footer_items", "post_login") \ and isinstance(context[key], (list, tuple)): context[key] = context[key][-1] add_website_theme(context) if not context.get("favicon"): context["favicon"] = "/assets/dataent/images/favicon.png" if settings.favicon and settings.favicon != "attach_files:": context["favicon"] = settings.favicon return context
def get_context(context): """generate the sitemap XML""" host = get_request_site_address() links = [] for route, page in iteritems(get_pages()): if not page.no_sitemap: links.append({ "loc": urljoin(host, quote(page.name.encode("utf-8"))), "lastmod": nowdate() }) for route, data in iteritems(get_all_page_context_from_doctypes()): links.append({ "loc": urljoin(host, quote((route or "").encode("utf-8"))), "lastmod": get_datetime(data.get("modified")).strftime("%Y-%m-%d") }) return {"links": links}