116 Commits

Author SHA1 Message Date
Rohit Yadav
4347776ac6 CLOUDSTACK-8562: DB-Backed Dynamic Role Based API Access Checker
This feature allows root administrators to define new roles and associate API
permissions to them.

A limited form of role-based access control for the CloudStack management server
API is provided through a properties file, commands.properties, embedded in the
WAR distribution. Therefore, customizing API permissions requires unpacking the
distribution and modifying this file consistently on all servers. The old system
also does not permit the specification of additional roles.

FS:
https://cwiki.apache.org/confluence/display/CLOUDSTACK/Dynamic+Role+Based+API+Access+Checker+for+CloudStack

DB-Backed Dynamic Role Based API Access Checker for CloudStack brings following
changes, features and use-cases:
- Moves the API access definitions from commands.properties to the mgmt server DB
- Allows defining custom roles (such as a read-only ROOT admin) beyond the
  current set of four (4) roles
- All roles will resolve to one of the four known roles types (Admin, Resource
  Admin, Domain Admin and User) which maintains this association by requiring
  all new defined roles to specify a role type.
- Allows changes to roles and API permissions per role at runtime including additions or
  removal of roles and/or modifications of permissions, without the need
  of restarting management server(s)

Upgrade/installation notes:
- The feature will be enabled by default for new installations, existing
  deployments will continue to use the older static role based api access checker
  with an option to enable this feature
- During fresh installation or upgrade, the upgrade paths will add four default
  roles based on the four default role types
- For ease of migration, at the time of upgrade commands.properties will be used
  to add existing set of permissions to the default roles. cloud.account
  will have a new role_id column which will be populated based on default roles
  as well

Dynamic-roles migration tool: scripts/util/migrate-dynamicroles.py
- Allows admins to migrate to the dynamic role based checker at a future date
- Performs a harder one-way migrate and update
- Migrates rules from existing commands.properties file into db and deprecates it
- Enables an internal hidden switch to enable dynamic role based checker feature

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2016-05-11 09:45:19 +05:30
Rohit Yadav
5ab82d10d9 Merge pull request #1288 from DaanHoogland/trailing-commas
trailing commas in javascripts removedAccording to SonarQube this is a bug on internet explorer. It is the only 'blocker' level issue in cloudstack. @abhinandanprateek (@agneya2001) @bhaisaab @miguelaferreira should we enforce this or, as alternative, have it disabled in SonarQube?

* pr/1288:
  trailing commas in javascripts removed

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2016-01-27 16:28:29 +01:00
Nitin Kumar Maharana
1c01b4ed8c CLOUDSTACK-9230: Remove unnecessary return statement from cloudStack.js
Removed the unnecessary return statement.
The statement is never reached.
2016-01-13 16:00:20 +05:30
Daan Hoogland
28ca93369d trailing commas in javascripts removed 2015-12-27 12:34:58 +01:00
Remi Bergsma
8afda59ff3 Merge pull request #1069 from DaanHoogland/trailing-commas
javascript:TrailingComma sonacube issue considered blocker removedsimple change in several locations

* pr/1069:
  javascript:TrailingComma sonacube issue considered blocker removed

Signed-off-by: Remi Bergsma <github@remi.nl>
2015-11-23 13:07:09 +01:00
Rohit Yadav
4830334e79 CLOUDSTACK-9020: Make UI pagesize configurable
Add global setting that can be consumed by UI to make its pagesize for list API
calls dynamic with default to 100.

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2015-11-19 15:17:44 +05:30
Daan Hoogland
9a23229d94 javascript:TrailingComma sonacube issue considered blocker removed 2015-11-17 10:19:33 +01:00
Boris Schrijver
655fcc924f Made interface changes related to CLOUDSTACK-8580
Added responses to ListCapabilities to reflect CLOUDSTACK-8580 changes.

This to add these options to the gui. See issue CLOUDSTACK-8580.

3be14e978a

