Skip to content

Commit

Permalink
Fix MariaDB logical
Browse files Browse the repository at this point in the history
  • Loading branch information
Benoit T. committed Apr 25, 2024
1 parent 7c90ce5 commit e7fd72c
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 3 deletions.
9 changes: 9 additions & 0 deletions R/credentials-db-sql.R
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,15 @@ write_sql_db <- function(config_db, value, name = "credentials") {
value$password <- sapply(value$password, function(x) scrypt::hashPassword(x))
}

if("MariaDBConnection" %in% class(conn)){
is_logical <- sapply(value, function(x) "logical" %in% class(x) || all(x %in% c("TRUE", "FALSE")))
if(any(is_logical)){
for(i in which(is_logical)){
value[[i]] <- as.integer(as.logical(value[[i]]))
}
}
}

if(!"spark_connection" %in% class(conn)){
dbAppendTable(conn = conn, name = name, value = value)
} else {
Expand Down
23 changes: 20 additions & 3 deletions R/module-edit_user.R
Original file line number Diff line number Diff line change
Expand Up @@ -228,9 +228,26 @@ update_user_sql <- function(config_db, list_value, username) {
if(any(c("start", "expire") %in% name) && is.na(value)){
value <- as.Date(NA)
}
tablename <- SQL(config_db$tables$credentials$tablename)
request <- glue_sql(config_db$tables$credentials$update, .con = conn)
dbExecute(conn, request)

if("admin" %in% name){
write_logical <- try({
tablename <- SQL(config_db$tables$credentials$tablename)
request <- glue_sql(config_db$tables$credentials$update, .con = conn)
dbExecute(conn, request)
}, silent = TRUE)

if("try-error" %in% class(write_logical)){
value <- as.integer(as.logical(value))
tablename <- SQL(config_db$tables$credentials$tablename)
request <- glue_sql(config_db$tables$credentials$update, .con = conn)
dbExecute(conn, request)
}
} else {
tablename <- SQL(config_db$tables$credentials$tablename)
request <- glue_sql(config_db$tables$credentials$update, .con = conn)
dbExecute(conn, request)
}

}
}

Expand Down
62 changes: 62 additions & 0 deletions inst/sql_config/mariadb_template.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# needed R packages for DB connection. Use comma separation for multiple dependencies like [package1, package2]
r_packages: [RMariaDB]

# connection using DBI Interface
# Possible to use !expr Sys.getenv(`NAME_ENV_VAR`)
# all args to be passed to DBI::dbConnect
connect:
drv: !expr RMariaDB::MariaDB()
host: "localhost"
user: "user"
password: "********"
db : "dbname"

tables:
credentials:
tablename: credentials # if you want to change tablename
# user, password, start, expire, admin = mandatory with this name
# after you can add optionnal custom columns next, getting back in server.R and admin interface
init: CREATE TABLE {`tablename`} (
`user` varchar(100) PRIMARY KEY,
`password` varchar(256),
`start` date,
`expire` date,
`admin` boolean

)
# Keep same {glue_name*}, update request only if needed.
select: SELECT * FROM {`tablename`} WHERE `user` IN ({user*})
update: UPDATE {`tablename`} SET {`name`} = {value} WHERE `user` IN ({udpate_users*})
delete: DELETE FROM {`tablename`} WHERE `user` IN ({del_users*})
pwd_mngt:
tablename: pwd_mngt # if you want to change tablename
# user, must_change, have_changed, date_change, n_wrong_pwd = mandatory with this name
# No additionnal columns here
init: CREATE TABLE {`tablename`} (
`user` varchar(100) PRIMARY KEY,
`must_change` boolean,
`have_changed` boolean,
`date_change` date,
`n_wrong_pwd` smallint
)
# Keep same {glue_name*}, update request only if needed.
select: SELECT * FROM {`tablename`} WHERE `user` IN ({user*})
update: UPDATE {`tablename`} SET {`name`} = {value} WHERE `user` IN ({udpate_users*})
delete: DELETE FROM {`tablename`} WHERE `user` IN ({del_users*})
logs:
tablename: logs # if you want to change tablename
# all = mandatory with this name
# No additionnal columns here
init: CREATE TABLE {`tablename`} (
`id` SERIAL PRIMARY KEY,
`user` varchar(100),
`server_connected` timestamp,
`token` varchar(100),
`logout` timestamp,
`status` varchar(100),
`app` varchar(100)
)
# Keep same {glue_name*}, update request only if needed.
check_token : SELECT * FROM {`tablename`} WHERE `token` IN ({token*})
select: SELECT * FROM {`tablename`} WHERE `user` IN ({user*}) AND `server_connected` >= {`date_h_begin`} AND `server_connected` <= {`date_h_end`}
update: UPDATE {`tablename`} SET {`name`} = {value} WHERE `token` IN ({token*})

0 comments on commit e7fd72c

Please sign in to comment.