From b5c2d8c6bb654887c6e2ac542fedd1811c613d51 Mon Sep 17 00:00:00 2001 From: Rich FitzJohn Date: Wed, 10 Jan 2018 14:49:41 +0000 Subject: [PATCH] Restrict login to headnodes a user may access --- DESCRIPTION | 2 +- NEWS.md | 4 ++++ R/queue_didehpc.R | 13 +++++++++++++ R/util.R | 4 ++++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index f6eaccfd..4048e07d 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: didehpc Title: DIDE HPC Support -Version: 0.1.4 +Version: 0.1.5 Author: Rich FitzJohn Maintainer: Rich FitzJohn Description: DIDE HPC support. diff --git a/NEWS.md b/NEWS.md index 41165ed7..7e5302de 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,7 @@ +# didehpc 0.1.5 + +* Check what resources a user has on login ([#50](https://github.com/mrc-ide/didehpc/issues/50)) + # didehpc 0.1.4 * Support for machines set up to use `qdrive` ([#48](https://github.com/mrc-ide/didehpc/issues/48)) diff --git a/R/queue_didehpc.R b/R/queue_didehpc.R index dba71b96..cb58c7cb 100644 --- a/R/queue_didehpc.R +++ b/R/queue_didehpc.R @@ -124,6 +124,19 @@ queue_didehpc <- function(context, config = didehpc_config(), root = NULL, message("Already logged in") } else { web_login(self$config) + valid <- web_headnodes() + if (!(self$config$cluster %in% valid)) { + web_logout() + if (length(valid) == 0L) { + fmt <- "You do not have access to any cluster" + } else if (length(valid) == 1L) { + fmt <- "You do not have access to '%s'; try '%s'" + } else { + fmt <- "You do not have access to '%s'; try one of %s" + valid <- paste(squote(valid), collapse = ", ") + } + stop(sprintf(fmt, self$config$cluster, valid)) + } } self$logged_in <- TRUE } diff --git a/R/util.R b/R/util.R index 693e040e..d8fe5886 100644 --- a/R/util.R +++ b/R/util.R @@ -104,6 +104,10 @@ dquote <- function(x) { sprintf('"%s"', x) } +squote <- function(x) { + sprintf("'%s'", x) +} + backup <- function(filename, verbose = TRUE, move = FALSE) { if (file.exists(filename)) { pat <- sprintf("%s\\.([0-9]+)", basename(filename))