Commit 0d7a917f authored by Cristiano Urban's avatar Cristiano Urban
Browse files

Automatically add the user node in the 'node' table if not present.

parent fcda301d
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -186,6 +186,8 @@ DESCRIPTION
       IMPORTANT NOTE:
       the VOSpace Transfer Service automatically populates the 'users' table in the database
       by previously quering the authentication system (RAP).
       It also adds the user node on the 'node' table, if not present (e.g. '/john.smith' for 
       the user 'john.smith').
       So, please, use this client only if you need to handle situations involing users that
       for some reason are not recognized by the authentication system.
    """)
+12 −7
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ from db_connector import DbConnector
from exceptions import MultipleUsersException
from job import Job
from job_queue import JobQueue
from node import Node
from rap_client import RapClient
from redis_log_handler import RedisLogHandler
from redis_rpc_server import RedisRPCServer
@@ -78,9 +79,9 @@ class DataRPCServer(RedisRPCServer):
                         "errorCode": 4,
                         "errorMsg":  errorMsg }
        elif requestBody["requestType"] == "CSTORE" or requestBody["requestType"] == "HSTORE":
            user = requestBody["userName"]
            username = requestBody["userName"]
            try:
                userInDb = self.dbConn.userExists(user)
                userInDb = self.dbConn.userExists(username)
            except Exception:
                errorMsg = "Database error."
                self.logger.exception(errorMsg)
@@ -90,7 +91,7 @@ class DataRPCServer(RedisRPCServer):
                return response            
            try:
                rapCli = RapClient()
                rapInfo = rapCli.getUserInfo(user)
                rapInfo = rapCli.getUserInfo(username)
            except HTTPException:
                errorMsg = "HTTP exception when trying to connect to RAP."
                self.logger.exception(errorMsg)
@@ -132,9 +133,9 @@ class DataRPCServer(RedisRPCServer):
                             "errorCode": 2,
                             "errorMsg": errorMsg }
                return response
            #folderPath = "/home/" + user + "/store"
            folderPath = self.storageStorePath.replace("{username}", user)
            userInfo = self.systemUtils.userInfo(user)
            #folderPath = "/home/" + username + "/store"
            folderPath = self.storageStorePath.replace("{username}", username)
            userInfo = self.systemUtils.userInfo(username)
            # Check if the user exists on the transfer node and is registered in the database
            if not userInfo:
                # the user does not exist on the system
@@ -153,8 +154,12 @@ class DataRPCServer(RedisRPCServer):
            else:
                if not userInDb and rapInfo:
                    # retrieve data from RAP and insert them in db
                    userNode = Node(username, "container")
                    userNode.setCreatorId(rapInfo["id"])
                    userNode.setParentPath("")
                    try:
                        self.dbConn.insertUser(rapInfo["id"], user, rapInfo["email"])
                        self.dbConn.insertNode(userNode)
                        self.dbConn.insertUser(rapInfo["id"], username, rapInfo["email"])
                    except Exception:
                        errorMsg = "Database error."
                        self.logger.exception(errorMsg)
+5 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ from config import Config
from db_connector import DbConnector
from job_queue import JobQueue
from job import Job
from node import Node
from rap_client import RapClient, MultipleUsersException
from redis_log_handler import RedisLogHandler
from redis_rpc_server import RedisRPCServer
@@ -101,7 +102,11 @@ class ImportRPCServer(RedisRPCServer):
            else:
                if not userInDb and rapInfo:
                    # retrieve data from RAP and insert them in db
                    userNode = Node(username, "container")
                    userNode.setCreatorId(rapInfo["id"])
                    userNode.setParentPath("")
                    try:
                        self.dbConn.insertNode(userNode)
                        self.dbConn.insertUser(rapInfo["id"], username, rapInfo["email"])
                    except Exception:
                        errorMsg = "Database error."
+17 −4
Original line number Diff line number Diff line
@@ -8,10 +8,11 @@
import logging
import os

from redis_log_handler import RedisLogHandler
from redis_rpc_server import RedisRPCServer
from config import Config
from db_connector import DbConnector
from node import Node
from redis_log_handler import RedisLogHandler
from redis_rpc_server import RedisRPCServer


class UserRPCServer(RedisRPCServer):
@@ -62,6 +63,19 @@ class UserRPCServer(RedisRPCServer):
                return response
            else:
                if result:
                    userNode = Node(username, "container")
                    userNode.setCreatorId(userId)
                    userNode.setParentPath("")
                    try:
                        self.dbConn.insertNode(userNode)
                    except Exception:
                        errorMsg = "Database error."
                        self.logger.exception(errorMsg)
                        response = { "responseType": "ERROR",
                                     "errorCode": 2,
                                     "errorMsg": errorMsg }
                        return response
                    else:
                        response = { "responseType": "USER_ADD_DONE" }
                else:
                    errorMsg = "User already exists."
@@ -120,4 +134,3 @@ class UserRPCServer(RedisRPCServer):
    def run(self):
        self.logger.info(f"Starting RPC server of type {self.type}...")
        super(UserRPCServer, self).run()