Unity MSB address
[modeling/etsicatalog.git] / catalog / packages / biz / notificationsutil.py
index 72afe33..31760cc 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import json
 import logging
+import traceback
 import uuid
+
 import requests
+from django.db.models import Q
+from requests.auth import HTTPBasicAuth
 from rest_framework import status
-from catalog.packages import const
-from catalog.pub.database.models import VnfPackageModel, VnfPkgSubscriptionModel, NsdmSubscriptionModel
+
 import catalog.pub.utils.timeutil
-from catalog.pub.utils.values import remove_none_key
-from catalog.pub.config import config as pub_config
-import traceback
-from django.db.models import Q
+from catalog.packages import const
 from catalog.packages.serializers.vnf_pkg_notifications import PkgChangeNotificationSerializer, \
     PkgOnboardingNotificationSerializer
+from catalog.pub.config import config as pub_config
+from catalog.pub.database.models import VnfPackageModel, VnfPkgSubscriptionModel, NsdmSubscriptionModel
+from catalog.pub.utils.values import remove_none_key
 
 logger = logging.getLogger(__name__)
 
@@ -57,10 +61,7 @@ class NotificationsUtil(object):
             # set subscription id
             notification["subscriptionId"] = sub.get_subscription_id()
             notification['_links']['subscription'] = {
-                'href': 'http://%s:%s/%s%s' % (pub_config.MSB_SERVICE_IP,
-                                               pub_config.MSB_SERVICE_PORT,
-                                               self.subscription_root_uri,
-                                               notification["subscriptionId"])
+                'href': '%s/%s%s' % (pub_config.MSB_BASE_URL, self.subscription_root_uri, notification["subscriptionId"])
             }
             callbackuri = sub.callback_uri
             """
@@ -72,27 +73,44 @@ class NotificationsUtil(object):
                 serialized_data = self.notifyserializer(data=notification)
                 if not serialized_data.is_valid():
                     logger.error('Notification Data is invalid:%s.' % serialized_data.errors)
-            self.post_notification(callbackuri, notification)
-
-    def post_notification(self, callbackuri, notification):
-        """
-        params = auth_info.get("paramsBasic", {})
-        username, password = params.get("userName"), params.get("password")
-        logger.info("Sending notification to %s, %s", callbackuri, params)
-        resp = None
-        if username:
-            resp = requests.post(callbackuri,
-                                 data=notification,
-                                 auth=HTTPBasicAuth(username, password))
-        else:
-        """
 
+            if sub.auth_info:
+                self.post_notification(callbackuri, notification, auth_info=json.loads(sub.auth_info))
+            else:
+                self.post_notification(callbackuri, notification)
+
+    def post_notification(self, callbackuri, notification, auth_info=None):
         try:
-            resp = requests.post(callbackuri, data=notification, headers={'Connection': 'close'})
-            if resp.status_code != status.HTTP_204_NO_CONTENT:
-                logger.error("Sending notification to %s failed: %s" % (callbackuri, resp.text))
+            if auth_info:
+                if const.BASIC in auth_info.get("authType", ''):
+                    params = auth_info.get("paramsBasic", {})
+                    username = params.get("userName")
+                    password = params.get("password")
+                    resp = requests.post(callbackuri,
+                                         data=json.dumps(notification),
+                                         headers={'Connection': 'close',
+                                                  'content-type': 'application/json',
+                                                  'accept': 'application/json'},
+                                         auth=HTTPBasicAuth(username, password),
+                                         verify=False)
+                elif const.OAUTH2_CLIENT_CREDENTIALS in auth_info.get("authType", ''):
+                    # todo
+                    pass
+                else:
+                    # todo
+                    pass
             else:
+                resp = requests.post(callbackuri,
+                                     data=json.dumps(notification),
+                                     headers={'Connection': 'close',
+                                              'content-type': 'application/json',
+                                              'accept': 'application/json'},
+                                     verify=False)
+
+            if resp.status_code == status.HTTP_204_NO_CONTENT:
                 logger.info("Sending notification to %s successfully.", callbackuri)
+            else:
+                logger.error("Sending notification to %s failed: %s" % (callbackuri, resp))
         except:
             logger.error("Post notification failed.")
             logger.error(traceback.format_exc())
@@ -131,10 +149,7 @@ class PkgNotifications(NotificationsUtil):
             'vnfdId': vnfd_id,
             '_links': {
                 'vnfPackage': {
-                    'href': 'http://%s:%s/%s/vnf_packages/%s' % (pub_config.MSB_SERVICE_IP,
-                                                                 pub_config.MSB_SERVICE_PORT,
-                                                                 const.PKG_URL_PREFIX,
-                                                                 self.vnf_pkg_id)
+                    'href': '%s/%s/vnf_packages/%s' % (pub_config.MSB_BASE_URL, const.PKG_URL_PREFIX, self.vnf_pkg_id)
                 }
             }
         }
@@ -177,10 +192,7 @@ class NsdNotifications(NotificationsUtil):
             'nsdId': self.nsd_id,
             '_links': {
                 'nsdInfo': {
-                    'href': 'http://%s:%s/%s/ns_descriptors/%s' % (pub_config.MSB_SERVICE_IP,
-                                                                   pub_config.MSB_SERVICE_PORT,
-                                                                   const.NSD_URL_PREFIX,
-                                                                   self.nsd_info_id)
+                    'href': '%s/%s/ns_descriptors/%s' % (pub_config.MSB_BASE_URL, const.NSD_URL_PREFIX, self.nsd_info_id)
                 }
             }
         }
@@ -220,10 +232,9 @@ class PnfNotifications(NotificationsUtil):
             'pnfdId': self.pnfd_id,
             '_links': {
                 'pnfdInfo': {
-                    'href': 'http://%s:%s/%s/pnf_descriptors/%s' % (pub_config.MSB_SERVICE_IP,
-                                                                    pub_config.MSB_SERVICE_PORT,
-                                                                    const.NSD_URL_PREFIX,
-                                                                    self.pnfd_info_id)
+                    'href': '%s/%s/pnf_descriptors/%s' % (pub_config.MSB_BASE_URL,
+                                                          const.NSD_URL_PREFIX,
+                                                          self.pnfd_info_id)
                 }
             }
         }