Unverified Commit 81a4ebcb authored by Guillermo Sanz López's avatar Guillermo Sanz López Committed by GitHub
Browse files

Merge pull request #4 from Telefonica/deploy-preversion

Deploying without problems
parents 5d7eb391 4bc177cd
Loading
Loading
Loading
Loading
+77 −58
Original line number Diff line number Diff line
@@ -11,72 +11,85 @@ from flask_cors import CORS

# Create Flask app
app = Flask(__name__)
CORS(app)

CORS(app) # habilita CORS para todas las rutas en la aplicación

# Register blueprints (routes)
# other option modify URL ->  app.register_blueprint(backoffice_routes, url_prefix="/resources")
app.register_blueprint(backoffice_routes)
app.register_blueprint(access_routes)


# @app.route("/options", methods=["OPTIONS"])
# def handle_options():
#     return "", 200


@app.route('/', defaults={'path': ''})
@app.route('/<path:path>', methods=['OPTIONS'])
def handle_options(path):     
    return 'Success', 200


# Configure JWT
app.config["JWT_SECRET_KEY"] = "super-secret"
jwt = JWTManager(app)

# create public/PRIVATE key
key = PKey()
key.generate_key(TYPE_RSA, 2048)

# Generate CSR 
req = X509Req()

req.get_subject().O = 'Telefonica I+D'
req.get_subject().OU = 'Innovation'
req.get_subject().L = 'Madrid'
req.get_subject().ST = 'Madrid'
req.get_subject().C = 'ES'
req.get_subject().emailAddress = 'inno@tid.es'
req.set_pubkey(key)
req.sign(key, 'sha256')

# Get CSR
csr_request = dump_certificate_request(FILETYPE_PEM, req)

# Get private key
private_key = dump_privatekey(FILETYPE_PEM, key)

# Get ca.cert from vault
config = Config().get_config() # get configuration from config.py
url = 'http://{}:{}/v1/secret/data/ca'.format(os.getenv('VAULT_HOSTNAME'), os.getenv('VAULT_PORT'))   # http://vault:8200/v1/secret/data/ca
headers = {'X-Vault-Token': config['ca_factory']['token']}
response = requests.request("GET", url, headers=headers, verify = False)
ca_cert = json.loads(response.text)["data"]["data"]["ca"]

# Request Vault a CA certificate to backoffice application
url = 'http://{}:{}/v1/pki_int/sign/my-ca'.format(os.getenv('VAULT_HOSTNAME'), os.getenv('VAULT_PORT'))  # http://vault:8200/v1/pki_int/sign/my-ca
headers = {'X-Vault-Token': config['ca_factory']['token']}  # token = dev-only-token
data = {
    'format':'pem_bundle',
    'ttl': '43000h',
    'csr': csr_request,
    'common_name': "superadmin"
}
response = requests.request("POST", url, headers=headers, data=data, verify = False)
backoffice_cert = json.loads(response.text)['data']['certificate']

# Save ca_cert
ca_file = open('./backoffice_service/certs/ca.crt', 'wb+')
ca_file.write(bytes(ca_cert, 'utf-8'))
ca_file.close()

# Save private_key 
private_key_file = open("./backoffice_service/certs/backoffice_vault_private_key.key", 'wb+')
private_key_file.write(private_key)
private_key_file.close()

# Save backoffice_cert
certification_file = open('./backoffice_service/certs/backoffice_vault_cert.crt', 'wb+')
certification_file.write(bytes(backoffice_cert, 'utf-8'))
certification_file.close()
# # create public/PRIVATE key
# key = PKey()
# key.generate_key(TYPE_RSA, 2048)

# # Generate CSR 
# req = X509Req()

# req.get_subject().O = 'Telefonica I+D'
# req.get_subject().OU = 'Innovation'
# req.get_subject().L = 'Madrid'
# req.get_subject().ST = 'Madrid'
# req.get_subject().C = 'ES'
# req.get_subject().emailAddress = 'inno@tid.es'
# req.set_pubkey(key)
# req.sign(key, 'sha256')

# # Get CSR
# csr_request = dump_certificate_request(FILETYPE_PEM, req)

# # Get private key
# private_key = dump_privatekey(FILETYPE_PEM, key)

# # Get ca.cert from vault
# config = Config().get_config() # get configuration from config.py
# url = 'http://{}:{}/v1/secret/data/ca'.format(os.getenv('VAULT_HOSTNAME'), os.getenv('VAULT_PORT'))   # http://vault:8200/v1/secret/data/ca
# headers = {'X-Vault-Token': config['ca_factory']['token']}
# response = requests.request("GET", url, headers=headers, verify = False)
# ca_cert = json.loads(response.text)["data"]["data"]["ca"]

