Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nexpie-grafana-theme
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Registry
Registry
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kornkitt Poolsup
nexpie-grafana-theme
Commits
1725940a
Commit
1725940a
authored
Sep 10, 2018
by
Erik Sundell
Committed by
Daniel Lee
Sep 14, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Stackdriver: Add new file
parent
6a610558
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
92 additions
and
0 deletions
+92
-0
pkg/api/pluginproxy/ds_auth_provider.go
+92
-0
No files found.
pkg/api/pluginproxy/ds_auth_provider.go
0 → 100644
View file @
1725940a
package
pluginproxy
import
(
"bytes"
"context"
"fmt"
"html/template"
"net/http"
"net/url"
"strings"
m
"github.com/grafana/grafana/pkg/models"
"github.com/grafana/grafana/pkg/plugins"
"github.com/grafana/grafana/pkg/util"
)
func
applyRoute
(
ctx
context
.
Context
,
req
*
http
.
Request
,
proxyPath
string
,
route
*
plugins
.
AppPluginRoute
,
ds
*
m
.
DataSource
)
{
proxyPath
=
strings
.
TrimPrefix
(
proxyPath
,
route
.
Path
)
data
:=
templateData
{
JsonData
:
ds
.
JsonData
.
Interface
()
.
(
map
[
string
]
interface
{}),
SecureJsonData
:
ds
.
SecureJsonData
.
Decrypt
(),
}
interpolatedURL
,
err
:=
interpolateString
(
route
.
Url
,
data
)
if
err
!=
nil
{
logger
.
Error
(
"Error interpolating proxy url"
,
"error"
,
err
)
return
}
routeURL
,
err
:=
url
.
Parse
(
interpolatedURL
)
if
err
!=
nil
{
logger
.
Error
(
"Error parsing plugin route url"
,
"error"
,
err
)
return
}
req
.
URL
.
Scheme
=
routeURL
.
Scheme
req
.
URL
.
Host
=
routeURL
.
Host
req
.
Host
=
routeURL
.
Host
req
.
URL
.
Path
=
util
.
JoinUrlFragments
(
routeURL
.
Path
,
proxyPath
)
if
err
:=
addHeaders
(
&
req
.
Header
,
route
,
data
);
err
!=
nil
{
logger
.
Error
(
"Failed to render plugin headers"
,
"error"
,
err
)
}
tokenProvider
:=
newAccessTokenProvider
(
ds
.
Id
,
route
)
if
route
.
TokenAuth
!=
nil
{
if
token
,
err
:=
tokenProvider
.
getAccessToken
(
data
);
err
!=
nil
{
logger
.
Error
(
"Failed to get access token"
,
"error"
,
err
)
}
else
{
req
.
Header
.
Add
(
"Authorization"
,
fmt
.
Sprintf
(
"Bearer %s"
,
token
))
}
}
if
route
.
JwtTokenAuth
!=
nil
{
if
token
,
err
:=
tokenProvider
.
getJwtAccessToken
(
ctx
,
data
);
err
!=
nil
{
logger
.
Error
(
"Failed to get access token"
,
"error"
,
err
)
}
else
{
req
.
Header
.
Add
(
"Authorization"
,
fmt
.
Sprintf
(
"Bearer %s"
,
token
))
}
}
logger
.
Info
(
"Requesting"
,
"url"
,
req
.
URL
.
String
())
}
func
interpolateString
(
text
string
,
data
templateData
)
(
string
,
error
)
{
t
,
err
:=
template
.
New
(
"content"
)
.
Parse
(
text
)
if
err
!=
nil
{
return
""
,
fmt
.
Errorf
(
"could not parse template %s"
,
text
)
}
var
contentBuf
bytes
.
Buffer
err
=
t
.
Execute
(
&
contentBuf
,
data
)
if
err
!=
nil
{
return
""
,
fmt
.
Errorf
(
"failed to execute template %s"
,
text
)
}
return
contentBuf
.
String
(),
nil
}
func
addHeaders
(
reqHeaders
*
http
.
Header
,
route
*
plugins
.
AppPluginRoute
,
data
templateData
)
error
{
for
_
,
header
:=
range
route
.
Headers
{
interpolated
,
err
:=
interpolateString
(
header
.
Content
,
data
)
if
err
!=
nil
{
return
err
}
reqHeaders
.
Add
(
header
.
Name
,
interpolated
)
}
return
nil
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment