#117: Added environment variable for download. Only admin available.
This commit is contained in:
@@ -3,9 +3,10 @@ ORG_ID=Shuffle
|
|||||||
ENVIRONMENT_NAME=Shuffle
|
ENVIRONMENT_NAME=Shuffle
|
||||||
|
|
||||||
# Remote github config for first load
|
# Remote github config for first load
|
||||||
|
SHUFFLE_DOWNLOAD_WORKFLOW_LOCATION=
|
||||||
|
SHUFFLE_DOWNLOAD_AUTH_USERNAME=
|
||||||
|
SHUFFLE_DOWNLOAD_AUTH_PASSWORD=
|
||||||
APP_DOWNLOAD_LOCATION=https://github.com/frikky/shuffle-apps
|
APP_DOWNLOAD_LOCATION=https://github.com/frikky/shuffle-apps
|
||||||
APP_DOWNLOAD_AUTH_USERNAME=
|
|
||||||
APP_DOWNLOAD_AUTH_PASSWORD=
|
|
||||||
|
|
||||||
# User config for first load. Username & PW: min length 3
|
# User config for first load. Username & PW: min length 3
|
||||||
SHUFFLE_DEFAULT_USERNAME=
|
SHUFFLE_DEFAULT_USERNAME=
|
||||||
|
|||||||
+26
-2
@@ -6327,8 +6327,8 @@ func runInit(ctx context.Context) {
|
|||||||
url = "https://github.com/frikky/shuffle-apps"
|
url = "https://github.com/frikky/shuffle-apps"
|
||||||
}
|
}
|
||||||
|
|
||||||
username := os.Getenv("APP_DOWNLOAD_AUTH_USERNAME")
|
username := os.Getenv("SHUFFLE_DOWNLOAD_AUTH_USERNAME")
|
||||||
password := os.Getenv("APP_DOWNLOAD_AUTH_PASSWORD")
|
password := os.Getenv("SHUFFLE_DOWNLOAD_AUTH_PASSWORD")
|
||||||
cloneOptions := &git.CloneOptions{
|
cloneOptions := &git.CloneOptions{
|
||||||
URL: url,
|
URL: url,
|
||||||
}
|
}
|
||||||
@@ -6388,6 +6388,30 @@ func runInit(ctx context.Context) {
|
|||||||
log.Printf("Finished downloading extra API samples")
|
log.Printf("Finished downloading extra API samples")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
workflowLocation := os.Getenv("SHUFFLE_DOWNLOAD_WORKFLOW_LOCATION")
|
||||||
|
if len(workflowLocation) > 0 {
|
||||||
|
log.Printf("Downloading WORKFLOWS from %s if no workflows - EXTRA workflows", workflowLocation)
|
||||||
|
q := datastore.NewQuery("workflow")
|
||||||
|
var workflows []Workflow
|
||||||
|
_, err = dbclient.GetAll(ctx, q, &workflows)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error getting workflows: %s", err)
|
||||||
|
} else {
|
||||||
|
if len(workflows) == 0 {
|
||||||
|
username := os.Getenv("SHUFFLE_DOWNLOAD_AUTH_USERNAME")
|
||||||
|
password := os.Getenv("SHUFFLE_DOWNLOAD_AUTH_PASSWORD")
|
||||||
|
err = loadGithubWorkflows(workflowLocation, username, password, "")
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Failed to upload workflows from github: %s", err)
|
||||||
|
} else {
|
||||||
|
log.Printf("Finished downloading workflows from github!")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.Printf("Skipping because there are %d workflows already", len(workflows))
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
log.Printf("Finished INIT")
|
log.Printf("Finished INIT")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+66
-54
@@ -1121,6 +1121,10 @@ func getWorkflows(resp http.ResponseWriter, request *http.Request) {
|
|||||||
|
|
||||||
// With user, do a search for workflows with user or user's org attached
|
// With user, do a search for workflows with user or user's org attached
|
||||||
q := datastore.NewQuery("workflow").Filter("owner =", user.Id)
|
q := datastore.NewQuery("workflow").Filter("owner =", user.Id)
|
||||||
|
if user.Role == "admin" {
|
||||||
|
q = datastore.NewQuery("workflow")
|
||||||
|
}
|
||||||
|
|
||||||
var workflows []Workflow
|
var workflows []Workflow
|
||||||
_, err = dbclient.GetAll(ctx, q, &workflows)
|
_, err = dbclient.GetAll(ctx, q, &workflows)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -4045,6 +4049,62 @@ func deployWebhookFunction(ctx context.Context, name, localization, applocation
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func loadGithubWorkflows(url, username, password, userId string) error {
|
||||||
|
fs := memfs.New()
|
||||||
|
|
||||||
|
if strings.Contains(url, "github") || strings.Contains(url, "gitlab") || strings.Contains(url, "bitbucket") {
|
||||||
|
cloneOptions := &git.CloneOptions{
|
||||||
|
URL: url,
|
||||||
|
}
|
||||||
|
|
||||||
|
// FIXME: Better auth.
|
||||||
|
if len(username) > 0 && len(password) > 0 {
|
||||||
|
cloneOptions.Auth = &http2.BasicAuth{
|
||||||
|
|
||||||
|
Username: username,
|
||||||
|
Password: password,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
storer := memory.NewStorage()
|
||||||
|
r, err := git.Clone(storer, fs, cloneOptions)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Failed loading repo into memory: %s", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
dir, err := fs.ReadDir("/")
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("FAiled reading folder: %s", err)
|
||||||
|
}
|
||||||
|
_ = r
|
||||||
|
|
||||||
|
log.Printf("Starting workflow folder iteration")
|
||||||
|
iterateWorkflowGithubFolders(fs, dir, "", "", userId)
|
||||||
|
|
||||||
|
} else if strings.Contains(url, "s3") {
|
||||||
|
//https://docs.aws.amazon.com/sdk-for-go/api/service/s3/
|
||||||
|
|
||||||
|
//sess := session.Must(session.NewSession())
|
||||||
|
//downloader := s3manager.NewDownloader(sess)
|
||||||
|
|
||||||
|
//// Write the contents of S3 Object to the file
|
||||||
|
//storer := memory.NewStorage()
|
||||||
|
//n, err := downloader.Download(storer, &s3.GetObjectInput{
|
||||||
|
// Bucket: aws.String(myBucket),
|
||||||
|
// Key: aws.String(myString),
|
||||||
|
//})
|
||||||
|
//if err != nil {
|
||||||
|
// return fmt.Errorf("failed to download file, %v", err)
|
||||||
|
//}
|
||||||
|
//fmt.Printf("file downloaded, %d bytes\n", n)
|
||||||
|
} else {
|
||||||
|
return errors.New(fmt.Sprintf("URL %s is unsupported when downloading workflows", url))
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func loadSpecificWorkflows(resp http.ResponseWriter, request *http.Request) {
|
func loadSpecificWorkflows(resp http.ResponseWriter, request *http.Request) {
|
||||||
cors := handleCors(resp, request)
|
cors := handleCors(resp, request)
|
||||||
if cors {
|
if cors {
|
||||||
@@ -4064,7 +4124,7 @@ func loadSpecificWorkflows(resp http.ResponseWriter, request *http.Request) {
|
|||||||
if user.Role != "admin" {
|
if user.Role != "admin" {
|
||||||
log.Printf("Wrong user (%s) when downloading from github", user.Username)
|
log.Printf("Wrong user (%s) when downloading from github", user.Username)
|
||||||
resp.WriteHeader(401)
|
resp.WriteHeader(401)
|
||||||
resp.Write([]byte(`{"success": false}`))
|
resp.Write([]byte(`{"success": false, "reason": "Downloading remotely requires admin"}`))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4093,59 +4153,11 @@ func loadSpecificWorkflows(resp http.ResponseWriter, request *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
fs := memfs.New()
|
err = loadGithubWorkflows(tmpBody.URL, tmpBody.Field1, tmpBody.Field2, user.Id)
|
||||||
|
if err != nil {
|
||||||
if strings.Contains(tmpBody.URL, "github") || strings.Contains(tmpBody.URL, "gitlab") || strings.Contains(tmpBody.URL, "bitbucket") {
|
log.Printf("Failed to update workflows: %s", err)
|
||||||
cloneOptions := &git.CloneOptions{
|
|
||||||
URL: tmpBody.URL,
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIXME: Better auth.
|
|
||||||
if len(tmpBody.Field1) > 0 && len(tmpBody.Field2) > 0 {
|
|
||||||
cloneOptions.Auth = &http2.BasicAuth{
|
|
||||||
|
|
||||||
Username: tmpBody.Field1,
|
|
||||||
Password: tmpBody.Field2,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
storer := memory.NewStorage()
|
|
||||||
r, err := git.Clone(storer, fs, cloneOptions)
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("Failed loading repo into memory: %s", err)
|
|
||||||
resp.WriteHeader(401)
|
|
||||||
resp.Write([]byte(fmt.Sprintf(`{"success": false, "reason": "%s"}`, err)))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
dir, err := fs.ReadDir("/")
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("FAiled reading folder: %s", err)
|
|
||||||
}
|
|
||||||
_ = r
|
|
||||||
|
|
||||||
log.Printf("Starting workflow folder iteration")
|
|
||||||
iterateWorkflowGithubFolders(fs, dir, "", "", user.Id)
|
|
||||||
|
|
||||||
} else if strings.Contains(tmpBody.URL, "s3") {
|
|
||||||
//https://docs.aws.amazon.com/sdk-for-go/api/service/s3/
|
|
||||||
|
|
||||||
//sess := session.Must(session.NewSession())
|
|
||||||
//downloader := s3manager.NewDownloader(sess)
|
|
||||||
|
|
||||||
//// Write the contents of S3 Object to the file
|
|
||||||
//storer := memory.NewStorage()
|
|
||||||
//n, err := downloader.Download(storer, &s3.GetObjectInput{
|
|
||||||
// Bucket: aws.String(myBucket),
|
|
||||||
// Key: aws.String(myString),
|
|
||||||
//})
|
|
||||||
//if err != nil {
|
|
||||||
// return fmt.Errorf("failed to download file, %v", err)
|
|
||||||
//}
|
|
||||||
//fmt.Printf("file downloaded, %d bytes\n", n)
|
|
||||||
} else {
|
|
||||||
resp.WriteHeader(401)
|
resp.WriteHeader(401)
|
||||||
resp.Write([]byte(fmt.Sprintf(`{"success": false, "reason": "%s is unsupported. Try e.g. github"}`, tmpBody.URL)))
|
resp.Write([]byte(`{"success": false}`))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4489,7 +4501,7 @@ func iterateWorkflowGithubFolders(fs billy.Filesystem, dir []os.FileInfo, extra
|
|||||||
log.Printf("Failed setting (download) workflow: %s", err)
|
log.Printf("Failed setting (download) workflow: %s", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
log.Printf("Uploaded workflow %s!", filename)
|
log.Printf("Uploaded workflow %s for user %s!", filename, userId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -129,7 +129,8 @@ const Admin = (props) => {
|
|||||||
if (responseJson["success"] === false) {
|
if (responseJson["success"] === false) {
|
||||||
alert.error("Failed setting new password")
|
alert.error("Failed setting new password")
|
||||||
} else {
|
} else {
|
||||||
alert.success("Changed password!")
|
alert.success("Successfully password!")
|
||||||
|
setSelectedUserModalOpen(false)
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user