# # Request Vault a CA certificate to backoffice application
# url = 'http://{}:{}/v1/pki_int/sign/my-ca'.format(os.getenv('VAULT_HOSTNAME'), os.getenv('VAULT_PORT'))  # http://vault:8200/v1/pki_int/sign/my-ca
# headers = {'X-Vault-Token': config['ca_factory']['token']}  # token = dev-only-token
# data = {
#     'format':'pem_bundle',
#     'ttl': '43000h',
#     'csr': csr_request,
#     'common_name': "superadmin"
# }
# response = requests.request("POST", url, headers=headers, data=data, verify = False)
# backoffice_cert = json.loads(response.text)['data']['certificate']

# # Save ca_cert
# ca_file = open('./backoffice_service/certs/ca.crt', 'wb+')
# ca_file.write(bytes(ca_cert, 'utf-8'))
# ca_file.close()

# # Save private_key 
# private_key_file = open("./backoffice_service/certs/backoffice_vault_private_key.key", 'wb+')
# private_key_file.write(private_key)
# private_key_file.close()

# # Save backoffice_cert
# certification_file = open('./backoffice_service/certs/backoffice_vault_cert.crt', 'wb+')
# certification_file.write(bytes(backoffice_cert, 'utf-8'))
# certification_file.close()

#----------------------------------------
# launch
@@ -85,5 +98,11 @@ certification_file.close()
# the applicacions starts here in every interface and port 8080
# ssl -> contains backoffice_cert.crt and backoffice_key.key
if __name__ == "__main__":
    app.run(debug=True, host='0.0.0.0', port=8080, ssl_context=(
        "/usr/src/app/backoffice_service/certs/backoffice_cert.crt", "/usr/src/app/backoffice_service/certs/backoffice_key.key"))
    app.run(debug=True, host='0.0.0.0', port=8080)



# NOS LO FUMAMOS -> SSL 
# if __name__ == "__main__":
#     app.run(debug=True, host='0.0.0.0', port=8080, ssl_context=(
#         "/usr/src/app/backoffice_service/certs/backoffice_cert.crt", "/usr/src/app/backoffice_service/certs/backoffice_key.key"))
+18 −0
Original line number Diff line number Diff line
@@ -3,33 +3,39 @@
from flask import Blueprint, jsonify
from ..core.operations import Operations
from flask_jwt_extended import jwt_required, get_jwt_identity
from flask_cors import cross_origin

# create blueprint backoffice_routes
backoffice_routes = Blueprint("backoffice_routes", __name__)
operations = Operations()   # create operations object -> operations.py

@cross_origin()
@backoffice_routes.route("/resources/invokers", methods=["GET"])
@jwt_required()
def get_invokers():
    return operations.get_invokers()

@cross_origin()
@backoffice_routes.route("/resources/numInvokers", methods=["GET"])
@jwt_required()
def get_num_ixnvokers():
    return operations.get_num_invokers()


@cross_origin()
@backoffice_routes.route("/resources/providers", methods=["GET"])
@jwt_required()
def get_providers():
    return operations.get_providers()

@cross_origin()
@backoffice_routes.route("/resources/numProviders", methods=["GET"])
@jwt_required()
def get_num_providers():
    return operations.get_num_providers()


@cross_origin()
@backoffice_routes.route("/resources/invokers/security/<invoker_id>", methods=["GET"])
@jwt_required()
def get_invoker_security_context(invoker_id):
@@ -39,6 +45,7 @@ def get_invoker_security_context(invoker_id):
    return operations.get_invoker_security_context(invoker_id)


@cross_origin()
@backoffice_routes.route("/events/<id>", methods=["GET"])
@jwt_required()
def get_events(id):
@@ -47,6 +54,7 @@ def get_events(id):
    return operations.get_events(id)


@cross_origin()
@backoffice_routes.route("/resources/providers/services/<id>", methods=["GET"])
@jwt_required()
def get_provider_services(id):
@@ -54,6 +62,7 @@ def get_provider_services(id):
        return jsonify(message="Invalid apf_id", object=None), 400
    return operations.get_provider_services(id)

@cross_origin()
@backoffice_routes.route("/resources/users/<name>", methods=["GET"])
@jwt_required()
def get_capif_user(name):
@@ -61,6 +70,7 @@ def get_capif_user(name):
        return jsonify(message="Invalid name", object=None), 400
    return operations.get_user(name)

@cross_origin()
@backoffice_routes.route("/users", methods=["GET"])
@jwt_required()
def get_capif_users():
@@ -68,6 +78,7 @@ def get_capif_users():
        return jsonify(message="Invalid id", object=None), 400
    return operations.get_users()

