Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix for local user update profile #3939

Merged
merged 4 commits into from
Oct 3, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ e2e-reports/
src/jetstream/jetstream
src/jetstream/console-database.db
src/jetstream/config.properties
src/jetstream/db/dbconf.yml

# Customisations

Expand Down
55 changes: 55 additions & 0 deletions build/tools/mysqldb-dev.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#!/usr/bin/env bash

echo "Starting MariaDB database for development"

STRATOS_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && cd ../.. && pwd)"
echo $STRATOS_PATH

docker stop stratos-db
docker rm stratos-db

ID=$(docker run --name stratos-db -d -e MYSQL_ROOT_PASSWORD=dbroot -p 3306:3306 splatform/stratos-mariadb)
echo $ID

rm -f dbsetup.sql init.sh
cat <<EOF > dbsetup.sql
CREATE DATABASE stratosdb;
CREATE USER stratos IDENTIFIED BY 'strat0s';
GRANT ALL PRIVILEGES ON stratosdb.* to 'stratos'@'%';
EOF

cat <<EOF > init.sh
#!/usr/bin/env bash
mysql -uroot -pdbroot < /dbsetup.sql
EOF

chmod +x init.sh
docker cp ./dbsetup.sql ${ID}:/dbsetup.sql
docker cp ./init.sh ${ID}:/init.sh
rm dbsetup.sql init.sh

#Fetch dockerize tool
wget https://github.com/jwilder/dockerize/releases/download/v0.6.1/dockerize-linux-amd64-v0.6.1.tar.gz
tar -xzvf dockerize-linux-amd64-v0.6.1.tar.gz
rm dockerize-linux-amd64-v0.6.1.tar.gz

chmod +x ./dockerize
docker cp ./dockerize ${ID}:/dockerize
rm dockerize

#We us wait for the internal socket to come up before running init script
echo "Just waiting a few seconds for the DB to come online ..."
docker exec -t ${ID} /dockerize -wait file:///var/run/mysql/mysql.sock -timeout 1m

echo "Database ready"
docker exec -t ${ID} /init.sh

mkdir -p ${STRATOS_PATH}/src/jetstream/db
cp ${STRATOS_PATH}/deploy/db/dbconf.yml ${STRATOS_PATH}/src/jetstream/db

if [ -f ${STRATOS_PATH}/src/jetstream/jetstream ]; then
${STRATOS_PATH}/src/jetstream/jetstream --env=mariadb-dev up
else
echo "Build the Stratos backend and run db migrations with:"
echo " ./jetstream --env=mariadb-local up"
fi
27 changes: 27 additions & 0 deletions build/tools/postgres-dev.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!/usr/bin/env bash

echo "Startind Postgres database for development"

STRATOS_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && cd ../.. && pwd)"
echo $STRATOS_PATH

docker stop stratos-db
docker rm stratos-db

ID=$(docker run --name stratos-db -d -e POSTGRES_DB=stratosdb -e POSTGRES_USER=stratos -e POSTGRES_PASSWORD=strat0s -p 5432:5432 postgres)
echo $ID

echo "Just waiting a few seconds for the DB to come online ..."
sleep 5

echo "Database ready"

mkdir -p ${STRATOS_PATH}/src/jetstream/db
cp ${STRATOS_PATH}/deploy/db/dbconf.yml ${STRATOS_PATH}/src/jetstream/db

if [ -f ${STRATOS_PATH}/src/jetstream/jetstream ]; then
${STRATOS_PATH}/src/jetstream/jetstream --env=postgres-dev up
else
echo "Build the Stratos backend and run db migrations with:"
echo " ./jetstream --env=postgres-local up"
fi
6 changes: 6 additions & 0 deletions deploy/db/dbconf.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,9 @@ mariadb-development:
mariadb-k8s:
driver: mysql
open: $DB_USER:$DB_PASSWORD@tcp($DB_HOST:$DB_PORT)/$DB_DATABASE_NAME?parseTime=true
mariadb-dev:
driver: mysql
open: stratos:strat0s@tcp(127.0.0.1:3306)/stratosdb?parseTime=true
postgres-dev:
driver: postgres
open: host='127.0.0.1' port=5432 user='stratos' password='strat0s' dbname='stratosdb' sslmode='disable'
35 changes: 35 additions & 0 deletions src/jetstream/datastore/20190930092500_LocalUsersTriggerFix.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package datastore

