This is an automated email from the ASF dual-hosted git repository.
mitchell852 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git
The following commit(s) were added to refs/heads/master by this push:
new 2ccfa3e Deprecate users/{userId}/deliveryServices (#4528)
2ccfa3e is described below
commit 2ccfa3e09977ec4466d0187347a7d2a6c42dc59a
Author: Steve Hamrick <[email protected]>
AuthorDate: Fri Mar 27 13:11:51 2020 -0600
Deprecate users/{userId}/deliveryServices (#4528)
* Deprecate users/{userId}/deliveryservices
* Add another test
* Forgot changelog
* Remove page and fix tests
* removes unused user delivery services table
* Goto the clicked user instead
Co-authored-by: Jeremy Mitchell <[email protected]>
---
CHANGELOG.md | 1 +
docs/source/api/v1/users_id_deliveryservices.rst | 8 +-
docs/source/api/v2/deliveryservices.rst | 56 +++---
docs/source/api/v2/users_id_deliveryservices.rst | 213 ---------------------
traffic_ops/client/deliveryservice.go | 8 +
traffic_ops/client/dsuser.go | 11 --
.../testing/api/v2/deliveryservices_test.go | 58 ++++++
.../deliveryservice/deliveryservices.go | 15 ++
traffic_ops/traffic_ops_golang/routing/routes.go | 1 -
.../traffic_ops_golang/user/deliveryservices.go | 10 +-
traffic_portal/app/src/app.js | 2 -
.../common/modules/form/user/FormUserController.js | 2 +-
.../TableUserDeliveryServicesController.js | 55 ------
.../modules/table/userDeliveryServices/index.js | 21 --
.../table.userDeliveryServices.tpl.html | 171 -----------------
.../private/tenants/deliveryServices/index.js | 2 +-
.../private/users/deliveryServices/index.js | 42 ----
17 files changed, 126 insertions(+), 550 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 554a07f..44113e4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -114,6 +114,7 @@ The format is based on [Keep a
Changelog](http://keepachangelog.com/en/1.0.0/).
- /types/trimmed
- /types/{{ID}} (GET)
- /user/current/jobs
+ - /users/:id/deliveryservices
- /servers/checks
- /user/{{user ID}}/deliveryservices/available
diff --git a/docs/source/api/v1/users_id_deliveryservices.rst
b/docs/source/api/v1/users_id_deliveryservices.rst
index ce37e04..847f73e 100644
--- a/docs/source/api/v1/users_id_deliveryservices.rst
+++ b/docs/source/api/v1/users_id_deliveryservices.rst
@@ -20,6 +20,9 @@
*********************************
.. caution:: This endpoint has several issues related to tenancy and newer
:term:`Delivery Service` fields. For these and other reasons, the assigning of
:term:`Delivery Services` to users is strongly discouraged.
+.. deprecated:: ATCv4
+ Use the ``GET`` method of :ref:`to-api-deliveryservices` with the
`accessibleTo` parameter instead.
+
``GET``
=======
Retrieves all :term:`Delivery Services` assigned to the user.
@@ -173,7 +176,10 @@ Response Structure
Date: Mon, 10 Jun 2019 16:50:25 GMT
Content-Length: 1348
- {"response": [{
+ {"alerts": [{
+ "text": "This endpoint is deprecated, please use GET
deliveryservices?accessibleTo={{tenantId}} instead",
+ "level": "warning"
+ }], "response": [{
"active": true,
"anonymousBlockingEnabled": false,
"cacheurl": null,
diff --git a/docs/source/api/v2/deliveryservices.rst
b/docs/source/api/v2/deliveryservices.rst
index bea2667..b5e4f77 100644
--- a/docs/source/api/v2/deliveryservices.rst
+++ b/docs/source/api/v2/deliveryservices.rst
@@ -31,33 +31,35 @@ Request Structure
-----------------
.. table:: Request Query Parameters
-
+-------------+----------+--------------------------------------------------------------------------------------------------------------------------------------+
- | Name | Required | Description
|
-
+=============+==========+======================================================================================================================================+
- | cdn | no | Show only the :term:`Delivery Services`
belonging to the :ref:`ds-cdn` identified by this integral, unique identifier
|
-
+-------------+----------+--------------------------------------------------------------------------------------------------------------------------------------+
- | id | no | Show only the :term:`Delivery Service` that
has this integral, unique identifier
|
-
+-------------+----------+--------------------------------------------------------------------------------------------------------------------------------------+
- | logsEnabled | no | Show only the :term:`Delivery Services` that
have :ref:`ds-logs-enabled` set or not based on this boolean
|
-
+-------------+----------+--------------------------------------------------------------------------------------------------------------------------------------+
- | profile | no | Return only :term:`Delivery Services` using
the :term:`Profile` that has this :ref:`profile-id`
|
-
+-------------+----------+--------------------------------------------------------------------------------------------------------------------------------------+
- | tenant | no | Show only the :term:`Delivery Services`
belonging to the :term:`Tenant` identified by this integral, unique identifier
|
-
+-------------+----------+--------------------------------------------------------------------------------------------------------------------------------------+
- | type | no | Return only :term:`Delivery Services` of the
:term:`Delivery Service` :ref:`ds-types` identified by this integral, unique
identifier |
-
+-------------+----------+--------------------------------------------------------------------------------------------------------------------------------------+
- | orderby | no | Choose the ordering of the results - must be
the name of one of the fields of the objects in the ``response``
|
- | | | array
|
-
+-------------+----------+--------------------------------------------------------------------------------------------------------------------------------------+
- | sortOrder | no | Changes the order of sorting. Either
ascending (default or "asc") or descending ("desc")
|
-
+-------------+----------+--------------------------------------------------------------------------------------------------------------------------------------+
- | limit | no | Choose the maximum number of results to
return
|
-
+-------------+----------+--------------------------------------------------------------------------------------------------------------------------------------+
- | offset | no | The number of results to skip before
beginning to return results. Must use in conjunction with limit
|
-
+-------------+----------+--------------------------------------------------------------------------------------------------------------------------------------+
- | page | no | Return the n\ :sup:`th` page of results,
where "n" is the value of this parameter, pages are ``limit`` long and the
first page is 1. |
- | | | If ``offset`` was defined, this query
parameter has no effect. ``limit`` must be defined to make use of ``page``.
|
-
+-------------+----------+--------------------------------------------------------------------------------------------------------------------------------------+
+
+--------------+----------+-----------------------------------------------------------------------------------------------------------------------------------------+
+ | Name | Required | Description
|
+
+==============+==========+=========================================================================================================================================+
+ | cdn | no | Show only the :term:`Delivery Services`
belonging to the :ref:`ds-cdn` identified by this integral, unique identifier
|
+
+--------------+----------+-----------------------------------------------------------------------------------------------------------------------------------------+
+ | id | no | Show only the :term:`Delivery Service` that
has this integral, unique identifier
|
+
+--------------+----------+-----------------------------------------------------------------------------------------------------------------------------------------+
+ | logsEnabled | no | Show only the :term:`Delivery Services`
that have :ref:`ds-logs-enabled` set or not based on this boolean
|
+
+--------------+----------+-----------------------------------------------------------------------------------------------------------------------------------------+
+ | profile | no | Return only :term:`Delivery Services` using
the :term:`Profile` that has this :ref:`profile-id`
|
+
+--------------+----------+-----------------------------------------------------------------------------------------------------------------------------------------+
+ | tenant | no | Show only the :term:`Delivery Services`
belonging to the :term:`Tenant` identified by this integral, unique identifier
|
+
+--------------+----------+-----------------------------------------------------------------------------------------------------------------------------------------+
+ | type | no | Return only :term:`Delivery Services` of
the :term:`Delivery Service` :ref:`ds-types` identified by this integral,
unique identifier |
+
+--------------+----------+-----------------------------------------------------------------------------------------------------------------------------------------+
+ | accessibleTo | no | Return the :term:`Delivery Services`
accessible from a :term:`Tenant` *or it's children* identified by this
integral, unique identifier |
+
+--------------+----------+-----------------------------------------------------------------------------------------------------------------------------------------+
+ | orderby | no | Choose the ordering of the results - must
be the name of one of the fields of the objects in the ``response``
|
+ | | | array
|
+
+--------------+----------+-----------------------------------------------------------------------------------------------------------------------------------------+
+ | sortOrder | no | Changes the order of sorting. Either
ascending (default or "asc") or descending ("desc")
|
+
+--------------+----------+-----------------------------------------------------------------------------------------------------------------------------------------+
+ | limit | no | Choose the maximum number of results to
return
|
+
+--------------+----------+-----------------------------------------------------------------------------------------------------------------------------------------+
+ | offset | no | The number of results to skip before
beginning to return results. Must use in conjunction with limit
|
+
+--------------+----------+-----------------------------------------------------------------------------------------------------------------------------------------+
+ | page | no | Return the n\ :sup:`th` page of results,
where "n" is the value of this parameter, pages are ``limit`` long and the
first page is 1. |
+ | | | If ``offset`` was defined, this query
parameter has no effect. ``limit`` must be defined to make use of ``page``.
|
+
+--------------+----------+-----------------------------------------------------------------------------------------------------------------------------------------+
Response Structure
------------------
diff --git a/docs/source/api/v2/users_id_deliveryservices.rst
b/docs/source/api/v2/users_id_deliveryservices.rst
deleted file mode 100644
index f377848..0000000
--- a/docs/source/api/v2/users_id_deliveryservices.rst
+++ /dev/null
@@ -1,213 +0,0 @@
-..
-..
-.. Licensed under the Apache License, Version 2.0 (the "License");
-.. you may not use this file except in compliance with the License.
-.. You may obtain a copy of the License at
-..
-.. http://www.apache.org/licenses/LICENSE-2.0
-..
-.. Unless required by applicable law or agreed to in writing, software
-.. distributed under the License is distributed on an "AS IS" BASIS,
-.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-.. See the License for the specific language governing permissions and
-.. limitations under the License.
-..
-
-.. _to-api-users-id-deliveryservices:
-
-*********************************
-``users/{{ID}}/deliveryservices``
-*********************************
-.. caution:: This endpoint has several issues related to tenancy and newer
:term:`Delivery Service` fields. For these and other reasons, the assigning of
:term:`Delivery Services` to users is strongly discouraged.
-
-``GET``
-=======
-Retrieves all :term:`Delivery Services` assigned to the user.
-
-:Auth. Required: Yes
-:Roles Required: None\ [#tenancy]_
-:Response Type: Array
-
-Request Structure
------------------
-.. table:: Request Path Parameters
-
-
+------+-------------------------------------------------------------------------------------------------+
- | Name | Description
|
-
+======+=================================================================================================+
- | ID | The integral, unique identifier of the users whose
:term:`Delivery Services` shall be retrieved |
-
+------+-------------------------------------------------------------------------------------------------+
-
-.. code-block:: http
- :caption: Request Example
-
- GET /api/2.0/users/2/deliveryservices HTTP/1.1
- Host: trafficops.infra.ciab.test
- User-Agent: curl/7.47.0
- Accept: */*
- Cookie: mojolicious=...
-
-Response Structure
-------------------
-:active: A boolean that defines :ref:`ds-active`.
-:anonymousBlockingEnabled: A boolean that defines :ref:`ds-anonymous-blocking`
-:cacheurl: A :ref:`ds-cacheurl`
-
- .. deprecated:: ATCv3.0
- This field has been deprecated in Traffic Control 3.x and is
subject to removal in Traffic Control 4.x or later
-
-:ccrDnsTtl: The :ref:`ds-dns-ttl` - named "ccrDnsTtl" for
legacy reasons
-:cdnId: The integral, unique identifier of the
:ref:`ds-cdn` to which the :term:`Delivery Service` belongs
-:cdnName: Name of the :ref:`ds-cdn` to which the
:term:`Delivery Service` belongs
-:checkPath: A :ref:`ds-check-path`
-:consistentHashRegex: A :ref:`ds-consistent-hashing-regex`
-:consistentHashQueryParams: An array of :ref:`ds-consistent-hashing-qparams`
-
- .. caution:: This field will always appear to be ``null`` - even when
the :term:`Delivery Service` in question has
:ref:`ds-consistent-hashing-qparams` assigned to it.
-
-:deepCachingType: The :ref:`ds-deep-caching` setting for this
:term:`Delivery Service`
-:displayName: The :ref:`ds-display-name`
-:dnsBypassCname: A :ref:`ds-dns-bypass-cname`
-:dnsBypassIp: A :ref:`ds-dns-bypass-ip`
-:dnsBypassIp6: A :ref:`ds-dns-bypass-ipv6`
-:dnsBypassTtl: The :ref:`ds-dns-bypass-ttl`
-:dscp: A :ref:`ds-dscp` to be used within the :term:`Delivery
Service`
-:ecsEnabled: A boolean that defines the :ref:`ds-ecs` setting on this
:term:`Delivery Service`
-:edgeHeaderRewrite: A set of :ref:`ds-edge-header-rw-rules`
-:exampleURLs: An array of :ref:`ds-example-urls`
-:fqPacingRate: The :ref:`ds-fqpr`
-:geoLimit: An integer that defines the :ref:`ds-geo-limit`
-:geoLimitCountries: A string containing a comma-separated list defining the
:ref:`ds-geo-limit-countries`
-:geoLimitRedirectUrl: A :ref:`ds-geo-limit-redirect-url`
-:geoProvider: The :ref:`ds-geo-provider`
-:globalMaxMbps: The :ref:`ds-global-max-mbps`
-:globalMaxTps: The :ref:`ds-global-max-tps`
-:httpBypassFqdn: A :ref:`ds-http-bypass-fqdn`
-:id: An integral, unique identifier for this :term:`Delivery
Service`
-:infoUrl: An :ref:`ds-info-url`
-:initialDispersion: The :ref:`ds-initial-dispersion`
-:ipv6RoutingEnabled: A boolean that defines the :ref:`ds-ipv6-routing`
setting on this :term:`Delivery Service`
-:lastUpdated: The date and time at which this :term:`Delivery Service`
was last updated, in :rfc:`3339` format
-:logsEnabled: A boolean that defines the :ref:`ds-logs-enabled`
setting on this :term:`Delivery Service`
-:longDesc: The :ref:`ds-longdesc` of this :term:`Delivery Service`
-:longDesc1: The :ref:`ds-longdesc2` of this :term:`Delivery Service`
-:longDesc2: The :ref:`ds-longdesc3` of this :term:`Delivery Service`
-:matchList: The :term:`Delivery Service`'s :ref:`ds-matchlist`
-
- :pattern: A regular expression - the use of this pattern is dependent
on the ``type`` field (backslashes are escaped)
- :setNumber: An integer that provides explicit ordering of
:ref:`ds-matchlist` items - this is used as a priority ranking by Traffic
Router, and is not guaranteed to correspond to the ordering of items in the
array.
- :type: The type of match performed using ``pattern``.
-
-:maxDnsAnswers: The :ref:`ds-max-dns-answers` allowed for this
:term:`Delivery Service`
-:maxOriginConnections: The :ref:`ds-max-origin-connections`
-:midHeaderRewrite: A set of :ref:`ds-mid-header-rw-rules`
-:missLat: The :ref:`ds-geo-miss-default-latitude` used by this
:term:`Delivery Service`
-:missLong: The :ref:`ds-geo-miss-default-longitude` used by this
:term:`Delivery Service`
-:multiSiteOrigin: A boolean that defines the use of
:ref:`ds-multi-site-origin` by this :term:`Delivery Service`
-:orgServerFqdn: The :ref:`ds-origin-url`
-:originShield: A :ref:`ds-origin-shield` string
-:profileDescription: The :ref:`profile-description` of the :ref:`ds-profile`
with which this :term:`Delivery Service` is associated
-:profileId: The :ref:`profile-id` of the :ref:`ds-profile` with
which this :term:`Delivery Service` is associated
-:profileName: The :ref:`profile-name` of the :ref:`ds-profile` with
which this :term:`Delivery Service` is associated
-:protocol: An integral, unique identifier that corresponds to the
:ref:`ds-protocol` used by this :term:`Delivery Service`
-:qstringIgnore: An integral, unique identifier that corresponds to the
:ref:`ds-qstring-handling` setting on this :term:`Delivery Service`
-:rangeRequestHandling: An integral, unique identifier that corresponds to the
:ref:`ds-range-request-handling` setting on this :term:`Delivery Service`
-:regexRemap: A :ref:`ds-regex-remap`
-:regionalGeoBlocking: A boolean defining the :ref:`ds-regionalgeo` setting on
this :term:`Delivery Service`
-:remapText: :ref:`ds-raw-remap`
-:signed: ``true`` if and only if ``signingAlgorithm`` is not
``null``, ``false`` otherwise
-:signingAlgorithm: Either a :ref:`ds-signing-algorithm` or ``null`` to
indicate URL/URI signing is not implemented on this :term:`Delivery Service`
-:rangeSliceBlockSize: An integer that defines the byte block size for the ATS
Slice Plugin. It can only and must be set if ``rangeRequestHandling`` is set to
3.
-:sslKeyVersion: This integer indicates the :ref:`ds-ssl-key-version`
-:tenantId: The integral, unique identifier of the :ref:`ds-tenant`
who owns this :term:`Delivery Service`
-:trRequestHeaders: If defined, this defines the :ref:`ds-tr-req-headers`
used by Traffic Router for this :term:`Delivery Service`
-:trResponseHeaders: If defined, this defines the :ref:`ds-tr-resp-headers`
used by Traffic Router for this :term:`Delivery Service`
-:type: The :ref:`ds-types` of this :term:`Delivery Service`
-:typeId: The integral, unique identifier of the :ref:`ds-types`
of this :term:`Delivery Service`
-:xmlId: This :term:`Delivery Service`'s :ref:`ds-xmlid`
-
-.. code-block:: http
- :caption: Response Example
-
- HTTP/1.1 200 OK
- Access-Control-Allow-Credentials: true
- Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type,
Accept, Set-Cookie, Cookie
- Access-Control-Allow-Methods: POST,GET,OPTIONS,PUT,DELETE
- Access-Control-Allow-Origin: *
- Content-Type: application/json
- Set-Cookie: mojolicious=...; Path=/; Expires=Mon, 18 Nov 2019 17:40:54
GMT; Max-Age=3600; HttpOnly
- Whole-Content-Sha512:
/YG9PdSw9PAkVLfbTcOfEUbJe14UTkWQp2P9x632RbmsbbAQvbluT5QIMLJ4OatmEGwWKs47NUaRLUc8z0/qSA==
- X-Server-Name: traffic_ops_golang/
- Date: Mon, 10 Jun 2019 16:50:25 GMT
- Content-Length: 1348
-
- {"response": [{
- "active": true,
- "anonymousBlockingEnabled": false,
- "cacheurl": null,
- "ccrDnsTtl": null,
- "cdnId": 2,
- "cdnName": "CDN-in-a-Box",
- "checkPath": null,
- "displayName": "Demo 1",
- "dnsBypassCname": null,
- "dnsBypassIp": null,
- "dnsBypassIp6": null,
- "dnsBypassTtl": null,
- "dscp": 0,
- "edgeHeaderRewrite": null,
- "geoLimit": 0,
- "geoLimitCountries": null,
- "geoLimitRedirectURL": null,
- "geoProvider": 0,
- "globalMaxMbps": null,
- "globalMaxTps": null,
- "httpBypassFqdn": null,
- "id": 1,
- "infoUrl": null,
- "initialDispersion": 1,
- "ipv6RoutingEnabled": true,
- "lastUpdated": "2019-06-10 15:14:29+00",
- "logsEnabled": true,
- "longDesc": "Apachecon North America 2018",
- "longDesc1": null,
- "longDesc2": null,
- "matchList": null,
- "maxDnsAnswers": null,
- "midHeaderRewrite": null,
- "missLat": 42,
- "missLong": -88,
- "multiSiteOrigin": false,
- "originShield": null,
- "orgServerFqdn": "http://origin.infra.ciab.test",
- "profileDescription": null,
- "profileId": null,
- "profileName": null,
- "protocol": 2,
- "qstringIgnore": 0,
- "rangeRequestHandling": 0,
- "regexRemap": null,
- "regionalGeoBlocking": false,
- "remapText": null,
- "routingName": "video",
- "signed": false,
- "sslKeyVersion": 1,
- "tenantId": 1,
- "type": "HTTP",
- "typeId": 1,
- "xmlId": "demo1",
- "exampleURLs": null,
- "deepCachingType": "NEVER",
- "fqPacingRate": null,
- "signingAlgorithm": null,
- "tenant": "root",
- "trResponseHeaders": null,
- "trRequestHeaders": null,
- "consistentHashRegex": null,
- "consistentHashQueryParams": null,
- "maxOriginConnections": null,
- "ecsEnabled": false,
- "rangeSliceBlockSize": null
- }]}
-
-.. [#tenancy] While it is totally possible to assign a :term:`Delivery
Service` to a user who's :term:`Tenant` does not have permission to own said
:term:`Delivery Service`, users that request this endpoint will only see
:term:`Delivery Services` that their :term:`Tenant` has permission to see. This
means that there's no real guarantee that the output of this endpoint shows all
of the :term:`Delivery Services` assigned to the user requested, even if the
user is requesting their own assig [...]
diff --git a/traffic_ops/client/deliveryservice.go
b/traffic_ops/client/deliveryservice.go
index 449a20a..48d5159 100644
--- a/traffic_ops/client/deliveryservice.go
+++ b/traffic_ops/client/deliveryservice.go
@@ -474,3 +474,11 @@ func (to *Session) UpdateDeliveryServiceSafe(id int, ds
tc.DeliveryServiceSafeUp
}
return resp.Response, reqInf, err
}
+
+// GetAccessibleDeliveryServicesByTenant gets all delivery services associated
with the given tenant, and all of
+// it's children.
+func (to *Session) GetAccessibleDeliveryServicesByTenant(tenantId int)
([]tc.DeliveryService, ReqInf, error) {
+ data := tc.DeliveryServicesResponse{}
+ reqInf, err := get(to, fmt.Sprintf("%v?accessibleTo=%v",
API_DELIVERY_SERVICES, tenantId), &data)
+ return data.Response, reqInf, err
+}
diff --git a/traffic_ops/client/dsuser.go b/traffic_ops/client/dsuser.go
index f6f7b67..587af06 100644
--- a/traffic_ops/client/dsuser.go
+++ b/traffic_ops/client/dsuser.go
@@ -22,17 +22,6 @@ import (
tc "github.com/apache/trafficcontrol/lib/go-tc"
)
-// GetUserDeliveryServices gets the delivery services associated with the
given user.
-func (to *Session) GetUserDeliveryServices(userID int)
(*tc.UserDeliveryServicesNullableResponse, ReqInf, error) {
- uri := apiBase + `/users/` + strconv.Itoa(userID) + `/deliveryservices`
- resp := tc.UserDeliveryServicesNullableResponse{}
- reqInf, err := get(to, uri, &resp)
- if err != nil {
- return nil, reqInf, err
- }
- return &resp, reqInf, nil
-}
-
// SetUserDeliveryService associates the given delivery services with the
given user.
func (to *Session) SetDeliveryServiceUser(userID int, dses []int, replace
bool) (*tc.UserDeliveryServicePostResponse, error) {
uri := apiBase + `/deliveryservice_user`
diff --git a/traffic_ops/testing/api/v2/deliveryservices_test.go
b/traffic_ops/testing/api/v2/deliveryservices_test.go
index 8a521d5..8f7040a 100644
--- a/traffic_ops/testing/api/v2/deliveryservices_test.go
+++ b/traffic_ops/testing/api/v2/deliveryservices_test.go
@@ -17,6 +17,7 @@ package v2
import (
"encoding/json"
+ "errors"
"fmt"
"io"
"io/ioutil"
@@ -33,6 +34,7 @@ import (
func TestDeliveryServices(t *testing.T) {
WithObjs(t, []TCObj{CDNs, Types, Tenants, Users, Parameters, Profiles,
Statuses, Divisions, Regions, PhysLocations, CacheGroups, Servers,
DeliveryServices}, func() {
+ GetAccessibleToTest(t)
UpdateTestDeliveryServices(t)
UpdateNullableTestDeliveryServices(t)
UpdateDeliveryServiceWithInvalidRemapText(t)
@@ -296,6 +298,62 @@ func UpdateDeliveryServiceWithInvalidSliceRangeRequest(t
*testing.T) {
}
+func GetAccessibleToTest(t *testing.T) {
+ //Every delivery service is associated with the root tenant
+ err := getByTenants(1, len(testData.DeliveryServices))
+ if err != nil {
+ t.Fatal(err.Error())
+ }
+
+ tenant := &tc.Tenant{
+ Active: true,
+ Name: "the strongest",
+ ParentID: 1,
+ ParentName: "root",
+ }
+
+ resp, err := TOSession.CreateTenant(tenant)
+ if err != nil {
+ t.Fatal(err.Error())
+ }
+ if resp == nil {
+ t.Fatal("unexpected null response when creating tenant")
+ }
+ tenant = &resp.Response
+
+ //No delivery services are associated with this new tenant
+ err = getByTenants(tenant.ID, 0)
+ if err != nil {
+ t.Fatal(err.Error())
+ }
+
+ //First and only child tenant, no access to root
+ childTenant, _, err := TOSession.TenantByName("tenant1")
+ if err != nil {
+ t.Fatal("unable to get tenant " + err.Error())
+ }
+ err = getByTenants(childTenant.ID, len(testData.DeliveryServices) - 1)
+ if err != nil {
+ t.Fatal(err.Error())
+ }
+
+ _, err = TOSession.DeleteTenant(strconv.Itoa(tenant.ID))
+ if err != nil {
+ t.Fatalf("unable to clean up tenant %v", err.Error())
+ }
+}
+
+func getByTenants(tenantID int, expectedCount int) error {
+ deliveryServices, _, err :=
TOSession.GetAccessibleDeliveryServicesByTenant(tenantID)
+ if err != nil {
+ return err
+ }
+ if len(deliveryServices) != expectedCount {
+ return errors.New(fmt.Sprintf("expected %v delivery service,
got %v", expectedCount, len(deliveryServices)))
+ }
+ return nil
+}
+
func DeleteTestDeliveryServices(t *testing.T) {
dses, _, err := TOSession.GetDeliveryServices()
if err != nil {
diff --git a/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservices.go
b/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservices.go
index 0722a5a..4264fb2 100644
--- a/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservices.go
+++ b/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservices.go
@@ -920,6 +920,21 @@ func readGetDeliveryServices(params map[string]string, tx
*sqlx.Tx, user *auth.C
where, queryValues = dbhelpers.AddTenancyCheck(where, queryValues,
"ds.tenant_id", tenantIDs)
+ if accessibleTo, ok := params["accessibleTo"]; ok {
+ if err := api.IsInt(accessibleTo); err != nil {
+ log.Errorln("unknown parameter value: " + err.Error())
+ return nil, nil, tc.DBError,
http.StatusInternalServerError
+ }
+ accessibleTo, _ := strconv.Atoi(accessibleTo)
+ accessibleTenants, err := tenant.GetUserTenantIDListTx(tx.Tx,
accessibleTo)
+ if err != nil {
+ log.Errorln("unable to get teanants: " + err.Error())
+ return nil, nil, tc.DBError,
http.StatusInternalServerError
+ }
+ where += " AND ds.tenant_id = ANY(CAST(:accessibleTo AS
bigint[])) "
+ queryValues["accessibleTo"] = pq.Array(accessibleTenants)
+ }
+
query := selectQuery() + where + orderBy + pagination
log.Debugln("generated deliveryServices query: " + query)
diff --git a/traffic_ops/traffic_ops_golang/routing/routes.go
b/traffic_ops/traffic_ops_golang/routing/routes.go
index e922bda..dc45a36 100644
--- a/traffic_ops/traffic_ops_golang/routing/routes.go
+++ b/traffic_ops/traffic_ops_golang/routing/routes.go
@@ -224,7 +224,6 @@ func Routes(d ServerData) ([]Route, []RawRoute,
http.Handler, error) {
{api.Version{2, 0}, http.MethodPost, `jobs/?`,
invalidationjobs.Create, auth.PrivLevelPortal, Authenticated, nil, 20450955,
noPerlBypass},
//Login
- {api.Version{2, 0}, http.MethodGet,
`users/{id}/deliveryservices/?$`, user.GetDSes, auth.PrivLevelReadOnly,
Authenticated, nil, 288787789, noPerlBypass},
{api.Version{2, 0}, http.MethodPost, `user/login/?$`,
login.LoginHandler(d.DB, d.Config), 0, NoAuth, nil, 2392670821, noPerlBypass},
{api.Version{2, 0}, http.MethodPost, `user/logout/?$`,
login.LogoutHandler(d.Config.Secrets[0]), 0, Authenticated, nil, 243434825,
noPerlBypass},
{api.Version{2, 0}, http.MethodPost, `user/login/oauth/?$`,
login.OauthLoginHandler(d.DB, d.Config), 0, NoAuth, nil, 2415886009,
noPerlBypass},
diff --git a/traffic_ops/traffic_ops_golang/user/deliveryservices.go
b/traffic_ops/traffic_ops_golang/user/deliveryservices.go
index c4fc98f..2970f5a 100644
--- a/traffic_ops/traffic_ops_golang/user/deliveryservices.go
+++ b/traffic_ops/traffic_ops_golang/user/deliveryservices.go
@@ -26,15 +26,17 @@ import (
"net/http"
"github.com/apache/trafficcontrol/lib/go-tc"
+ "github.com/apache/trafficcontrol/lib/go-util"
"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/api"
"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/auth"
"github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang/tenant"
)
func GetDSes(w http.ResponseWriter, r *http.Request) {
+ alt := util.StrPtr("GET deliveryservices?accessibleTo={{tenantId}")
inf, userErr, sysErr, errCode := api.NewInfo(r, []string{"id"},
[]string{"id"})
if userErr != nil || sysErr != nil {
- api.HandleErr(w, r, inf.Tx.Tx, errCode, userErr, sysErr)
+ api.HandleDeprecatedErr(w, r, inf.Tx.Tx, errCode, userErr,
sysErr, alt)
return
}
defer inf.Close()
@@ -42,16 +44,16 @@ func GetDSes(w http.ResponseWriter, r *http.Request) {
dsUserID := inf.IntParams["id"]
dses, err := getUserDSes(inf.Tx.Tx, dsUserID)
if err != nil {
- api.HandleErr(w, r, inf.Tx.Tx, http.StatusInternalServerError,
nil, errors.New("getting user delivery services: "+err.Error()))
+ api.HandleDeprecatedErr(w, r, inf.Tx.Tx,
http.StatusInternalServerError, nil, errors.New("getting user delivery
services: "+err.Error()), alt)
return
}
dses, err = filterAuthorized(inf.Tx.Tx, dses, inf.User)
if err != nil {
- api.HandleErr(w, r, inf.Tx.Tx, http.StatusInternalServerError,
nil, errors.New("filtering user-authorized delivery services: "+err.Error()))
+ api.HandleDeprecatedErr(w, r, inf.Tx.Tx,
http.StatusInternalServerError, nil, errors.New("filtering user-authorized
delivery services: "+err.Error()), alt)
return
}
- api.WriteResp(w, r, dses)
+ api.WriteAlertsObj(w, r, http.StatusOK,
api.CreateDeprecationAlerts(alt), dses)
}
func GetAvailableDSes(w http.ResponseWriter, r *http.Request) {
diff --git a/traffic_portal/app/src/app.js b/traffic_portal/app/src/app.js
index ced7152..3e1d0fd 100644
--- a/traffic_portal/app/src/app.js
+++ b/traffic_portal/app/src/app.js
@@ -209,7 +209,6 @@ var trafficPortal = angular.module('trafficPortal', [
require('./modules/private/types/deliveryServices').name,
require('./modules/private/types/staticDnsEntries').name,
require('./modules/private/users').name,
- require('./modules/private/users/deliveryServices').name,
require('./modules/private/users/edit').name,
require('./modules/private/users/list').name,
require('./modules/private/users/new').name,
@@ -394,7 +393,6 @@ var trafficPortal = angular.module('trafficPortal', [
require('./common/modules/table/typeServers').name,
require('./common/modules/table/typeStaticDnsEntries').name,
require('./common/modules/table/users').name,
- require('./common/modules/table/userDeliveryServices').name,
// widgets
require('./common/modules/widget/cacheGroups').name,
diff --git
a/traffic_portal/app/src/common/modules/form/user/FormUserController.js
b/traffic_portal/app/src/common/modules/form/user/FormUserController.js
index e54bfee..a805b07 100644
--- a/traffic_portal/app/src/common/modules/form/user/FormUserController.js
+++ b/traffic_portal/app/src/common/modules/form/user/FormUserController.js
@@ -50,7 +50,7 @@ var FormUserController = function(user, $scope, $location,
formUtils, stringUtil
$scope.labelize = stringUtils.labelize;
$scope.viewDeliveryServices = function() {
- $location.path($location.path() + '/delivery-services');
+ $location.path('/tenants/' + user.tenantId + '/delivery-services');
};
$scope.navigateToPath = locationUtils.navigateToPath;
diff --git
a/traffic_portal/app/src/common/modules/table/userDeliveryServices/TableUserDeliveryServicesController.js
b/traffic_portal/app/src/common/modules/table/userDeliveryServices/TableUserDeliveryServicesController.js
deleted file mode 100644
index 3315bd1..0000000
---
a/traffic_portal/app/src/common/modules/table/userDeliveryServices/TableUserDeliveryServicesController.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-var TableUserDeliveryServicesController = function (user, deliveryServices,
$controller, $scope) {
-
- // extends the TableDeliveryServicesController to inherit common methods
- angular.extend(this, $controller('TableDeliveryServicesController', {
deliveryServices: deliveryServices, $scope: $scope }));
-
- let userDeliveryServicesTable;
-
- $scope.user = user;
-
- $scope.toggleVisibility = function(colName) {
- const col = userDeliveryServicesTable.column(colName + ':name');
- col.visible(!col.visible());
- userDeliveryServicesTable.rows().invalidate().draw();
- };
-
- angular.element(document).ready(function () {
- userDeliveryServicesTable =
$('#userDeliveryServicesTable').DataTable({
- "lengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]],
- "iDisplayLength": 25,
- "aaSorting": [],
- "columns": $scope.columns,
- "initComplete": function(settings, json) {
- try {
- // need to create the show/hide column
checkboxes and bind to the current visibility
- $scope.columns =
JSON.parse(localStorage.getItem('DataTables_userDeliveryServicesTable_/')).columns;
- } catch (e) {
- console.error("Failure to retrieve
required column info from localStorage
(key=DataTables_userDeliveryServicesTable_/):", e);
- }
- }
- });
- });
-
-};
-
-TableUserDeliveryServicesController.$inject = ['user', 'deliveryServices',
'$controller', '$scope'];
-module.exports = TableUserDeliveryServicesController;
diff --git
a/traffic_portal/app/src/common/modules/table/userDeliveryServices/index.js
b/traffic_portal/app/src/common/modules/table/userDeliveryServices/index.js
deleted file mode 100644
index eaa7b34..0000000
--- a/traffic_portal/app/src/common/modules/table/userDeliveryServices/index.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-module.exports = angular.module('trafficPortal.table.userDeliveryServices', [])
- .controller('TableUserDeliveryServicesController',
require('./TableUserDeliveryServicesController'));
diff --git
a/traffic_portal/app/src/common/modules/table/userDeliveryServices/table.userDeliveryServices.tpl.html
b/traffic_portal/app/src/common/modules/table/userDeliveryServices/table.userDeliveryServices.tpl.html
deleted file mode 100644
index bf133dd..0000000
---
a/traffic_portal/app/src/common/modules/table/userDeliveryServices/table.userDeliveryServices.tpl.html
+++ /dev/null
@@ -1,171 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-<div class="x_panel">
- <div class="x_title">
- <ol class="breadcrumb pull-left">
- <li><a ng-click="navigateToPath('/users')">Users</a></li>
- <li><a ng-click="navigateToPath('/users/' +
user.id)">{{::user.username}}</a></li>
- <li class="active">Delivery Services</li>
- </ol>
- <div class="pull-right">
- <button class="btn btn-default" title="Refresh"
ng-click="refresh()"><i class="fa fa-refresh"></i></button>
- <div class="btn-group" role="group" title="Select Table Columns"
uib-dropdown is-open="columnSettings.isopen">
- <button type="button" class="btn btn-default dropdown-toggle"
uib-dropdown-toggle aria-haspopup="true" aria-expanded="false">
- <i class="fa fa-columns"></i>
- <span class="caret"></span>
- </button>
- <menu ng-click="$event.stopPropagation()"
class="column-settings dropdown-menu-right dropdown-menu" uib-dropdown-menu>
- <li role="menuitem" ng-repeat="c in columns |
orderBy:'name'">
- <div class="checkbox">
- <label><input type="checkbox" ng-model="c.visible"
ng-click="toggleVisibility(c.name)"> {{::c.name}}</label>
- </div>
- </li>
- </menu>
- </div>
- </div>
- <div class="clearfix"></div>
- </div>
- <div class="x_content">
- <br>
- <table id="userDeliveryServicesTable" class="table
responsive-utilities jambo_table">
- <thead>
- <tr class="headings">
- <th>Active</th>
- <th>Anonymous Blocking</th>
- <th>CDN</th>
- <th>Check Path</th>
- <th>Consistent Hash Query Params</th>
- <th>Consistent Hash Regex</th>
- <th>Deep Caching Type</th>
- <th>Display Name</th>
- <th>DNS Bypass CNAME</th>
- <th>DNS Bypass IP</th>
- <th>DNS Bypass IPv6</th>
- <th>DNS Bypass TTL</th>
- <th>DNS TTL</th>
- <th>DSCP</th>
- <th>ECS Enabled</th>
- <th>Edge Header Rewrite Rules</th>
- <th>FQ Pacing Rate</th>
- <th>Geo Limit</th>
- <th>Geo Limit Countries</th>
- <th>Geo Limit Redirect URL</th>
- <th>Geolocation Provider</th>
- <th>Geo Miss Latitude</th>
- <th>Geo Miss Longitude</th>
- <th>Global Max Mbps</th>
- <th>Global Max TPS</th>
- <th>HTTP Bypass FQDN</th>
- <th>ID</th>
- <th>Info URL</th>
- <th>Initial Dispersion</th>
- <th>IPv6 Routing</th>
- <th>Last Updated</th>
- <th>Long Desc 1</th>
- <th>Long Desc 2</th>
- <th>Long Desc 3</th>
- <th>Max DNS Answers</th>
- <th>Max Origin Connections</th>
- <th>Mid Header Rewrite Rules</th>
- <th>Multi-Site Origin</th>
- <th>Origin Shield</th>
- <th>Origin FQDN</th>
- <th>Profile</th>
- <th>Protocol</th>
- <th>Qstring Handling</th>
- <th>Range Request Handling</th>
- <th>Regex Remap Expression</th>
- <th>Regional Geoblocking</th>
- <th>Raw Remap Text</th>
- <th>Routing Name</th>
- <th>Signed</th>
- <th>Signing Algorithm</th>
- <th>Range Slice Block Size</th>
- <th>Tenant</th>
- <th>TR Request Headers</th>
- <th>TR Response Headers</th>
- <th>Type</th>
- <th>XML ID (Key)</th>
- </tr>
- </thead>
- <tbody>
- <tr ng-click="editDeliveryService(ds)" ng-repeat="ds in
::deliveryServices" context-menu="contextMenuItems">
- <td data-search="^{{::ds.active}}$">{{::ds.active}}</td>
- <td
data-search="^{{::ds.anonymousBlockingEnabled}}$">{{::ds.anonymousBlockingEnabled}}</td>
- <td data-search="^{{::ds.cdnName}}$">{{::ds.cdnName}}</td>
- <td
data-search="^{{::ds.checkPath}}$">{{::ds.checkPath}}</td>
- <td
data-search="^{{::ds.consistentHashQueryParams}}$">{{::ds.consistentHashQueryParams.join(',
')}}</td>
- <td
data-search="^{{::ds.consistentHashRegex}}$">{{::ds.consistentHashRegex}}</td>
- <td
data-search="^{{::ds.deepCachingType}}$">{{::ds.deepCachingType}}</td>
- <td
data-search="^{{::ds.displayName}}$">{{::ds.displayName}}</td>
- <td
data-search="^{{::ds.dnsBypassCname}}$">{{::ds.dnsBypassCname}}</td>
- <td
data-search="^{{::ds.dnsBypassIp}}$">{{::ds.dnsBypassIp}}</td>
- <td
data-search="^{{::ds.dnsBypassIp6}}$">{{::ds.dnsBypassIp6}}</td>
- <td
data-search="^{{::ds.dnsBypassTtl}}$">{{::ds.dnsBypassTtl}}</td>
- <td
data-search="^{{::ds.ccrDnsTtl}}$">{{::ds.ccrDnsTtl}}</td>
- <td data-search="^{{::ds.dscp}}$">{{::ds.dscp}}</td>
- <td
data-search="^{{::ds.ecsEnabled}}$">{{::ds.ecsEnabled}}</td>
- <td
data-search="^{{::ds.edgeHeaderRewrite}}$">{{::ds.edgeHeaderRewrite}}</td>
- <td
data-search="^{{::ds.fqPacingRate}}$">{{::ds.fqPacingRate}}</td>
- <td
data-search="^{{::geoLimit(ds)}}$">{{::geoLimit(ds)}}</td>
- <td
data-search="^{{::ds.geoLimitCountries}}$">{{::ds.geoLimitCountries}}</td>
- <td
data-search="^{{::ds.geoLimitRedirectURL}}$">{{::ds.geoLimitRedirectURL}}</td>
- <td
data-search="^{{::geoProvider(ds)}}$">{{::geoProvider(ds)}}</td>
- <td data-search="^{{::ds.missLat}}$">{{::ds.missLat}}</td>
- <td
data-search="^{{::ds.missLong}}$">{{::ds.missLong}}</td>
- <td
data-search="^{{::ds.globalMaxMbps}}$">{{::ds.globalMaxMbps}}</td>
- <td
data-search="^{{::ds.globalMaxTps}}$">{{::ds.globalMaxTps}}</td>
- <td
data-search="^{{::ds.httpBypassFqdn}}$">{{::ds.httpBypassFqdn}}</td>
- <td data-search="^{{::ds.id}}$">{{::ds.id}}</td>
- <td data-search="^{{::ds.infoUrl}}$">{{::ds.infoUrl}}</td>
- <td
data-search="^{{::ds.initialDispersion}}$">{{::ds.initialDispersion}}</td>
- <td
data-search="^{{::ds.ipv6RoutingEnabled}}$">{{::ds.ipv6RoutingEnabled}}</td>
- <td data-search="^{{::getRelativeTime(ds.lastUpdated)}}$"
data-order="{{::ds.lastUpdated}}">{{::getRelativeTime(ds.lastUpdated)}}</td>
- <td
data-search="^{{::ds.longDesc}}$">{{::ds.longDesc}}</td>
- <td
data-search="^{{::ds.longDesc1}}$">{{::ds.longDesc1}}</td>
- <td
data-search="^{{::ds.longDesc2}}$">{{::ds.longDesc2}}</td>
- <td
data-search="^{{::ds.maxDnsAnswers}}$">{{::ds.maxDnsAnswers}}</td>
- <td
data-search="^{{::ds.maxOriginConnections}}$">{{::ds.maxOriginConnections}}</td>
- <td
data-search="^{{::ds.midHeaderRewrite}}$">{{::ds.midHeaderRewrite}}</td>
- <td
data-search="^{{::ds.multiSiteOrigin}}$">{{::ds.multiSiteOrigin}}</td>
- <td
data-search="^{{::ds.originShield}}$">{{::ds.originShield}}</td>
- <td
data-search="^{{::ds.orgServerFqdn}}$">{{::ds.orgServerFqdn}}</td>
- <td
data-search="^{{::ds.profileName}}$">{{::ds.profileName}}</td>
- <td
data-search="^{{::protocol(ds)}}$">{{::protocol(ds)}}</td>
- <td
data-search="^{{::qstring(ds)}}$">{{::qstring(ds)}}</td>
- <td data-search="^{{::rrh(ds)}}$">{{::rrh(ds)}}</td>
- <td
data-search="^{{::ds.regexRemap}}$">{{::ds.regexRemap}}</td>
- <td
data-search="^{{::ds.regionalGeoBlocking}}$">{{::ds.regionalGeoBlocking}}</td>
- <td
data-search="^{{::ds.remapText}}$">{{::ds.remapText}}</td>
- <td
data-search="^{{::ds.routingName}}$">{{::ds.routingName}}</td>
- <td data-search="^{{::ds.signed}}$">{{::ds.signed}}</td>
- <td
data-search="^{{::ds.signingAlgorithm}}$">{{::ds.signingAlgorithm}}</td>
- <td
data-search="^{{::ds.rangeSliceBlockSize}}$">{{::ds.rangeSliceBlockSize}}</td>
- <td data-search="^{{::ds.tenant}}$">{{::ds.tenant}}</td>
- <td
data-search="^{{::ds.trResponseHeaders}}$">{{::ds.trResponseHeaders}}</td>
- <td
data-search="^{{::ds.trRequestHeaders}}$">{{::ds.trRequestHeaders}}</td>
- <td data-search="^{{::ds.type}}$">{{::ds.type}}</td>
- <td name="xmlId"
data-search="^{{::ds.xmlId}}$">{{::ds.xmlId}}</td>
- </tr>
- </tbody>
- </table>
- </div>
-</div>
-
diff --git
a/traffic_portal/app/src/modules/private/tenants/deliveryServices/index.js
b/traffic_portal/app/src/modules/private/tenants/deliveryServices/index.js
index d514e02..f17edf2 100644
--- a/traffic_portal/app/src/modules/private/tenants/deliveryServices/index.js
+++ b/traffic_portal/app/src/modules/private/tenants/deliveryServices/index.js
@@ -31,7 +31,7 @@ module.exports =
angular.module('trafficPortal.private.tenants.deliveryServices'
return
tenantService.getTenant($stateParams.tenantId);
},
deliveryServices:
function(tenant, deliveryServiceService) {
- return
deliveryServiceService.getDeliveryServices({ tenant: tenant.id });
+ return
deliveryServiceService.getDeliveryServices({ accessibleTo: tenant.id });
}
}
}
diff --git
a/traffic_portal/app/src/modules/private/users/deliveryServices/index.js
b/traffic_portal/app/src/modules/private/users/deliveryServices/index.js
deleted file mode 100644
index 63c6240..0000000
--- a/traffic_portal/app/src/modules/private/users/deliveryServices/index.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-module.exports =
angular.module('trafficPortal.private.users.deliveryServices', [])
- .config(function ($stateProvider, $urlRouterProvider) {
- $stateProvider
- .state('trafficPortal.private.users.deliveryServices', {
- url: '/{userId}/delivery-services',
- views: {
- usersContent: {
- templateUrl:
'common/modules/table/userDeliveryServices/table.userDeliveryServices.tpl.html',
- controller:
'TableUserDeliveryServicesController',
- resolve: {
- user: function
($stateParams, userService) {
- return
userService.getUser($stateParams.userId);
- },
- deliveryServices:
function ($stateParams, deliveryServiceService) {
- return
deliveryServiceService.getUserDeliveryServices($stateParams.userId);
- }
- }
- }
- }
- })
- ;
- $urlRouterProvider.otherwise('/');
- });