File tree Expand file tree Collapse file tree 4 files changed +123
-0
lines changed
Expand file tree Collapse file tree 4 files changed +123
-0
lines changed Original file line number Diff line number Diff line change 1+ <!DOCTYPE html>
2+ < html >
3+ < head >
4+ < title > {{ title }}</ title >
5+ </ head >
6+ < body >
7+ < h1 > Embed {{ title }}</ h1 >
8+ < iframe
9+ src ="{{iframeUrl}} "
10+ frameborder ="1 "
11+ width ="800 "
12+ height ="600 "
13+ > </ iframe >
14+ </ body >
15+ </ html >
Original file line number Diff line number Diff line change 1+ # A minimal example of a signed embedding in a Django application. Run this program with:
2+ #
3+ # django-admin runserver --pythonpath=. --settings=index
4+ #
5+ # URLs are:
6+ # - http://localhost:8000/ : home page
7+ #
8+ # You will need to modify the value of `METABASE_SECRET_KEY` to make this work.
9+ # Please see https://www.metabase.com/learn/developing-applications/advanced-metabase/embedding-charts-and-dashboards.html
10+ # for the full tutorial.
11+
12+ import os
13+ import time
14+
15+ from django .conf .urls import url
16+ from django .http import HttpResponse
17+ from django .template .loader import render_to_string
18+
19+ import jwt
20+
21+
22+ DEBUG = True
23+ SECRET_KEY = '4l0ngs3cr3tstr1ngw3lln0ts0l0ngw41tn0w1tsl0ng3n0ugh'
24+ ROOT_URLCONF = __name__
25+ TEMPLATES = [{
26+ 'BACKEND' : 'django.template.backends.django.DjangoTemplates' ,
27+ 'DIRS' : [os .getcwd ()]
28+ }]
29+
30+
31+ def home (request ):
32+ METABASE_SITE_URL = 'http://localhost:3000'
33+ METABASE_SECRET_KEY = '40e0106db5156325d600c37a5e077f44a49be1db9d02c96271e7bd67cc9529fa'
34+ payload = {
35+ 'resource' : {'question' : 1 },
36+ 'params' : {},
37+ 'exp' : round (time .time ()) + (60 * 10 )
38+ }
39+ token = jwt .encode (payload , METABASE_SECRET_KEY , algorithm = 'HS256' )
40+ iframeUrl = METABASE_SITE_URL + '/embed/question/' + token + '#bordered=true&titled=true'
41+
42+ html = render_to_string ('index.html' , {
43+ 'title' : 'Embedding Metabase' ,
44+ 'iframeUrl' : iframeUrl
45+ })
46+ return HttpResponse (html )
47+
48+
49+ urlpatterns = [
50+ url (r'^$' , home , name = 'homepage' )
51+ ]
Original file line number Diff line number Diff line change 1+ <!--
2+ A simple example showing how to embed a question using an iframe. This embed is not signed; please see:
3+
4+ https://www.metabase.com/learn/developing-applications/advanced-metabase/embedding-charts-and-dashboards.html
5+
6+ for the full tutorial.
7+
8+ You will need to modify the `src` attribute of the iframe to match your Metabase installation.
9+ -->
10+ < html >
11+ < head >
12+ < title > Metabase Embedding</ title >
13+ </ head >
14+ < body >
15+ < h1 > Metabase Embedding</ h1 >
16+ < iframe
17+ src ="http://localhost:3000/public/question/7f0c3c4b-173e-452c-810f-ccb3fc4482a3 "
18+ frameborder ="1 "
19+ width ="600 "
20+ height ="400 "
21+ > </ iframe >
22+ </ body >
23+ </ html >
Original file line number Diff line number Diff line change 1+ library(shiny )
2+ library(jose )
3+ library(glue )
4+
5+ # Metabase location and secret key of our embedded question.
6+ METABASE_SITE_URL <- ' http://localhost:3000'
7+ METABASE_SECRET_KEY <- ' 40e0106db5156325d600c37a5e077f44a49be1db9d02c96271e7bd67cc9529fa'
8+
9+ # Display title and iframe in UI.
10+ ui <- bootstrapPage(
11+ h1(' Page title' ),
12+ uiOutput(' container' )
13+ )
14+
15+ # Server does the work.
16+ server <- function (input , output ) {
17+ # Token expires 10 minutes in the future.
18+ expiry <- as.integer(unclass(Sys.time())) + (60 * 10 )
19+
20+ # Construct params in two steps so that JSON conversion knows it's a list.
21+ params <- list ()
22+ names(params ) <- character (0 )
23+
24+ # Create the JWT claim.
25+ claim <- jwt_claim(exp = expiry , resource = list (question = 1 ), params = params )
26+
27+ # Encode token and use it to construct iframe URL.
28+ token <- jwt_encode_hmac(claim , secret = METABASE_SECRET_KEY )
29+ url <- glue(" {METABASE_SITE_URL}/embed/question/{token}#bordered=true&titled=true" )
30+ output $ container <- renderUI(tags $ iframe(width = " 600" , height = " 600" , src = url ))
31+ }
32+
33+ # Run application.
34+ shinyApp(ui = ui , server = server , options = list (port = 8001 ))
You can’t perform that action at this time.
0 commit comments