Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
orangecat
ollama
Commits
fc8c0445
"src/targets/gpu/vscode:/vscode.git/clone" did not exist on "c70d1179528fcfd9981278ba2554ee02ac1641ff"
Unverified
Commit
fc8c0445
authored
Mar 08, 2024
by
Jeffrey Morgan
Committed by
GitHub
Mar 08, 2024
Browse files
add allowed host middleware and remove `workDir` middleware (#3018)
parent
ecc133d8
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
61 additions
and
26 deletions
+61
-26
server/routes.go
server/routes.go
+60
-17
server/routes_test.go
server/routes_test.go
+1
-9
No files found.
server/routes.go
View file @
fc8c0445
...
...
@@ -10,6 +10,7 @@ import (
"log/slog"
"net"
"net/http"
"net/netip"
"os"
"os/signal"
"path/filepath"
...
...
@@ -35,7 +36,7 @@ import (
var
mode
string
=
gin
.
DebugMode
type
Server
struct
{
WorkDir
string
addr
net
.
Addr
}
func
init
()
{
...
...
@@ -904,15 +905,64 @@ var defaultAllowOrigins = []string{
"0.0.0.0"
,
}
func
NewServer
()
(
*
Server
,
error
)
{
workDir
,
err
:=
os
.
MkdirTemp
(
""
,
"ollama"
)
func
allowedHost
(
host
string
)
bool
{
if
host
==
""
||
host
==
"localhost"
{
return
true
}
if
hostname
,
err
:=
os
.
Hostname
();
err
==
nil
&&
host
==
hostname
{
return
true
}
var
tlds
=
[]
string
{
".localhost"
,
".local"
,
".internal"
,
}
for
_
,
tld
:=
range
tlds
{
if
strings
.
HasSuffix
(
host
,
"."
+
tld
)
{
return
true
}
}
return
false
}
func
allowedHostsMiddleware
(
addr
net
.
Addr
)
gin
.
HandlerFunc
{
return
func
(
c
*
gin
.
Context
)
{
if
addr
==
nil
{
c
.
Next
()
return
}
if
!
netip
.
MustParseAddrPort
(
addr
.
String
())
.
Addr
()
.
IsLoopback
()
{
c
.
Next
()
return
}
if
addrPort
,
_
:=
netip
.
ParseAddrPort
(
c
.
Request
.
Host
);
addrPort
.
Addr
()
.
IsLoopback
()
{
c
.
Next
()
return
}
if
addr
,
_
:=
netip
.
ParseAddr
(
c
.
Request
.
Host
);
addr
.
IsLoopback
()
{
c
.
Next
()
return
}
host
,
_
,
err
:=
net
.
SplitHostPort
(
c
.
Request
.
Host
)
if
err
!=
nil
{
return
nil
,
err
host
=
c
.
Request
.
Host
}
return
&
Server
{
WorkDir
:
workDir
,
},
nil
if
allowedHost
(
host
)
{
c
.
Next
()
return
}
c
.
AbortWithStatus
(
http
.
StatusForbidden
)
}
}
func
(
s
*
Server
)
GenerateRoutes
()
http
.
Handler
{
...
...
@@ -938,10 +988,7 @@ func (s *Server) GenerateRoutes() http.Handler {
r
:=
gin
.
Default
()
r
.
Use
(
cors
.
New
(
config
),
func
(
c
*
gin
.
Context
)
{
c
.
Set
(
"workDir"
,
s
.
WorkDir
)
c
.
Next
()
},
allowedHostsMiddleware
(
s
.
addr
),
)
r
.
POST
(
"/api/pull"
,
PullModelHandler
)
...
...
@@ -1010,10 +1057,7 @@ func Serve(ln net.Listener) error {
}
}
s
,
err
:=
NewServer
()
if
err
!=
nil
{
return
err
}
s
:=
&
Server
{
addr
:
ln
.
Addr
()}
r
:=
s
.
GenerateRoutes
()
slog
.
Info
(
fmt
.
Sprintf
(
"Listening on %s (version %s)"
,
ln
.
Addr
(),
version
.
Version
))
...
...
@@ -1029,7 +1073,6 @@ func Serve(ln net.Listener) error {
if
loaded
.
runner
!=
nil
{
loaded
.
runner
.
Close
()
}
os
.
RemoveAll
(
s
.
WorkDir
)
os
.
Exit
(
0
)
}()
...
...
server/routes_test.go
View file @
fc8c0445
...
...
@@ -21,12 +21,6 @@ import (
"github.com/jmorganca/ollama/version"
)
func
setupServer
(
t
*
testing
.
T
)
(
*
Server
,
error
)
{
t
.
Helper
()
return
NewServer
()
}
func
Test_Routes
(
t
*
testing
.
T
)
{
type
testCase
struct
{
Name
string
...
...
@@ -207,9 +201,7 @@ func Test_Routes(t *testing.T) {
},
}
s
,
err
:=
setupServer
(
t
)
assert
.
Nil
(
t
,
err
)
s
:=
Server
{}
router
:=
s
.
GenerateRoutes
()
httpSrv
:=
httptest
.
NewServer
(
router
)
...
...
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