Removed comments as proposed by Daan Hoogland.
2015-08-14 11:13:21 +02:00
Kevin Dierkx
2bdbaf453e Removed trailing whitespace from ui/scripts/*.js 2015-08-07 11:25:15 +02:00
Rohit Yadav
42940a8828 CLOUDSTACK-8622: Reinstate working sessions in browser
- Login is based on sessionkey HttpOnly Cookie
- ApiServlet does login verification using sessionKey from both the request cookies
  and the API parameters. In both cases, if either or both are passed they should
  match the sessionKey stored in the current session of the HttpRequest
- UI: it no longer needs to read or set sessionkey cookie
- UI: it no longer needs to return g_sessionKey value in the API requests, though
  to support a sso mechanism g_sessionKey is still passed in the API is not null
- Secure jsessionid cookie is set to be HttpOnly and Secure
- SAML login should also set HttpOnly cookie before redirecting to UI
- SAML: listIdps & getSPMetadata APIs are readonly now, won't log out a logged in user

Performed tests (login, saml login if applicable, page refreshes, opening
multiple tabs, logout) with following combinations:
- SAML disabled, normal auth as admin, domain-admin and user
- SAML enabled, normal auth as admin, domain-admin and user; and saml sso as
  admin, domain-admin and user

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>

This closes #574
This closes #308
2015-07-10 17:25:07 +05:30
Rohit Yadav
7c206c30a5 CLOUDSTACK-8621: Allow UI plugins to be shown on navigation bar
Introduces a boolean option in UI plugins setting it to 'true' would display
the UI plugin on the left navigation bar.

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>

This closes #563
2015-07-09 15:25:13 +05:30
Rohit Yadav
107595a6a5 CLOUDSTACK-8457: SAML auth plugin improvements for production usage
* Move config options to SAML plugin
  This moves all configuration options from Config.java to SAML auth manager. This
  allows us to use the config framework.
* Make SAML2UserAuthenticator validate SAML token in httprequest
* Make logout API use ConfigKeys defined in saml auth manager
* Before doing SAML auth, cleanup local states and cookies
* Fix configurations in 4.5.1 to 4.5.2 upgrade path
* Fail if idp has no sso URL defined
* Add a default set of SAML SP cert for testing purposes
  Now to enable and use saml, one needs to do a deploydb-saml after doing a deploydb
* UI remembers login selections, IDP server

- CLOUDSTACK-8458:
    * On UI show dropdown list of discovered IdPs
    * Support SAML Federation, where there may be more than one IdP
        - New datastructure to hold metadata of SP or IdP
        - Recursive processing of IdP metadata
        - Fix login/logout APIs to get new interface and metadata data structure
        - Add org/contact information to metadata
        - Add new API: listIdps that returns list of all discovered IdPs
        - Refactor and cleanup code and tests

- CLOUDSTACK-8459:
    * Add HTTP-POST binding to SP metadata
    * Authn requests must use either HTTP POST/Artifact binding

- CLOUDSTACK-8461:
    * Use unspecified x509 cert as a fallback encryption/signing key
      In case a IDP's metadata does not clearly say if their certificates need to be
      used as signing or encryption and we don't find that, fallback to use the
      unspecified key itself.

- CLOUDSTACK-8462:
    * SAML Auth plugin should not do authorization
      This removes logic to create user if they don't exist. This strictly now
      assumes that users have been already created/imported/authorized by admins.
      As per SAML v2.0 spec section 4.1.2, the SP provider should create authn requests using
      either HTTP POST or HTTP Artifact binding to transfer the message through a
      user agent (browser in our case). The use of HTTP Redirect was one of the reasons
      why this plugin failed to work for some IdP servers that enforce this.
    * Add new User Source
      By reusing the source field, we can find if a user has been SAML enabled or not.
      The limitation is that, once say a user is imported by LDAP and then SAML
      enabled - they won't be able to use LDAP for authentication
    * UI should allow users to pass in domain they want to log into, though it is
      optional and needed only when a user has accounts across domains with same
      username and authorized IDP server
    * SAML users need to be authorized before they can authenticate
        - New column entity to track saml entity id for a user
        - Reusing source column to check if user is saml enabled or not
        - Add new source types, saml2 and saml2disabled
        - New table saml_token to solve the issue of multiple users across domains and
          to enforce security by tracking authn token and checking the samlresponse for
          the tokens
        - Implement API: authorizeSamlSso to enable/disable saml authentication for a
          user
        - Stubs to implement saml token flushing/expiry

- CLOUDSTACK-8463:
    * Use username attribute specified in global setting
      Use username attribute defined by admin from a global setting
      In case of encrypted assertion/attributes:
      - Decrypt them
      - Check signature if provided to check authenticity of message using IdP's
        public key and SP's private key
      - Loop through attributes to find the username

- CLOUDSTACK-8538:
    * Add new global config for SAML request sig algorithm

- CLOUDSTACK-8539:
    * Add metadata refresh timer task and token expiring
        - Fix domain path and save it to saml_tokens
        - Expire hour old saml tokens
        - Refresh metadata based on timer task
        - Fix unit tests

This closes #489

(cherry picked from commit 20ce346f3acb794b08a51841bab2188d426bf7dc)
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>

Conflicts:
	client/WEB-INF/classes/resources/messages_hu.properties
	plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixCheckHealthCommandWrapper.java
	plugins/user-authenticators/saml2/src/org/apache/cloudstack/api/command/SAML2LoginAPIAuthenticatorCmd.java
	ui/scripts/ui-custom/login.js
2015-06-29 12:31:51 +02:00
Rohit Yadav
6c71d3bae1 ui: if session cookie exists, use it to set global session holder and invalidate it
The 19e3c0168e744a76b5e1dc24a5eafa776d342404 commit breaks SAML login and any
login where redirection is used.

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
(cherry picked from commit b79f13ccb54c6afc48c42bc94c61621dc6cac32d)
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2015-03-13 15:02:27 +05:30
Jessica Wang
a308f37232 CS-18149: UI - no longer store sessionKey in cookie. After
... this change, opening the 2nd browser window (of the same
domain) will show login screen (i.e. user has to enter
credentials again) and will cause the 1st browser window
session timeout.

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
(cherry picked from commit 19e3c0168e744a76b5e1dc24a5eafa776d342404)
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2015-03-13 15:02:27 +05:30
Rohit Yadav
552f2ae60c CLOUDSTACK-8191: SAML users should have their own accounts
(cherry picked from commit 876c78fe1ba6abe132131b3449b21fd09f2c14e1)
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2015-02-02 19:58:10 +05:30
Wei Zhou
af2f21894c CLOUDSTACK-7983: Create Disk/Service Offering for Domain Admin 2014-12-01 13:03:37 +01:00
Brian Federle
68745ae9b1 CLOUDSTACK-7645: UI: Fix method for extending dictionary
Instead of mapping both dictionary JSP files to separate objects, extend
dictionary2's object onto single 'dictionary' object.

-- The previous approach was causing issues on certain dialogs, which were not
opening due to possible missing labels.
2014-11-12 09:57:42 -08:00
Mihaela Stoica
901c243ed1 CLOUDSTACK-7645: [UI] Fixed incorrect label issues caused the dictionary split
In some cases the UI does not display the correct text, displaying 'label.xyz' instead of the localized string.
This appears to be due to the dictionary split: entries in dictionary2.jsp are not found because the dictionary has not been extended with dictionary2 as expected.

In this fix:
- Instead of extending the dictionary, we leave it as it is and change the localization function to look in the dictionary first and, if the item is not found there, then look in dictionary2.
- This way we are not depending on the extent() function to be called at the 'right' time; In turn, the localization function will be aware of both dictionaries.
- In the future, when we add another dictionary, we will have to modify this function only.
2014-11-11 11:22:35 -08:00
Jessica Wang
8d3a9b760d CLOUDSTACK-7809: UI > remove usage of g_mySession which is unnecessary. 2014-10-29 11:17:18 -07:00
Jessica Wang
bde0c3cfc1 CLOUDSTACK-7809: UI > remove unnecessary cookie 'timezoneoffset'. 2014-10-28 16:37:46 -07:00
Jessica Wang
4d06eef3b5 CLOUDSTACK-7809: UI > remove unnecessary cookie 'networktype'. 2014-10-28 15:30:57 -07:00
Jessica Wang
6e8a08308b CLOUDSTACK-7809: UI > remove unnecessary cookie 'capabilities', 'supportELB', 'kvmsnapshotenabled', 'regionsecondaryenabled', 'userpublictemplateenabled', 'userProjectsEnabled'. 2014-10-28 15:03:44 -07:00
Jessica Wang
53d5e8af18 CLOUDSTACK-7668: UI > When UI is loaded the first time, sometimes a blank screen instead of a login screen shows. Only after clicking Refresh button(i.e. loaded again) will the login screen show. 2014-10-02 14:43:22 -07:00
vetrivelc
6a11d099cf Fix Externalization of hard-coded label strings
-Split 'dictionary.jsp' into two files -> 'dictionary.jsp' and
'dictionary2.jsp' -- this is due to JSP file constraints as the
localization object is getting quite long

-Per change above, 'dictionary' object is now split into an additonal
'dictionary2' object, which is merged with the main dict object on page
load

-All new dictionary mappings should be added to 'dictionary2' now.

Signed-off-by: Brian Federle <brian.federle@citrix.com>
2014-09-17 13:59:13 -07:00
Rohit Yadav
e6ec51e12a ui: refactor and use a unified unboxing helping method in cloudStack.js
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2014-08-28 19:45:22 +02:00
Rohit Yadav
a364054db6 Minor fixes
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2014-08-28 19:45:21 +02:00
Rohit Yadav
9b1a6dac4a ui: Unbox extra quotes from sessionKey cookie value
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2014-08-28 19:45:21 +02:00
Mihaela Stoica
f212aa57c3 CLOUDSTACK-7293: UI: Fixed localization issues on the login page
- Reverted the validator.messages to the original values (jquery.validator.js).
- Added a function to localize validator.messages which is called before login.

Signed-off-by: Brian Federle <brian.federle@citrix.com>
2014-08-15 10:51:28 -07:00
Jessica Wang
3acebf230c CLOUDSTACK-6852: UI - modules - remove variable drModuleIncluded. 2014-06-13 15:21:16 -07:00
Jessica Wang
a8a853e322 CLOUDSTACK-6852: UI - modules - add global variable drModuleIncluded. 2014-06-06 13:29:53 -07:00
Brian Federle
4dad376f98 UI: Make sure notification box is removed on session expire 2014-02-27 13:26:32 -08:00
Brian Federle
63c22a1508 Session expire: show overlay on dialog to prevent clicking in UI 2014-02-13 15:06:09 -08:00
Jessica Wang
1db19c3d52 CLOUDSTACK-4428: KVMsnapshoteanbled property in listCapabilities API response has been renamed. Here is corresponding UI change. 2013-12-09 15:21:47 -08:00
Jessica Wang
fd47059436 CLOUDSTACK-3950: UI > remove global variable havingS3, havingSwift who are no longer in use. 2013-08-20 16:04:40 -07:00
Jessica Wang
4bee74464f CLOUDSTACK-3950: UI > template/ISO page > registerTemplate/registerISO action > zone dropdown > include only one option "All Zones" when secondary storage is region-wide. 2013-08-20 14:25:13 -07:00
Jessica Wang
aa223e5786 CLOUDSTACK-4308: UI > volume page > if hypervisor is KVM, show/hide takeSnapshot, recurringSnapshot action upon KVMsnapshotenabled property returned by listCapabilities API. 2013-08-15 10:27:44 -07:00
Ian Duffy
ad69bc8da3 Format JS 2013-07-18 12:34:20 -04:00
Brian Federle
37ba08a8ea UI: Fix localization fn override
If localization function is specified in another plugin, do not use the
default
2013-07-10 11:18:27 -07:00
Brian Federle
7ce0bd69a8 UI plugin framework: Fix load order
Fixes potential issue where plugins could load after cloudStack UI is initialized,
preventing their functionality from showing up.

Now, the main UI is only loaded after all plugins have loaded; this is via
'cloudStack.pluginReady' event.
2013-07-10 11:18:27 -07:00
Jessica Wang
40678a27da CLOUDSTACK UI - remove obsolete code (window.name is no longer used). 2013-07-09 15:25:40 -07:00
Brian Federle
bd1ddee557 UI: Localize app name and 'about' window 2013-07-02 11:59:20 -07:00
Alex Huang
3047929367 Merged 2013-05-10 16:21:43 -07:00
Jessica Wang
e0fa8e1e93 CLOUDSTACK-2351: object store - UI - cloudstack.js - replace listS3s, listSwiftsAPI with new API listImageStores. 2013-05-07 12:04:07 -07:00
Brian Federle
7b011e7ef4 Merge branch 'master' into ui-vm-affinity
Conflicts:
	client/WEB-INF/classes/resources/messages.properties
	ui/scripts/cloudStack.js
	ui/scripts/instanceWizard.js
2013-04-22 13:45:29 -07:00
Jessica Wang
8b8a2f218c CLOUDSTACK-1910: cloudstack UI - make Regions menu visible to regular-user/domain-admin. 2013-04-16 13:15:31 -07:00
Brian Federle
5d235f690d Add new 'affinity' UI section for managing affinity groups 2013-04-15 14:56:44 -07:00
Jessica Wang
5f8a278196 CLOUDSTACK-1065: cloudstack UI - AWS Style Regions - make loginCmdText local. 2013-04-11 13:39:04 -07:00
Jessica Wang
7de2b4b30a CLOUDSTACK-1957: cloudstack UI - fix a JS error "'logout' is undefined" which sometimes shows on login screen. 2013-04-07 11:40:46 -07:00
Jessica Wang
ebcdef55b0 CLOUDSTACK-1065: cloudstack UI - AWS Style Regions - shorten value of g_loginCmdText 2013-04-07 09:00:17 -07:00
Jessica Wang
b1ef74737a CLOUDSTACK-1065: cloudstack UI - AWS Style Regions - when switching region, set location without parameters. 2013-04-07 00:14:18 -07:00