Esempio n. 1
0
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)
Esempio n. 2
0
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)
Esempio n. 3
0
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
Esempio n. 4
0
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
Esempio n. 5
0
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
Esempio n. 6
0
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}