aboutsummaryrefslogtreecommitdiffstats
path: root/test/mocks/ran-nssmf-simulator/RanNssmfSimulator/MainApp.py
blob: 6074e76349092dada96191f4efc0827095554956 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#! /usr/bin/python3

#  ============LICENSE_START=======================================================
#  Copyright (C) 2020 Huawei Technologies Co., Ltd. All rights reserved.
#  ================================================================================
#  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.
#  ============LICENSE_END=========================================================

import json
from flask import Flask, request, Response
from schematics.exceptions import DataError

from .utils import REST_PORT, LOGGING_LEVEL
from .SliceDataType import AllocateNssi, DeAllocateNssi
from . import AuthManager
from . import NssManager


app = Flask(__name__)
app.logger.setLevel(LOGGING_LEVEL)


@app.errorhandler(DataError)
def handleRequestException(e):
    app.logger.error(e)
    response = Response()
    response.status_code = 400
    return response


@app.errorhandler(AuthManager.AuthError)
def handleAuthException(e):
    app.logger.error(e)
    response = Response()
    response.status_code = 400
    return response


@app.errorhandler(AuthManager.TokenError)
def handleAuthException(e):
    app.logger.error(e)
    response = Response()
    response.status_code = 401
    return response


@app.errorhandler(NssManager.NssError)
def handleNssException(e):
    app.logger.error(e)
    response = Response()
    response.status_code = 400
    return response


@app.route("/api/rest/securityManagement/v1/oauth/token", methods=['POST'])
def handleAuthToken():
    """
        Used to get Access Token by SO NSSMF adapter.
    """
    app.logger.debug("Receive request:\n%s" % json.dumps(request.json, indent=2))

    AuthManager.AuthRequest(request.json).validate()
    AuthManager.checkAuth(request.json)

    return AuthManager.generateAuthToken(request.json), 201


@app.route("/ObjectManagement/NSS/SliceProfiles", methods=['POST'])
def handleAllocateNssi():
    AuthManager.checkAuthToken(request.headers)

    app.logger.info("Receive AllocateNssi request:\n%s" % json.dumps(request.json, indent=2))

    AllocateNssi(request.json).validate()

    return NssManager.allocateNssi(request.json), 200


@app.route("/ObjectManagement/NSS/SliceProfiles/<string:sliceProfileId>", methods=['DELETE'])
def handleDeallocateNssi(sliceProfileId):
    AuthManager.checkAuthToken(request.headers)

    app.logger.info("Receive DeallocateNssi request for sliceProfileId %s:\n%s"
                    % (sliceProfileId, json.dumps(request.json, indent=2)))

    DeAllocateNssi(request.json).validate()

    return NssManager.deallocateNssi(sliceProfileId, request.json), 200


def main():
    AuthManager.startAuthManagerJob()
    app.run("0.0.0.0", REST_PORT, False, ssl_context="adhoc")


if __name__ == '__main__':
    main()