Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
小 白蛋
Nomad
Commits
a8454551
Commit
a8454551
authored
7 years ago
by
Michael Lange
Browse files
Options
Download
Email Patches
Plain Diff
Use /acl/token/self instead of /acl/token/:accessor_id
parent
560dd3f8
Branches unavailable
v1.4.3
v1.4.2
v1.4.1
v1.4.0
v1.4.0-rc.1
v1.4.0-beta.1
v1.3.8
v1.3.7
v1.3.6
v1.3.5
v1.3.4
v1.3.3
v1.3.2
v1.3.1
v1.3.0
v1.3.0-rc.1
v1.3.0-beta.1
v1.2.15
v1.2.14
v1.2.13
v1.2.12
v1.2.11
v1.2.10
v1.2.9
v1.2.8
v1.2.7
v1.2.6
v1.2.5
v1.2.4
v1.2.3
v1.2.2
v1.2.1
v1.2.0
v1.2.0-rc1
v1.2.0-beta1
v1.1.18
v1.1.17
v1.1.16
v1.1.15
v1.1.14
v1.1.13
v1.1.12
v1.1.11
v1.1.10
v1.1.9
v1.1.8
v1.1.7
v1.1.6
v1.1.5
v1.1.4
v1.1.3
v1.1.2
v1.1.1
v1.1.0
v1.1.0-rc1
v1.1.0-beta1
v1.0.18
v1.0.17
v1.0.16
v1.0.15
v1.0.14
v1.0.13
v1.0.12
v1.0.11
v1.0.10
v1.0.9
v1.0.8
v1.0.7
v1.0.6
v1.0.5
v1.0.4
v1.0.3
v1.0.2
v1.0.1
v1.0.0
v1.0.0-rc1
v1.0.0-beta3
v1.0.0-beta2
v0.12.12
v0.12.11
v0.12.10
v0.12.9
v0.12.8
v0.12.7
v0.12.6
v0.12.5
v0.12.4
v0.12.4-rc1
v0.12.3
v0.12.2
v0.12.1
v0.12.0
v0.12.0-rc1
v0.12.0-beta2
v0.12.0-beta1
v0.11.8
v0.11.7
v0.11.6
v0.11.5
v0.11.4
v0.11.3
v0.11.2
v0.11.1
v0.11.0
v0.11.0-rc1
v0.11.0-beta2
v0.11.0-beta1
v0.10.9
v0.10.8
v0.10.7
v0.10.6
v0.10.5
v0.10.4
v0.10.4-rc1
v0.10.3
v0.10.2
v0.10.2-rc1
v0.10.1
v0.10.0
v0.10.0-rc1
v0.10.0-connect1
v0.10.0-beta1
v0.9.7
v0.9.6
v0.9.5
v0.9.4
v0.9.4-rc1
v0.9.3
v0.9.2
v0.9.2-rc1
v0.9.1
v0.9.1-rc1
v0.9.0
v0.9.0-rc2
v0.9.0-rc1
v0.9.0-beta3
v0.9.0-beta2
v0.9.0-beta1
v0.8.7
v0.8.7-rc1
v0.8.6
v0.8.5
v0.8.4
v0.8.4-rc1
v0.8.3
v0.8.2
v0.8.1
v0.8.0
v0.8.0-rc1
v0.7.1
v0.7.1-rc1
v0.7.1-rc1+pro
v0.7.1-rc1+ent
v0.7.0
v0.7.0+pro
v0.7.0+ent
v0.7.0-rc3
v0.7.0-rc2
v0.7.0-rc1
nightly
No related merge requests found
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
ui/app/adapters/token.js
+16
-0
ui/app/adapters/token.js
ui/app/controllers/settings/tokens.js
+22
-23
ui/app/controllers/settings/tokens.js
ui/app/serializers/token.js
+0
-1
ui/app/serializers/token.js
ui/app/services/token.js
+0
-14
ui/app/services/token.js
ui/app/templates/settings/tokens.hbs
+1
-8
ui/app/templates/settings/tokens.hbs
ui/mirage/config.js
+13
-0
ui/mirage/config.js
ui/tests/acceptance/token-test.js
+5
-16
ui/tests/acceptance/token-test.js
with
57 additions
and
62 deletions
+57
-62
ui/app/adapters/token.js
+
16
-
0
View file @
a8454551
import
Ember
from
'
ember
'
;
import
{
default
as
ApplicationAdapter
,
namespace
}
from
'
./application
'
;
const
{
inject
}
=
Ember
;
export
default
ApplicationAdapter
.
extend
({
store
:
inject
.
service
(),
namespace
:
namespace
+
'
/acl
'
,
findSelf
()
{
return
this
.
ajax
(
`
${
this
.
buildURL
()}
/token/self`
).
then
(
token
=>
{
const
store
=
this
.
get
(
'
store
'
);
store
.
pushPayload
(
'
token
'
,
{
tokens
:
[
token
],
});
return
store
.
peekRecord
(
'
token
'
,
store
.
normalize
(
'
token
'
,
token
).
data
.
id
);
});
},
});
This diff is collapsed.
Click to expand it.
ui/app/controllers/settings/tokens.js
+
22
-
23
View file @
a8454551
import
Ember
from
'
ember
'
;
const
{
Controller
,
inject
,
computed
}
=
Ember
;
const
{
Controller
,
inject
,
computed
,
getOwner
}
=
Ember
;
export
default
Controller
.
extend
({
token
:
inject
.
service
(),
tokenRecord
:
null
,
secret
:
computed
.
reads
(
'
token.secret
'
),
accessor
:
computed
.
reads
(
'
token.accessor
'
),
tokenIsValid
:
false
,
tokenIsInvalid
:
false
,
...
...
@@ -21,33 +20,33 @@ export default Controller.extend({
this
.
setProperties
({
tokenIsValid
:
false
,
tokenIsInvalid
:
false
,
tokenRecord
:
null
,
});
},
verifyToken
()
{
const
{
secret
,
accessor
}
=
this
.
getProperties
(
'
secret
'
,
'
accessor
'
);
const
{
secret
}
=
this
.
getProperties
(
'
secret
'
,
'
accessor
'
);
const
TokenAdapter
=
getOwner
(
this
).
lookup
(
'
adapter:token
'
);
this
.
set
(
'
token.secret
'
,
secret
);
this
.
get
(
'
store
'
)
.
findRecord
(
'
token
'
,
accessor
)
.
then
(
token
=>
{
this
.
set
(
'
token.accessor
'
,
accessor
);
this
.
setProperties
({
tokenIsValid
:
true
,
tokenIsInvalid
:
false
,
tokenRecord
:
token
,
});
},
()
=>
{
this
.
set
(
'
token.secret
'
,
null
);
this
.
setProperties
({
tokenIsInvalid
:
true
,
tokenIsValid
:
false
,
tokenRecord
:
null
,
});
}
);
TokenAdapter
.
findSelf
().
then
(
token
=>
{
this
.
setProperties
({
tokenIsValid
:
true
,
tokenIsInvalid
:
false
,
tokenRecord
:
token
,
});
},
()
=>
{
this
.
set
(
'
token.secret
'
,
null
);
this
.
setProperties
({
tokenIsInvalid
:
true
,
tokenIsValid
:
false
,
tokenRecord
:
null
,
});
}
);
},
},
});
This diff is collapsed.
Click to expand it.
ui/app/serializers/token.js
+
0
-
1
View file @
a8454551
...
...
@@ -7,7 +7,6 @@ export default ApplicationSerializer.extend({
primaryKey
:
'
AccessorID
'
,
attrs
:
{
taskGroupName
:
'
TaskGroup
'
,
secret
:
'
SecretID
'
,
},
...
...
This diff is collapsed.
Click to expand it.
ui/app/services/token.js
+
0
-
14
View file @
a8454551
...
...
@@ -4,20 +4,6 @@ import fetch from 'fetch';
const
{
Service
,
computed
,
assign
}
=
Ember
;
export
default
Service
.
extend
({
accessor
:
computed
({
get
()
{
return
window
.
sessionStorage
.
nomadTokenAccessor
;
},
set
(
key
,
value
)
{
if
(
value
==
null
)
{
window
.
sessionStorage
.
removeItem
(
'
nomadTokenAccessor
'
);
}
else
{
window
.
sessionStorage
.
nomadTokenAccessor
=
value
;
}
return
value
;
},
}),
secret
:
computed
({
get
()
{
return
window
.
sessionStorage
.
nomadTokenSecret
;
...
...
This diff is collapsed.
Click to expand it.
ui/app/templates/settings/tokens.hbs
+
1
-
8
View file @
a8454551
...
...
@@ -25,13 +25,6 @@
<p
class=
"help"
>
Sent with every request to determine authorization
</p>
</div>
<div
class=
"field"
>
<label
class=
"label"
>
Accessor ID
</label>
<div
class=
"control"
>
<input
class=
"input token-accessor"
type=
"text"
placeholder=
"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
value=
{{
token
.
accessor
}}
oninput=
{{
action
(
mut
accessor
)
value
=
"target.value"
}}
>
</div>
<p
class=
"help"
>
Used to look up authorized policies
</p>
</div>
<p
class=
"content"
><button
class=
"button is-primary token-submit"
{{
action
"verifyToken"
}}
>
Set Token
</button></p>
{{/if}}
...
...
@@ -51,7 +44,7 @@
<div
class=
"columns"
>
<div
class=
"column"
>
<h3
class=
"title is-4"
>
Token Failed to Authenticate
</h3>
<p>
The token secret
and accessor
you have provided do not match.
</p>
<p>
The token secret you have provided do
es
not match
an existing token
.
</p>
</div>
</div>
</div>
...
...
This diff is collapsed.
Click to expand it.
ui/mirage/config.js
+
13
-
0
View file @
a8454551
...
...
@@ -89,6 +89,19 @@ export default function() {
return
JSON
.
stringify
(
findLeader
(
schema
));
});
this
.
get
(
'
/acl/token/self
'
,
function
({
tokens
},
req
)
{
const
secret
=
req
.
requestHeaders
[
'
X-Nomad-Token
'
];
const
tokenForSecret
=
tokens
.
findBy
({
secretId
:
secret
});
// Return the token if it exists
if
(
tokenForSecret
)
{
return
this
.
serialize
(
tokenForSecret
);
}
// Client error if it doesn't
return
new
Response
(
400
,
{},
null
);
});
this
.
get
(
'
/acl/token/:id
'
,
function
({
tokens
},
req
)
{
const
token
=
tokens
.
find
(
req
.
params
.
id
);
const
secret
=
req
.
requestHeaders
[
'
X-Nomad-Token
'
];
...
...
This diff is collapsed.
Click to expand it.
ui/tests/acceptance/token-test.js
+
5
-
16
View file @
a8454551
...
...
@@ -21,27 +21,24 @@ moduleForAcceptance('Acceptance | tokens', {
});
test
(
'
the token form sets the token in session storage
'
,
function
(
assert
)
{
const
{
secretId
,
accessorId
}
=
managementToken
;
const
{
secretId
}
=
managementToken
;
visit
(
'
/settings/tokens
'
);
andThen
(()
=>
{
assert
.
ok
(
window
.
sessionStorage
.
nomadTokenSecret
==
null
,
'
No token secret set
'
);
assert
.
ok
(
window
.
sessionStorage
.
nomadTokenAccessor
==
null
,
'
No token accessor set
'
);
fillIn
(
'
.token-secret
'
,
secretId
);
fillIn
(
'
.token-accessor
'
,
accessorId
);
click
(
'
.token-submit
'
);
andThen
(()
=>
{
assert
.
equal
(
window
.
sessionStorage
.
nomadTokenSecret
,
secretId
,
'
Token secret was set
'
);
assert
.
equal
(
window
.
sessionStorage
.
nomadTokenAccessor
,
accessorId
,
'
Token accessor was set
'
);
});
});
});
test
(
'
the X-Nomad-Token header gets sent with requests once it is set
'
,
function
(
assert
)
{
const
{
secretId
,
accessorId
}
=
managementToken
;
const
{
secretId
}
=
managementToken
;
let
requestPosition
=
0
;
visit
(
`/jobs/
${
job
.
id
}
`
);
...
...
@@ -60,7 +57,6 @@ test('the X-Nomad-Token header gets sent with requests once it is set', function
visit
(
'
/settings/tokens
'
);
andThen
(()
=>
{
fillIn
(
'
.token-secret
'
,
secretId
);
fillIn
(
'
.token-accessor
'
,
accessorId
);
click
(
'
.token-submit
'
);
});
...
...
@@ -78,7 +74,7 @@ test('the X-Nomad-Token header gets sent with requests once it is set', function
});
test
(
'
an error message is shown when authenticating a token fails
'
,
function
(
assert
)
{
const
{
secretId
,
accessorId
}
=
managementToken
;
const
{
secretId
}
=
managementToken
;
const
bogusSecret
=
'
this-is-not-the-secret
'
;
assert
.
notEqual
(
secretId
,
...
...
@@ -90,7 +86,6 @@ test('an error message is shown when authenticating a token fails', function(ass
andThen
(()
=>
{
fillIn
(
'
.token-secret
'
,
bogusSecret
);
fillIn
(
'
.token-accessor
'
,
accessorId
);
click
(
'
.token-submit
'
);
andThen
(()
=>
{
...
...
@@ -98,10 +93,6 @@ test('an error message is shown when authenticating a token fails', function(ass
window
.
sessionStorage
.
nomadTokenSecret
==
null
,
'
Token secret is discarded on failure
'
);
assert
.
ok
(
window
.
sessionStorage
.
nomadTokenAccessor
==
null
,
'
Token accessor is discarded on failure
'
);
assert
.
ok
(
find
(
'
.token-error
'
),
'
Token error message is shown
'
);
assert
.
notOk
(
find
(
'
.token-success
'
),
'
Token success message is not shown
'
);
assert
.
notOk
(
find
(
'
.token-policy
'
),
'
No token policies are shown
'
);
...
...
@@ -112,13 +103,12 @@ test('an error message is shown when authenticating a token fails', function(ass
test
(
'
a success message and a special management token message are shown when authenticating succeeds
'
,
function
(
assert
)
{
const
{
secretId
,
accessorId
}
=
managementToken
;
const
{
secretId
}
=
managementToken
;
visit
(
'
/settings/tokens
'
);
andThen
(()
=>
{
fillIn
(
'
.token-secret
'
,
secretId
);
fillIn
(
'
.token-accessor
'
,
accessorId
);
click
(
'
.token-submit
'
);
andThen
(()
=>
{
...
...
@@ -133,7 +123,7 @@ test('a success message and a special management token message are shown when au
test
(
'
a success message and associated policies are shown when authenticating succeeds
'
,
function
(
assert
)
{
const
{
secretId
,
accessorId
}
=
clientToken
;
const
{
secretId
}
=
clientToken
;
const
policy
=
clientToken
.
policies
.
models
[
0
];
policy
.
update
(
'
description
'
,
'
Make sure there is a description
'
);
...
...
@@ -141,7 +131,6 @@ test('a success message and associated policies are shown when authenticating su
andThen
(()
=>
{
fillIn
(
'
.token-secret
'
,
secretId
);
fillIn
(
'
.token-accessor
'
,
accessorId
);
click
(
'
.token-submit
'
);
andThen
(()
=>
{
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
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
Menu
Projects
Groups
Snippets
Help