Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
canifa_note
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vũ Hoàng Anh
canifa_note
Commits
b11d2130
Unverified
Commit
b11d2130
authored
Feb 11, 2023
by
boojack
Committed by
GitHub
Feb 11, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: validate external link (#1069)
parent
e0f4cb06
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
11 additions
and
14 deletions
+11
-14
resource.go
server/resource.go
+10
-13
CreateResourceDialog.tsx
web/src/components/CreateResourceDialog.tsx
+1
-1
No files found.
server/resource.go
View file @
b11d2130
...
@@ -38,6 +38,10 @@ func (s *Server) registerResourceRoutes(g *echo.Group) {
...
@@ -38,6 +38,10 @@ func (s *Server) registerResourceRoutes(g *echo.Group) {
}
}
resourceCreate
.
CreatorID
=
userID
resourceCreate
.
CreatorID
=
userID
// Only allow those external links with http prefix.
if
resourceCreate
.
ExternalLink
!=
""
&&
!
strings
.
HasPrefix
(
resourceCreate
.
ExternalLink
,
"http"
)
{
return
echo
.
NewHTTPError
(
http
.
StatusBadRequest
,
"Invalid external link"
)
}
resource
,
err
:=
s
.
Store
.
CreateResource
(
ctx
,
resourceCreate
)
resource
,
err
:=
s
.
Store
.
CreateResource
(
ctx
,
resourceCreate
)
if
err
!=
nil
{
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to create resource"
)
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to create resource"
)
.
SetInternal
(
err
)
...
@@ -188,13 +192,7 @@ func (s *Server) registerResourceRoutes(g *echo.Group) {
...
@@ -188,13 +192,7 @@ func (s *Server) registerResourceRoutes(g *echo.Group) {
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to fetch resource"
)
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to fetch resource"
)
.
SetInternal
(
err
)
}
}
c
.
Response
()
.
Writer
.
WriteHeader
(
http
.
StatusOK
)
return
c
.
Stream
(
http
.
StatusOK
,
resource
.
Type
,
bytes
.
NewReader
(
resource
.
Blob
))
c
.
Response
()
.
Writer
.
Header
()
.
Set
(
"Content-Type"
,
resource
.
Type
)
c
.
Response
()
.
Writer
.
Header
()
.
Set
(
echo
.
HeaderContentSecurityPolicy
,
"default-src 'self'"
)
if
_
,
err
:=
c
.
Response
()
.
Writer
.
Write
(
resource
.
Blob
);
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
"Failed to write resource blob"
)
.
SetInternal
(
err
)
}
return
nil
})
})
g
.
PATCH
(
"/resource/:resourceId"
,
func
(
c
echo
.
Context
)
error
{
g
.
PATCH
(
"/resource/:resourceId"
,
func
(
c
echo
.
Context
)
error
{
...
@@ -296,16 +294,15 @@ func (s *Server) registerResourcePublicRoutes(g *echo.Group) {
...
@@ -296,16 +294,15 @@ func (s *Server) registerResourcePublicRoutes(g *echo.Group) {
}
}
resource
,
err
:=
s
.
Store
.
FindResource
(
ctx
,
resourceFind
)
resource
,
err
:=
s
.
Store
.
FindResource
(
ctx
,
resourceFind
)
if
err
!=
nil
{
if
err
!=
nil
{
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
fmt
.
Sprintf
(
"Failed to f
etch resource
ID: %v"
,
resourceID
))
.
SetInternal
(
err
)
return
echo
.
NewHTTPError
(
http
.
StatusInternalServerError
,
fmt
.
Sprintf
(
"Failed to f
ind resource by
ID: %v"
,
resourceID
))
.
SetInternal
(
err
)
}
}
resourceType
:=
strings
.
ToLower
(
resource
.
Type
)
if
strings
.
HasPrefix
(
resourceType
,
"text"
)
||
(
strings
.
HasPrefix
(
resourceType
,
"application"
)
&&
resourceType
!=
"application/pdf"
)
{
resourceType
=
echo
.
MIMETextPlain
}
c
.
Response
()
.
Writer
.
Header
()
.
Set
(
echo
.
HeaderCacheControl
,
"max-age=31536000, immutable"
)
c
.
Response
()
.
Writer
.
Header
()
.
Set
(
echo
.
HeaderCacheControl
,
"max-age=31536000, immutable"
)
c
.
Response
()
.
Writer
.
Header
()
.
Set
(
echo
.
HeaderContentSecurityPolicy
,
"default-src 'self'"
)
c
.
Response
()
.
Writer
.
Header
()
.
Set
(
echo
.
HeaderContentSecurityPolicy
,
"default-src 'self'"
)
if
strings
.
HasPrefix
(
resourceType
,
"video"
)
||
strings
.
HasPrefix
(
resourceType
,
"audio"
)
{
resourceType
:=
strings
.
ToLower
(
resource
.
Type
)
if
strings
.
HasPrefix
(
resourceType
,
"text"
)
{
resourceType
=
echo
.
MIMETextPlainCharsetUTF8
}
else
if
strings
.
HasPrefix
(
resourceType
,
"video"
)
||
strings
.
HasPrefix
(
resourceType
,
"audio"
)
{
http
.
ServeContent
(
c
.
Response
(),
c
.
Request
(),
resource
.
Filename
,
time
.
Unix
(
resource
.
UpdatedTs
,
0
),
bytes
.
NewReader
(
resource
.
Blob
))
http
.
ServeContent
(
c
.
Response
(),
c
.
Request
(),
resource
.
Filename
,
time
.
Unix
(
resource
.
UpdatedTs
,
0
),
bytes
.
NewReader
(
resource
.
Blob
))
return
nil
return
nil
}
}
...
...
web/src/components/CreateResourceDialog.tsx
View file @
b11d2130
...
@@ -194,7 +194,7 @@ const CreateResourceDialog: React.FC<Props> = (props: Props) => {
...
@@ -194,7 +194,7 @@ const CreateResourceDialog: React.FC<Props> = (props: Props) => {
</
Typography
>
</
Typography
>
<
Input
<
Input
className=
"mb-2"
className=
"mb-2"
placeholder=
"
File link
"
placeholder=
"
https://the.link.to/your/resource
"
value=
{
resourceCreate
.
externalLink
}
value=
{
resourceCreate
.
externalLink
}
onChange=
{
handleExternalLinkChanged
}
onChange=
{
handleExternalLinkChanged
}
fullWidth
fullWidth
...
...
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