Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
C
core
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to JiHu GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Chenhao Ma
core
Commits
30dc1280
Commit
30dc1280
authored
10 years ago
by
Kevin S. Hahn
Browse files
Options
Downloads
Patches
Plain Diff
change API queries for updated remote user perms
parent
efcf3b85
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
collections_.py
+2
-2
2 additions, 2 deletions
collections_.py
experiments.py
+4
-4
4 additions, 4 deletions
experiments.py
nimsapiutil.py
+12
-10
12 additions, 10 deletions
nimsapiutil.py
with
18 additions
and
16 deletions
collections_.py
+
2
−
2
View file @
30dc1280
...
@@ -60,8 +60,8 @@ class Collections(nimsapiutil.NIMSRequestHandler):
...
@@ -60,8 +60,8 @@ class Collections(nimsapiutil.NIMSRequestHandler):
def
get
(
self
):
def
get
(
self
):
"""
Return the list of Collections.
"""
"""
Return the list of Collections.
"""
query
=
{
'
permissions
.uid
'
:
self
.
uid
}
if
not
self
.
user_is_superuser
else
None
query
=
{
'
permissions
'
:
{
'
$elemMatch
'
:
{
'
uid
'
:
self
.
uid
,
'
site
'
:
self
.
source_site
}}
}
if
not
self
.
user_is_superuser
else
None
projection
=
{
'
curator
'
:
1
,
'
name
'
:
1
,
'
notes
'
:
1
,
'
permissions
'
:
{
'
$elemMatch
'
:
{
'
uid
'
:
self
.
uid
}}}
projection
=
{
'
curator
'
:
1
,
'
name
'
:
1
,
'
notes
'
:
1
,
'
permissions
'
:
{
'
$elemMatch
'
:
{
'
uid
'
:
self
.
uid
,
'
site
'
:
self
.
source_site
}}}
return
list
(
self
.
app
.
db
.
collections
.
find
(
query
,
projection
))
return
list
(
self
.
app
.
db
.
collections
.
find
(
query
,
projection
))
def
put
(
self
):
def
put
(
self
):
...
...
This diff is collapsed.
Click to expand it.
experiments.py
+
4
−
4
View file @
30dc1280
...
@@ -5,7 +5,7 @@ log = logging.getLogger('nimsapi')
...
@@ -5,7 +5,7 @@ log = logging.getLogger('nimsapi')
import
bson.json_util
import
bson.json_util
import
nimsdata
#
import nimsdata
import
nimsapiutil
import
nimsapiutil
...
@@ -62,10 +62,10 @@ class Experiments(nimsapiutil.NIMSRequestHandler):
...
@@ -62,10 +62,10 @@ class Experiments(nimsapiutil.NIMSRequestHandler):
query
=
None
query
=
None
if
not
self
.
user_is_superuser
:
if
not
self
.
user_is_superuser
:
if
self
.
request
.
get
(
'
admin
'
).
lower
()
in
(
'
1
'
,
'
true
'
):
if
self
.
request
.
get
(
'
admin
'
).
lower
()
in
(
'
1
'
,
'
true
'
):
query
=
{
'
permissions
'
:
{
'
$elemMatch
'
:
{
'
uid
'
:
self
.
uid
,
'
role
'
:
'
admin
'
}}}
query
=
{
'
permissions
'
:
{
'
$elemMatch
'
:
{
'
uid
'
:
self
.
uid
,
'
role
'
:
'
admin
'
,
'
site
'
:
self
.
source_site
}}}
else
:
else
:
query
=
{
'
permissions
.uid
'
:
self
.
uid
}
query
=
{
'
permissions
'
:
{
'
$elemMatch
'
:
{
'
uid
'
:
self
.
uid
,
'
site
'
:
self
.
source_site
}}
}
projection
=
{
'
group
'
:
1
,
'
name
'
:
1
,
'
timestamp
'
:
1
,
'
notes
'
:
1
,
'
permissions
'
:
{
'
$elemMatch
'
:
{
'
uid
'
:
self
.
uid
}}}
projection
=
{
'
group
'
:
1
,
'
name
'
:
1
,
'
timestamp
'
:
1
,
'
notes
'
:
1
,
'
permissions
'
:
{
'
$elemMatch
'
:
{
'
uid
'
:
self
.
uid
,
'
site
'
:
self
.
source_site
}}}
experiments
=
list
(
self
.
app
.
db
.
experiments
.
find
(
query
,
projection
))
experiments
=
list
(
self
.
app
.
db
.
experiments
.
find
(
query
,
projection
))
for
exp
in
experiments
:
for
exp
in
experiments
:
exp
[
'
site
'
]
=
self
.
app
.
config
[
'
site_id
'
]
exp
[
'
site
'
]
=
self
.
app
.
config
[
'
site_id
'
]
...
...
This diff is collapsed.
Click to expand it.
nimsapiutil.py
+
12
−
10
View file @
30dc1280
...
@@ -77,8 +77,9 @@ class NIMSRequestHandler(webapp2.RequestHandler):
...
@@ -77,8 +77,9 @@ class NIMSRequestHandler(webapp2.RequestHandler):
def
__init__
(
self
,
request
=
None
,
response
=
None
):
def
__init__
(
self
,
request
=
None
,
response
=
None
):
self
.
initialize
(
request
,
response
)
self
.
initialize
(
request
,
response
)
self
.
target_
id
=
self
.
request
.
get
(
'
site
'
,
None
)
self
.
target_
site
=
self
.
request
.
get
(
'
site
'
,
None
)
self
.
access_token
=
self
.
request
.
headers
.
get
(
'
Authorization
'
,
None
)
self
.
access_token
=
self
.
request
.
headers
.
get
(
'
Authorization
'
,
None
)
self
.
source_site
=
None
# requesting remote site; gets set if request from remote
# CORS header
# CORS header
if
'
Origin
'
in
self
.
request
.
headers
and
self
.
request
.
headers
[
'
Origin
'
].
startswith
(
'
https://
'
):
if
'
Origin
'
in
self
.
request
.
headers
and
self
.
request
.
headers
[
'
Origin
'
].
startswith
(
'
https://
'
):
...
@@ -105,7 +106,7 @@ class NIMSRequestHandler(webapp2.RequestHandler):
...
@@ -105,7 +106,7 @@ class NIMSRequestHandler(webapp2.RequestHandler):
else
:
else
:
self
.
abort
(
403
,
'
user
'
+
self
.
uid
+
'
does not exist
'
)
self
.
abort
(
403
,
'
user
'
+
self
.
uid
+
'
does not exist
'
)
if
self
.
target_
id
not
in
[
None
,
self
.
app
.
config
[
'
site_id
'
]]:
if
self
.
target_
site
not
in
[
None
,
self
.
app
.
config
[
'
site_id
'
]]:
self
.
rtype
=
'
to_remote
'
self
.
rtype
=
'
to_remote
'
if
not
self
.
app
.
config
[
'
site_id
'
]:
if
not
self
.
app
.
config
[
'
site_id
'
]:
...
@@ -113,9 +114,9 @@ class NIMSRequestHandler(webapp2.RequestHandler):
...
@@ -113,9 +114,9 @@ class NIMSRequestHandler(webapp2.RequestHandler):
if
not
self
.
app
.
config
[
'
ssl_key
'
]:
if
not
self
.
app
.
config
[
'
ssl_key
'
]:
self
.
abort
(
500
,
'
api ssl_key is not configured
'
)
self
.
abort
(
500
,
'
api ssl_key is not configured
'
)
target
=
self
.
app
.
db
.
remotes
.
find_one
({
'
_id
'
:
self
.
target_
id
},
{
'
_id
'
:
False
,
'
api_uri
'
:
True
})
target
=
self
.
app
.
db
.
remotes
.
find_one
({
'
_id
'
:
self
.
target_
site
},
{
'
_id
'
:
False
,
'
api_uri
'
:
True
})
if
not
target
:
if
not
target
:
self
.
abort
(
402
,
'
remote host
'
+
self
.
target_
id
+
'
is not an authorized remote
'
)
self
.
abort
(
402
,
'
remote host
'
+
self
.
target_
site
+
'
is not an authorized remote
'
)
# adjust headers
# adjust headers
self
.
headers
=
self
.
request
.
headers
self
.
headers
=
self
.
request
.
headers
...
@@ -142,7 +143,8 @@ class NIMSRequestHandler(webapp2.RequestHandler):
...
@@ -142,7 +143,8 @@ class NIMSRequestHandler(webapp2.RequestHandler):
elif
self
.
request
.
user_agent
.
startswith
(
'
NIMS Instance
'
):
elif
self
.
request
.
user_agent
.
startswith
(
'
NIMS Instance
'
):
self
.
rtype
=
'
from_remote
'
self
.
rtype
=
'
from_remote
'
self
.
uid
=
self
.
request
.
headers
.
get
(
'
X-From
'
)
# store remote user info into self.uid and self.source_site
self
.
uid
,
self
.
source_site
=
self
.
request
.
headers
.
get
(
'
X-From
'
).
split
(
'
#
'
)
self
.
user_is_superuser
=
False
self
.
user_is_superuser
=
False
remote_instance
=
self
.
request
.
user_agent
.
replace
(
'
NIMS Instance
'
,
''
).
strip
()
remote_instance
=
self
.
request
.
user_agent
.
replace
(
'
NIMS Instance
'
,
''
).
strip
()
...
@@ -161,7 +163,7 @@ class NIMSRequestHandler(webapp2.RequestHandler):
...
@@ -161,7 +163,7 @@ class NIMSRequestHandler(webapp2.RequestHandler):
def
dispatch
(
self
):
def
dispatch
(
self
):
"""
dispatching and request forwarding
"""
"""
dispatching and request forwarding
"""
log
.
debug
(
self
.
rtype
+
'
'
+
self
.
uid
+
'
'
+
self
.
request
.
method
+
'
'
+
self
.
request
.
path
+
'
'
+
str
(
self
.
request
.
params
.
mixed
()))
log
.
debug
(
'
%s %s %s %s %s %s
'
%
(
self
.
rtype
,
self
.
uid
,
self
.
source_site
,
self
.
request
.
method
,
self
.
request
.
path
,
str
(
self
.
request
.
params
.
mixed
()))
)
if
self
.
rtype
in
[
'
local
'
,
'
from_remote
'
]:
if
self
.
rtype
in
[
'
local
'
,
'
from_remote
'
]:
return
super
(
NIMSRequestHandler
,
self
).
dispatch
()
return
super
(
NIMSRequestHandler
,
self
).
dispatch
()
else
:
else
:
...
@@ -194,7 +196,7 @@ class NIMSRequestHandler(webapp2.RequestHandler):
...
@@ -194,7 +196,7 @@ class NIMSRequestHandler(webapp2.RequestHandler):
if
not
collection
:
if
not
collection
:
self
.
abort
(
404
,
'
no such Collection
'
)
self
.
abort
(
404
,
'
no such Collection
'
)
if
not
self
.
user_is_superuser
:
if
not
self
.
user_is_superuser
:
coll
=
self
.
app
.
db
.
collections
.
find_one
({
'
_id
'
:
cid
,
'
permissions
.uid
'
:
self
.
uid
},
[
'
permissions.$
'
])
coll
=
self
.
app
.
db
.
collections
.
find_one
({
'
_id
'
:
cid
,
'
permissions
'
:
{
'
$elemMatch
'
:
{
'
uid
'
:
self
.
uid
,
'
site
'
:
self
.
source_site
}}
},
[
'
permissions.$
'
])
if
not
coll
:
if
not
coll
:
self
.
abort
(
403
,
self
.
uid
+
'
does not have permissions on this Collection
'
)
self
.
abort
(
403
,
self
.
uid
+
'
does not have permissions on this Collection
'
)
if
min_role
and
INTEGER_ROLES
[
coll
[
'
permissions
'
][
0
][
'
role
'
]]
<
INTEGER_ROLES
[
min_role
]:
if
min_role
and
INTEGER_ROLES
[
coll
[
'
permissions
'
][
0
][
'
role
'
]]
<
INTEGER_ROLES
[
min_role
]:
...
@@ -213,7 +215,7 @@ class NIMSRequestHandler(webapp2.RequestHandler):
...
@@ -213,7 +215,7 @@ class NIMSRequestHandler(webapp2.RequestHandler):
if
not
experiment
:
if
not
experiment
:
self
.
abort
(
404
,
'
no such Experiment
'
)
self
.
abort
(
404
,
'
no such Experiment
'
)
if
not
self
.
user_is_superuser
:
if
not
self
.
user_is_superuser
:
exp
=
self
.
app
.
db
.
experiments
.
find_one
({
'
_id
'
:
xid
,
'
permissions
.uid
'
:
self
.
uid
},
[
'
permissions.$
'
])
exp
=
self
.
app
.
db
.
experiments
.
find_one
({
'
_id
'
:
xid
,
'
permissions
'
:
{
'
$elemMatch
'
:
{
'
uid
'
:
self
.
uid
,
'
site
'
:
self
.
source_site
}}
},
[
'
permissions.$
'
])
if
not
exp
:
if
not
exp
:
self
.
abort
(
403
,
self
.
uid
+
'
does not have permissions on this Experiment
'
)
self
.
abort
(
403
,
self
.
uid
+
'
does not have permissions on this Experiment
'
)
if
min_role
and
INTEGER_ROLES
[
exp
[
'
permissions
'
][
0
][
'
role
'
]]
<
INTEGER_ROLES
[
min_role
]:
if
min_role
and
INTEGER_ROLES
[
exp
[
'
permissions
'
][
0
][
'
role
'
]]
<
INTEGER_ROLES
[
min_role
]:
...
@@ -232,7 +234,7 @@ class NIMSRequestHandler(webapp2.RequestHandler):
...
@@ -232,7 +234,7 @@ class NIMSRequestHandler(webapp2.RequestHandler):
if
not
session
:
if
not
session
:
self
.
abort
(
404
,
'
no such Session
'
)
self
.
abort
(
404
,
'
no such Session
'
)
if
not
self
.
user_is_superuser
:
if
not
self
.
user_is_superuser
:
experiment
=
self
.
app
.
db
.
experiments
.
find_one
({
'
_id
'
:
session
[
'
experiment
'
],
'
permissions
.uid
'
:
self
.
uid
},
[
'
permissions.$
'
])
experiment
=
self
.
app
.
db
.
experiments
.
find_one
({
'
_id
'
:
session
[
'
experiment
'
],
'
permissions
'
:
{
'
$elemMatch
'
:
{
'
uid
'
:
self
.
uid
,
'
site
'
:
self
.
source_site
}}
},
[
'
permissions.$
'
])
if
not
experiment
:
if
not
experiment
:
if
not
self
.
app
.
db
.
experiments
.
find_one
({
'
_id
'
:
session
[
'
experiment
'
]},
[]):
if
not
self
.
app
.
db
.
experiments
.
find_one
({
'
_id
'
:
session
[
'
experiment
'
]},
[]):
self
.
abort
(
500
)
self
.
abort
(
500
)
...
@@ -250,7 +252,7 @@ class NIMSRequestHandler(webapp2.RequestHandler):
...
@@ -250,7 +252,7 @@ class NIMSRequestHandler(webapp2.RequestHandler):
session
=
self
.
app
.
db
.
sessions
.
find_one
({
'
_id
'
:
epoch
[
'
session
'
]},
[
'
experiment
'
])
session
=
self
.
app
.
db
.
sessions
.
find_one
({
'
_id
'
:
epoch
[
'
session
'
]},
[
'
experiment
'
])
if
not
session
:
if
not
session
:
self
.
abort
(
500
)
self
.
abort
(
500
)
experiment
=
self
.
app
.
db
.
experiments
.
find_one
({
'
_id
'
:
session
[
'
experiment
'
],
'
permissions
.uid
'
:
self
.
uid
},
[
'
permissions.$
'
])
experiment
=
self
.
app
.
db
.
experiments
.
find_one
({
'
_id
'
:
session
[
'
experiment
'
],
'
permissions
'
:
{
'
$elemMatch
'
:
{
'
uid
'
:
self
.
uid
,
'
site
'
:
self
.
source_site
}}
},
[
'
permissions.$
'
])
if
not
experiment
:
if
not
experiment
:
if
not
self
.
app
.
db
.
experiments
.
find_one
({
'
_id
'
:
session
[
'
experiment
'
]},
[]):
if
not
self
.
app
.
db
.
experiments
.
find_one
({
'
_id
'
:
session
[
'
experiment
'
]},
[]):
self
.
abort
(
500
)
self
.
abort
(
500
)
...
...
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