Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
A
admin-fe
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Pleroma
admin-fe
Commits
8226a3c9
Commit
8226a3c9
authored
5 years ago
by
Angelina Filippova
Browse files
Options
Downloads
Patches
Plain Diff
Render MediaProxy settings using description data from API
parent
265ecd66
No related branches found
Branches containing commit
No related tags found
Tags containing commit
1 merge request
!65
Update server configuration
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/views/settings/components/MediaProxy.vue
+12
-105
12 additions, 105 deletions
src/views/settings/components/MediaProxy.vue
with
12 additions
and
105 deletions
src/views/settings/components/MediaProxy.vue
+
12
−
105
View file @
8226a3c9
<
template
>
<el-form
v-if=
"!loading"
ref=
"mediaProxy"
:model=
"mediaProxy"
:label-width=
"labelWidth"
>
<el-form-item
label=
"Enabled"
>
<el-switch
:value=
"mediaProxy.enabled"
@
change=
"updateSetting($event, 'media_proxy', 'enabled')"
/>
<p
class=
"expl"
>
Enables proxying of remote media to the instance’s proxy
</p>
</el-form-item>
<el-form-item
label=
"Base URL"
>
<el-input
:value=
"mediaProxy.base_url"
@
input=
"updateSetting($event, 'media_proxy', 'base_url')"
/>
<p
class=
"expl"
>
The base URL to access a user-uploaded file. Useful when you want to proxy the media files via another host/CDN fronts.
</p>
</el-form-item>
<div
class=
"line"
/>
<el-form-item
label=
"Proxy options:"
/>
<el-form-item
label=
"Redirect on failure"
>
<el-switch
:value=
"mediaProxy.proxy_opts.redirect_on_failure"
@
change=
"processNestedData($event, 'media_proxy', 'proxy_opts', 'redirect_on_failure')"
/>
<p
class=
"expl"
>
Redirects the client to the real remote URL if there's any HTTP errors. Any error during body processing will not be redirected as the response is chunked
</p>
</el-form-item>
<el-form-item
label=
"Max body length (MB)"
>
<el-input-number
:value=
"mediaProxy.proxy_opts.max_body_length / 1048576"
:step=
"1"
:min=
"0"
size=
"large"
@
change=
"processNestedData($event * 1048576, 'media_proxy', 'proxy_opts', 'max_body_length')"
/>
<p
class=
"expl"
>
Limits the content length to be approximately the specified length
</p>
</el-form-item>
<el-form-item
label=
"Max read duration (s)"
>
<el-input-number
:value=
"mediaProxy.proxy_opts.max_read_duration"
:step=
"1"
:min=
"0"
size=
"large"
@
change=
"processNestedData($event, 'media_proxy', 'proxy_opts', 'max_read_duration')"
/>
<p
class=
"expl"
>
The total time the connection is allowed to read from the remote upstream
</p>
</el-form-item>
<el-form-item
label=
"Inline content types"
>
<el-select
:value=
"inlineContentTypes"
clearable
@
change=
"processNestedData($event, 'media_proxy', 'proxy_opts', 'inline_content_types')"
>
<el-option
:value=
"true"
label=
"True"
/>
<el-option
:value=
"false"
label=
"False"
/>
<el-option
value=
"whitelistedTypeArray"
label=
"List of whitelisted content types"
/>
<el-option
value=
"keepUserAgent"
label=
"Forward client's user-agent to the upstream"
/>
</el-select>
<p
v-if=
"inlineContentTypes === true"
class=
"expl"
>
Will not alter
<span
class=
"code"
>
content-disposition
</span>
(up to the upstream)
</p>
<p
v-if=
"!inlineContentTypes"
class=
"expl"
>
Will add
<span
class=
"code"
>
content-disposition: attachment
</span>
to any request
</p>
<p
v-if=
"inlineContentTypes === 'keepUserAgent'"
class=
"expl"
>
Will forward the client's user-agent to the upstream. This may be useful if the upstream is
doing content transformation (encoding, …) depending on the request.
</p>
</el-form-item>
<el-form-item
v-if=
"inlineContentTypes === 'whitelistedTypeArray'"
label=
"Whitelisted content types"
>
<el-select
:value=
"whitelistedContentTypes"
multiple
filterable
allow-create
@
change=
"processNestedData($event, 'media_proxy', 'proxy_opts', 'inline_content_types')"
>
<el-option
v-for=
"item in whitelistedContentTypesOptions"
:label=
"item.label"
:key=
"item.value"
:value=
"item.value"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"Request headers"
>
<el-select
:value=
"mediaProxy.proxy_opts.req_headers || []"
multiple
filterable
allow-create
@
change=
"processNestedData($event, 'media_proxy', 'proxy_opts', 'req_headers')"
/>
<p
class=
"expl"
><span
class=
"code"
>
resp_headers
</span>
additional headers
</p>
</el-form-item>
<el-form-item
label=
"HTTP:"
/>
<el-form-item
label=
"Follow redirect"
>
<el-switch
:value=
"http.follow_redirect"
@
change=
"processHttpSettings($event, 'media_proxy', 'proxy_opts', 'http', 'follow_redirect')"
/>
</el-form-item>
<el-form-item
label=
"Pool"
>
<el-select
:value=
"http.pool"
clearable
@
change=
"processHttpSettings($event, 'media_proxy', 'proxy_opts', 'http', 'pool')"
>
<el-option
v-for=
"item in hackneyPoolsOptions"
:label=
"item.label"
:key=
"item.value"
:value=
"item.value"
/>
</el-select>
<p
class=
"expl"
>
{{
getPoolExpl
(
http
.
pool
)
}}
</p>
</el-form-item>
<div
class=
"line"
/>
<el-form-item
label=
"Whitelist"
>
<el-select
:value=
"mediaProxy.whitelist || []"
multiple
filterable
allow-create
@
change=
"updateSetting($event, 'media_proxy', 'whitelist')"
/>
<p
class=
"expl"
>
List of domains to bypass the mediaproxy
</p>
</el-form-item>
<el-form
v-if=
"!loading"
ref=
"mediaProxy"
:model=
"mediaProxyData"
:label-width=
"labelWidth"
>
<setting
:setting-group=
"mediaProxy"
:data=
"mediaProxyData"
/>
<el-form-item>
<el-button
type=
"primary"
@
click=
"onSubmit"
>
Submit
</el-button>
</el-form-item>
...
...
@@ -77,32 +10,15 @@
<
script
>
import
i18n
from
'
@/lang
'
import
{
mapGetters
}
from
'
vuex
'
import
{
options
}
from
'
./
options
'
import
Setting
from
'
./
Setting
'
export
default
{
name
:
'
MediaProxy
'
,
components
:
{
Setting
},
computed
:
{
...
mapGetters
([
'
mediaProxy
'
'
settings
'
]),
inlineContentTypes
()
{
return
Array
.
isArray
(
this
.
mediaProxy
.
proxy_opts
.
inline_content_types
)
?
'
whitelistedTypeArray
'
:
this
.
mediaProxy
.
proxy_opts
.
inline_content_types
},
http
()
{
return
this
.
mediaProxy
.
proxy_opts
.
http
||
{}
},
reqHeadersOptions
()
{
return
this
.
mediaProxySettings
.
reqHeadersOptions
},
hackneyPoolsOptions
()
{
return
options
.
hackneyPoolsOptions
},
whitelistedContentTypes
()
{
return
Array
.
isArray
(
this
.
mediaProxy
.
proxy_opts
.
inline_content_types
)
?
this
.
mediaProxy
.
proxy_opts
.
inline_content_types
:
[]
},
whitelistedContentTypesOptions
()
{
return
options
.
whitelistedContentTypesOptions
},
isMobile
()
{
return
this
.
$store
.
state
.
app
.
device
===
'
mobile
'
},
...
...
@@ -110,25 +26,16 @@ export default {
return
this
.
isMobile
?
'
100px
'
:
'
240px
'
},
loading
()
{
return
this
.
$store
.
state
.
settings
.
loading
return
this
.
settings
.
loading
},
mediaProxy
()
{
return
this
.
settings
.
description
.
find
(
setting
=>
setting
.
key
===
'
:media_proxy
'
)
},
mediaProxyData
()
{
return
this
.
settings
.
settings
[
'
:media_proxy
'
]
}
},
methods
:
{
getPoolExpl
(
value
)
{
const
pool
=
this
.
hackneyPoolsOptions
.
find
(
el
=>
el
.
value
===
value
)
return
pool
?
'
Max connections:
'
+
pool
.
max_connections
+
'
, timeout:
'
+
pool
.
timeout
:
''
},
processHttpSettings
(
value
,
tab
,
section
,
httpSection
,
input
)
{
const
updatedValue
=
{
...
this
.
mediaProxy
[
section
][
httpSection
],
...{
[
input
]:
value
}}
this
.
processNestedData
(
updatedValue
,
tab
,
section
,
httpSection
)
},
processNestedData
(
value
,
tab
,
section
,
input
)
{
const
updatedValue
=
{
...
this
.
$store
.
state
.
settings
.
settings
[
tab
][
section
],
...{
[
input
]:
value
}}
this
.
updateSetting
(
updatedValue
,
tab
,
section
)
},
updateSetting
(
value
,
tab
,
input
)
{
this
.
$store
.
dispatch
(
'
UpdateSettings
'
,
{
tab
,
data
:
{
[
input
]:
value
}})
},
async
onSubmit
()
{
try
{
await
this
.
$store
.
dispatch
(
'
SubmitChanges
'
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment