-
Notifications
You must be signed in to change notification settings - Fork 1
/
auth_user.R
115 lines (98 loc) · 2.85 KB
/
auth_user.R
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
108
109
110
111
112
113
114
115
#' Check or Get Bluesky User
#'
#' @concept auth
#'
#' @return logical if `has`, user if `get`
#' @export
#'
#' @name user
#'
#' @examples
#' has_bluesky_user()
has_bluesky_user <- function() {
!Sys.getenv('BLUESKY_APP_USER') %in% ''
}
#' @rdname user
#' @export
get_bluesky_user <- function() {
user <- Sys.getenv('BLUESKY_APP_USER')
# if (user == '') {
# cli::cli_abort('Must set a user as {.val BLUESKY_APP_USER}.')
# }
user
}
#' Adds Bluesky User to .Renviron.
#'
#' @concept auth
#'
#' @param user Character. User to add to add.
#' @param overwrite Defaults to FALSE. Boolean. Should existing `BLUESKY_APP_USER` in Renviron be overwritten?
#' @param install Defaults to FALSE. Boolean. Should this be added '~/.Renviron' file?
#' @param r_env Path to install to if `install` is `TRUE`.
#'
#' @return user, invisibly
#' @export
#'
#' @examples
#' example_env <- tempfile(fileext = '.Renviron')
#' set_bluesky_user('CRAN_EXAMPLE.bsky.social', r_env = example_env)
#' # r_env should likely be: file.path(Sys.getenv('HOME'), '.Renviron')
set_bluesky_user <- function(user, overwrite = FALSE, install = FALSE,
r_env = NULL) {
if (missing(user)) {
cli::cli_abort('Input {.arg user} cannot be missing.')
}
name <- 'BLUESKY_APP_USER'
user <- list(user)
names(user) <- name
if (user == 'CRAN_EXAMPLE.bsky.social') {
cli::cli_inform('No username set when invalid test username is provided.')
return(invisible(user))
}
if (install) {
if (is.null(r_env)) {
r_env <- file.path(Sys.getenv('HOME'), '.Renviron')
if (interactive()) {
utils::askYesNo(paste0('Install to', r_env, '?'))
} else {
cli::cli_abort(c('No path set and not run interactively.',
i = 'Rerun with {.arg r_env} set, possibly to {.file {r_env}}'
))
}
}
if (!file.exists(r_env)) {
file.create(r_env)
}
lines <- readLines(r_env)
newline <- paste0(name, "='", user, "'")
exists <- grepl(x = lines, paste0(name, '='))
if (any(exists)) {
if (sum(exists) > 1) {
cli::cli_abort('Multiple entries in .Renviron found.\nEdit manually with {.fn usethis::edit_r_environ}.')
}
if (overwrite) {
lines[exists] <- newline
writeLines(lines, r_env)
do.call(Sys.setenv, user)
} else {
cli::cli_inform('{.arg BLUESKY_APP_USER} already exists in .Renviron. \nEdit manually with {.fn usethis::edit_r_environ} or set {.code overwrite = TRUE}.')
}
} else {
lines[length(lines) + 1] <- newline
writeLines(lines, r_env)
do.call(Sys.setenv, user)
}
} else {
do.call(Sys.setenv, user)
}
invisible(user)
}
#' @rdname user
#' @export
bs_get_user <- get_bluesky_user
#' @rdname set_bluesky_user
#' @export
bs_set_user <- set_bluesky_user
#' @rdname user
#' @export
bs_has_user <- has_bluesky_user