-
Ravi Tripathi authored802109f5
dir_verify.py 2.26 KiB
#!/usr/bin/env python
import os
import sys
import json
import shutil
import rc_util
from pathlib import Path
from rc_rmq import RCRMQ
import rabbit_config as rcfg
task = "dir_verify"
dirs = rcfg.User_dirs
args = rc_util.get_args()
logger = rc_util.get_logger(args)
# Instantiate rabbitmq object
rc_rmq = RCRMQ({"exchange": "RegUsr", "exchange_type": "topic"})
def dir_verify(ch, method, properties, body):
msg = json.loads(body)
username = msg["username"]
msg["task"] = task
msg["success"] = True
missing_dirs = []
try:
for d in dirs:
path = Path(d) / msg["username"]
if args.dry_run:
logger.info(f"Checking dirs: {path}")
else:
if not path.exists():
# check if dirs exist and record any missing dirs
missing_dirs.append(path)
msg["success"] = False
msg["errmsg"] = f"Error: missing dirs {missing_dirs}"
logger.info(f"{path} does not exist")
else:
# check existing dirs for correct ownership and permissions
status = os.stat(path)
mask = oct(status.st_mode)[-3:]
uid = str(status.st_uid)
gid = str(status.st_gid)
if (
mask != "700"
or uid != msg["uid"]
or gid != msg["gid"]
):
msg["success"] = False
msg[
"errmsg"
] = f"Error: dir {path} permissions or ownership are wrong"
except Exception as exception:
msg["success"] = False
msg["errmsg"] = "Exception raised, check the logs for stack trace"
logger.error("", exc_info=True)
# send confirm message
rc_rmq.publish_msg(
{"routing_key": "confirm." + msg["queuename"], "msg": msg}
)
logger.debug(f"User {username} confirmation sent")
ch.basic_ack(delivery_tag=method.delivery_tag)
logger.info(f"Start listening to queue: {task}")
rc_rmq.start_consume(
{"queue": task, "routing_key": "verify.*", "cb": dir_verify}
)
logger.info("Disconnected")
rc_rmq.disconnect()