import (
"database/sql"
"strings"

"bitbucket.org/liamstask/goose/lib/goose"
)

func init() {
RegisterMigration(20190930092500, "LocalUsersTriggerFix", func(txn *sql.Tx, conf *goose.DBConf) error {

var dropTrigger string

if strings.Contains(conf.Driver.Name, "sqlite") {
//SQLITE
dropTrigger = "DROP TRIGGER update_last_updated;"
}
if strings.Contains(conf.Driver.Name, "postgres") {
// POSTGRESQL
dropTrigger = "DROP TRIGGER update_trigger ON local_users;"
} else if strings.Contains(conf.Driver.Name, "mysql") {
// MYSQL
dropTrigger = "DROP TRIGGER update_last_updated;"
}

if len(dropTrigger) > 0 {
// Remove the trigger
_, err := txn.Exec(dropTrigger)
return err
}

return nil
})
}
19 changes: 18 additions & 1 deletion src/jetstream/default.config.properties
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,21 @@ INVITE_USER_CLIENT_SECRET=
# AUTH_ENDPOINT_TYPE=local
# LOCAL_USER=localuser
# LOCAL_USER_PASSWORD=localuserpass
# LOCAL_USER_SCOPE=stratos.admin
# LOCAL_USER_SCOPE=stratos.admin

# MariaDB database for local dev
# DATABASE_PROVIDER=mysql
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_USER=stratos
# DB_PASSWORD=strat0s
# DB_DATABASE_NAME=stratosdb

# Postgresql database for local dev
# DATABASE_PROVIDER=pgsql
# DB_HOST=127.0.0.1
# DB_PORT=5432
# DB_USER=stratos
# DB_PASSWORD=strat0s
# DB_DATABASE_NAME=stratosdb
# DB_SSL_MODE=disable
10 changes: 5 additions & 5 deletions src/jetstream/repository/localusers/psql_localusers.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ var findPasswordHash = `SELECT password_hash
var findUserGUID = `SELECT user_guid FROM local_users WHERE user_name = $1`
var findUserScope = `SELECT user_scope FROM local_users WHERE user_guid = $1`
var insertLocalUser = `INSERT INTO local_users (user_guid, password_hash, user_name, user_email, user_scope, given_name, family_name) VALUES ($1, $2, $3, $4, $5, $6, $7)`
var updateLocalUser = `UPDATE local_users SET password_hash=$1, user_name=$2, user_email=$3, user_scope=$4, given_name=$5, family_name=$6 WHERE user_guid=$7`
var updateLocalUser = `UPDATE local_users SET password_hash=$1, user_name=$2, user_email=$3, user_scope=$4, given_name=$5, family_name=$6, last_updated=CURRENT_TIMESTAMP WHERE user_guid=$7`
var updateLastLoginTime = `UPDATE local_users SET last_login=$1 WHERE user_guid = $2`
var findLastLoginTime = `SELECT last_login FROM local_users WHERE user_guid = $1`
var getTableCount = `SELECT count(user_guid) FROM local_users`
Expand Down Expand Up @@ -112,9 +112,9 @@ func (p *PgsqlLocalUsersRepository) FindUser(userGUID string) (interfaces.LocalU

// temp vars to retrieve db data
var (
email sql.NullString
scope sql.NullString
givenName sql.NullString
email sql.NullString
scope sql.NullString
givenName sql.NullString
familyName sql.NullString
)

Expand Down Expand Up @@ -182,7 +182,7 @@ func (p *PgsqlLocalUsersRepository) UpdateLastLoginTime(userGUID string, loginTi
var result sql.Result
var err error
if result, err = p.db.Exec(updateLastLoginTime, loginTime, userGUID); err != nil {
msg := "Unable to update last local user login time: %v"
msg := "Unable to update last local user login time for user userGUID : %v"
return fmt.Errorf(msg, err)
}

Expand Down