@cross_origin()
@backoffice_routes.route("/resources/numUsers", methods=["GET"])
@jwt_required()
def get_capif_num_users():
@@ -75,6 +86,7 @@ def get_capif_num_users():
        return jsonify(message="Invalid id", object=None), 400
    return operations.get_num_user()

@cross_origin()
@backoffice_routes.route("/invokers/<id>", methods=["DELETE"])
@jwt_required()
def delete_invoker(id):
@@ -82,6 +94,7 @@ def delete_invoker(id):
        return jsonify(message="Invalid id", object=None), 400
    return operations.delete_invoker(id)

@cross_origin()
@backoffice_routes.route("/providers/<id>", methods=["DELETE"])
@jwt_required()
def delete_provider(id):
@@ -96,6 +109,7 @@ def delete_provider(id):
#         return jsonify(message="Invalid id", object=None), 400
#     return operations.delete_user(id)

@cross_origin()
@backoffice_routes.route("/invokers/security/<invoker_id>/<aef_id>/<api_id>", methods=["DELETE"])
@jwt_required()
def delete_security_context(invoker_id, aef_id, api_id):
@@ -104,6 +118,7 @@ def delete_security_context(invoker_id, aef_id, api_id):
    return operations.delete_security_context(invoker_id, aef_id, api_id)


@cross_origin()
@backoffice_routes.route("/providers/services/<apf_id>/<api_id>", methods=["DELETE"])
@jwt_required()
def delete_provider_service(apf_id, api_id):
@@ -111,6 +126,7 @@ def delete_provider_service(apf_id, api_id):
        return jsonify(message="Invalid parameters", object=None), 400
    return operations.delete_provider_service(apf_id, api_id)

@cross_origin()
@backoffice_routes.route("/user/<username>/<password>", methods=["DELETE"])
@jwt_required()
def delete_user(username, password):
@@ -118,11 +134,13 @@ def delete_user(username, password):
        return jsonify(message="Invalid parameters", object=None), 400
    return operations.delete_user(username, password)

@cross_origin()
@backoffice_routes.route("/apis", methods=["GET"])
@jwt_required()
def get_apis():
    return operations.get_apis()

@cross_origin()
@backoffice_routes.route("/apis/num", methods=["GET"])
@jwt_required()
def get_num_apis():    
+20 −12
Original line number Diff line number Diff line
#!/usr/bin/env python3
from flask import Blueprint, jsonify, request
from flask_jwt_extended import JWTManager, create_access_token, create_refresh_token, get_jwt_identity, jwt_required
from flask_cors import cross_origin

# create blueprint backoffice_routes
access_routes = Blueprint("acces_routes", __name__)

@access_routes.route("/login", methods=["POST"])
@cross_origin()
@access_routes.route("/login", methods=["POST", "OPTIONS"])
def login():
    if request.method == "POST":
        username = request.form.get("username", None)
        password = request.form.get("password", None)

@@ -23,6 +26,10 @@ def login():

        return jsonify(access_token=access_token, refresh_token=refresh_token)
    
    elif request.method == "OPTIONS":
        return jsonify("messaje: options CORS OK"), 200

@cross_origin()
@access_routes.route('/refresh', methods=["POST"])
@jwt_required
def refresh():
@@ -34,6 +41,7 @@ def refresh():
# 401 si el token no es válido, para que el front lo refresque
# 200 si es válido

@cross_origin()
@access_routes.route('/auth/me', methods=["GET"])
@jwt_required()
def authme():
+5 −2
Original line number Diff line number Diff line
@@ -33,7 +33,10 @@ class MongoDatabse():
        # print ("MONGO HOSTNAME: ", mongo_hostname)
        # print ("MONGO PORT: ", mongo_port)

        uri = f"mongodb://{self.config['mongo']['user']}:{self.config['mongo']['password']}@mongo:27017"
        uri1 = f"mongodb://{self.config['mongo']['user']}:{self.config['mongo']['password']}@mongo:27017"
        print ("URI MONGO: ", uri1)
        
        uri = "mongodb://root:example@mongo:27017"
        print ("URI MONGO: ", uri)

        #uri = "mongodb://" + self.config['mongo']['user'] + ":" + self.config['mongo']['password'] + "@" + os.getenv('MONGO_HOSTNAME') + ":" + os.getenv('MONGO_PORT')
+0 −1
Original line number Diff line number Diff line
@@ -12,7 +12,6 @@ services:
      - host.docker.internal:host-gateway
      - capifcore:host-gateway
      - register:host-gateway
      - mongo:host-gateway
      - vault:host-gateway
    environment:
      - CAPIF_HOSTNAME=capifcore