Fixed Theme name issue and updated backend to 0.4.17
This commit is contained in:
@@ -66,7 +66,7 @@ SHUFFLE_BASE_IMAGE_TAG_SUFFIX="-1.1.0"
|
|||||||
SHUFFLE_CONTAINER_AUTO_CLEANUP=false
|
SHUFFLE_CONTAINER_AUTO_CLEANUP=false
|
||||||
SHUFFLE_ELASTIC=true
|
SHUFFLE_ELASTIC=true
|
||||||
SHUFFLE_LOGS_DISABLED=false
|
SHUFFLE_LOGS_DISABLED=false
|
||||||
SHUFFLE_CHAT_DISABLED=false # Controls support chat
|
SHUFFLE_CHAT_DISABLED=false # Controls support chat
|
||||||
SHUFFLE_RERUN_SCHEDULE=300
|
SHUFFLE_RERUN_SCHEDULE=300
|
||||||
SHUFFLE_DISABLE_RERUN_AND_ABORT=false
|
SHUFFLE_DISABLE_RERUN_AND_ABORT=false
|
||||||
SHUFFLE_WORKER_SERVER_URL= # Definition in case Worker & Orborus is talking to the wrong server
|
SHUFFLE_WORKER_SERVER_URL= # Definition in case Worker & Orborus is talking to the wrong server
|
||||||
|
|||||||
+3
-3
@@ -1,10 +1,10 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
docker stop shuffle-backend
|
docker stop shuffle-backend
|
||||||
docker rm shuffle-backend
|
docker rm shuffle-backend
|
||||||
docker rmi ghcr.io/shuffle/shuffle-backend:latest
|
docker rmi ghcr.io/shuffle/shuffle-backend:nightly
|
||||||
|
|
||||||
docker build . -t ghcr.io/shuffle/shuffle-backend:latest
|
docker build . -t ghcr.io/shuffle/shuffle-backend:nightly
|
||||||
#docker push ghcr.io/shuffle/shuffle-backend:latest
|
docker push ghcr.io/shuffle/shuffle-backend:nightly
|
||||||
|
|
||||||
echo "Starting server"
|
echo "Starting server"
|
||||||
#docker run -it \
|
#docker run -it \
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ require (
|
|||||||
github.com/gorilla/mux v1.8.0
|
github.com/gorilla/mux v1.8.0
|
||||||
github.com/h2non/filetype v1.1.3
|
github.com/h2non/filetype v1.1.3
|
||||||
github.com/satori/go.uuid v1.2.0
|
github.com/satori/go.uuid v1.2.0
|
||||||
github.com/shuffle/shuffle-shared v0.4.14
|
github.com/shuffle/shuffle-shared v0.4.17
|
||||||
golang.org/x/crypto v0.3.0
|
golang.org/x/crypto v0.3.0
|
||||||
google.golang.org/api v0.103.0
|
google.golang.org/api v0.103.0
|
||||||
google.golang.org/appengine v1.6.7
|
google.golang.org/appengine v1.6.7
|
||||||
|
|||||||
@@ -400,7 +400,7 @@ func handleGetWorkflowqueue(resp http.ResponseWriter, request *http.Request) {
|
|||||||
// Add to start of org.Priorities
|
// Add to start of org.Priorities
|
||||||
org.Priorities = append(org.Priorities, shuffle.Priority{
|
org.Priorities = append(org.Priorities, shuffle.Priority{
|
||||||
Name: fmt.Sprintf("High CPU in environment %s", orgId),
|
Name: fmt.Sprintf("High CPU in environment %s", orgId),
|
||||||
Description: fmt.Sprintf("The environment %s has been using more than %d percent CPU.", orgId, percentageCheck),
|
Description: fmt.Sprintf("The environment %s has been using more than %d percent CPU. This indicates you may need to look at scaling.", orgId, percentageCheck),
|
||||||
Type: "scale",
|
Type: "scale",
|
||||||
Active: true,
|
Active: true,
|
||||||
URL: fmt.Sprintf("/admin?tab=environments"),
|
URL: fmt.Sprintf("/admin?tab=environments"),
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import React, { useState, useEffect } from 'react';
|
|||||||
import CytoscapeComponent from 'react-cytoscapejs';
|
import CytoscapeComponent from 'react-cytoscapejs';
|
||||||
import frameworkStyle from '../frameworkStyle.jsx';
|
import frameworkStyle from '../frameworkStyle.jsx';
|
||||||
import { v4 as uuidv4 } from "uuid";
|
import { v4 as uuidv4 } from "uuid";
|
||||||
import theme from '../theme';
|
import theme from '../theme.jsx';
|
||||||
import { useAlert } from "react-alert";
|
import { useAlert } from "react-alert";
|
||||||
|
|
||||||
import AppSearch from '../components/Appsearch.jsx';
|
import AppSearch from '../components/Appsearch.jsx';
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React, { useState, useEffect } from 'react';
|
import React, { useState, useEffect } from 'react';
|
||||||
|
|
||||||
import theme from '../theme';
|
import theme from '../theme.jsx';
|
||||||
import AppSearch from './Appsearch.jsx';
|
import AppSearch from './Appsearch.jsx';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React, { useState, useEffect } from "react";
|
import React, { useState, useEffect } from "react";
|
||||||
|
|
||||||
import theme from '../theme';
|
import theme from '../theme.jsx';
|
||||||
import { useAlert } from "react-alert";
|
import { useAlert } from "react-alert";
|
||||||
import {
|
import {
|
||||||
Tooltip,
|
Tooltip,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import React, { useState, useEffect } from "react";
|
import React, { useState, useEffect } from "react";
|
||||||
import theme from '../theme';
|
import theme from '../theme.jsx';
|
||||||
import { v4 as uuidv4 } from "uuid";
|
import { v4 as uuidv4 } from "uuid";
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React, { useState, useEffect } from "react";
|
import React, { useState, useEffect } from "react";
|
||||||
import ReactGA from 'react-ga4';
|
import ReactGA from 'react-ga4';
|
||||||
import theme from "../theme";
|
import theme from "../theme.jsx";
|
||||||
|
|
||||||
import { useTheme } from "@material-ui/core/styles";
|
import { useTheme } from "@material-ui/core/styles";
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import React, { useState, useEffect } from "react";
|
import React, { useState, useEffect } from "react";
|
||||||
import theme from "../theme";
|
import theme from "../theme.jsx";
|
||||||
import {
|
import {
|
||||||
Tooltip,
|
Tooltip,
|
||||||
Divider,
|
Divider,
|
||||||
@@ -48,9 +48,10 @@ const CacheView = (props) => {
|
|||||||
const [listCache, setListCache] = React.useState([]);
|
const [listCache, setListCache] = React.useState([]);
|
||||||
const [addCache, setAddCache] = React.useState("");
|
const [addCache, setAddCache] = React.useState("");
|
||||||
const [modalOpen, setModalOpen] = React.useState(false);
|
const [modalOpen, setModalOpen] = React.useState(false);
|
||||||
const [key,setKey]= React.useState("");
|
const [key, setKey]= React.useState("");
|
||||||
const [value, setValue]= React.useState("");
|
const [value, setValue]= React.useState("");
|
||||||
const [cacheInput, setCacheInput]= React.useState('');
|
const [cacheInput, setCacheInput]= React.useState("");
|
||||||
|
const [cacheCursor, setCacheCursor]= React.useState("");
|
||||||
|
|
||||||
const alert = useAlert();
|
const alert = useAlert();
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -67,20 +68,26 @@ const CacheView = (props) => {
|
|||||||
},
|
},
|
||||||
credentials: "include",
|
credentials: "include",
|
||||||
})
|
})
|
||||||
.then((response) => {
|
.then((response) => {
|
||||||
if (response.status !== 200) {
|
if (response.status !== 200) {
|
||||||
console.log("Status not 200 for apps :O!");
|
console.log("Status not 200 for apps :O!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
return response.json();
|
return response.json();
|
||||||
})
|
})
|
||||||
.then((responseJson) => {
|
.then((responseJson) => {
|
||||||
setListCache(responseJson);
|
if (responseJson.success === true) {
|
||||||
})
|
setListCache(responseJson.keys);
|
||||||
.catch((error) => {
|
}
|
||||||
alert.error(error.toString());
|
|
||||||
});
|
if (responseJson.cursor !== undefined && responseJson.cursor !== null && responseJson.cursor !== "") {
|
||||||
|
setCacheCursor(responseJson.cursor);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
alert.error(error.toString());
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// const getCacheList = (orgId) => {
|
// const getCacheList = (orgId) => {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import React, { useEffect, useContext } from "react";
|
import React, { useEffect, useContext } from "react";
|
||||||
import theme from '../theme';
|
import theme from '../theme.jsx';
|
||||||
import { isMobile } from "react-device-detect"
|
import { isMobile } from "react-device-detect"
|
||||||
import ChipInput from "material-ui-chip-input";
|
import ChipInput from "material-ui-chip-input";
|
||||||
import UsecaseSearch from "../components/UsecaseSearch.jsx"
|
import UsecaseSearch from "../components/UsecaseSearch.jsx"
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ import {
|
|||||||
import { useAlert } from "react-alert";
|
import { useAlert } from "react-alert";
|
||||||
import Dropzone from "../components/Dropzone.jsx";
|
import Dropzone from "../components/Dropzone.jsx";
|
||||||
import CodeEditor from "../components/ShuffleCodeEditor.jsx";
|
import CodeEditor from "../components/ShuffleCodeEditor.jsx";
|
||||||
import theme from "../theme";
|
import theme from "../theme.jsx";
|
||||||
|
|
||||||
const Files = (props) => {
|
const Files = (props) => {
|
||||||
const { globalUrl, userdata, serverside, selectedOrganization, isCloud, } = props;
|
const { globalUrl, userdata, serverside, selectedOrganization, isCloud, } = props;
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ const { globalUrl, setNotifications, notifications, isLoggedIn, removeCookie, ho
|
|||||||
textDecoration: "none",
|
textDecoration: "none",
|
||||||
}
|
}
|
||||||
|
|
||||||
const isCloud = serverside === true ? true : window.location.host === "localhost:3002" || window.location.host === "shuffler.io";
|
const isCloud = serverside === true || typeof window === 'undefined' ? true : window.location.host === "localhost:3002" || window.location.host === "shuffler.io";
|
||||||
|
|
||||||
const clearNotifications = () => {
|
const clearNotifications = () => {
|
||||||
// Don't really care about the logout
|
// Don't really care about the logout
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import React, { useRef, useState, useEffect, useLayoutEffect } from "react";
|
import React, { useRef, useState, useEffect, useLayoutEffect } from "react";
|
||||||
import { useParams, useNavigate, Link } from "react-router-dom";
|
import { useParams, useNavigate, Link } from "react-router-dom";
|
||||||
import { useTheme } from "@material-ui/core/styles";
|
import { useTheme } from "@material-ui/core/styles";
|
||||||
import theme from '../theme';
|
import theme from '../theme.jsx';
|
||||||
|
|
||||||
import { v4 as uuidv4 } from "uuid";
|
import { v4 as uuidv4 } from "uuid";
|
||||||
import {
|
import {
|
||||||
@@ -90,7 +90,6 @@ const AuthenticationOauth2 = (props) => {
|
|||||||
appAuthentication,
|
appAuthentication,
|
||||||
setSelectedAction,
|
setSelectedAction,
|
||||||
setNewAppAuth,
|
setNewAppAuth,
|
||||||
setAuthenticationModalOpen,
|
|
||||||
isCloud,
|
isCloud,
|
||||||
autoAuth,
|
autoAuth,
|
||||||
authButtonOnly,
|
authButtonOnly,
|
||||||
@@ -118,7 +117,7 @@ const AuthenticationOauth2 = (props) => {
|
|||||||
const [oauthUrl, setOauthUrl] = React.useState("");
|
const [oauthUrl, setOauthUrl] = React.useState("");
|
||||||
const [buttonClicked, setButtonClicked] = React.useState(false);
|
const [buttonClicked, setButtonClicked] = React.useState(false);
|
||||||
|
|
||||||
const [offlineAccess, setOfflineAccess] = React.useState(false);
|
const [offlineAccess, setOfflineAccess] = React.useState(true);
|
||||||
const allscopes = authenticationType.scope !== undefined ? authenticationType.scope : [];
|
const allscopes = authenticationType.scope !== undefined ? authenticationType.scope : [];
|
||||||
|
|
||||||
|
|
||||||
@@ -365,9 +364,6 @@ const AuthenticationOauth2 = (props) => {
|
|||||||
if (newwin.closed) {
|
if (newwin.closed) {
|
||||||
console.log("Closing?")
|
console.log("Closing?")
|
||||||
|
|
||||||
if (setAuthenticationModalOpen !== undefined) {
|
|
||||||
setAuthenticationModalOpen(false)
|
|
||||||
}
|
|
||||||
|
|
||||||
setButtonClicked(false);
|
setButtonClicked(false);
|
||||||
clearInterval(timer);
|
clearInterval(timer);
|
||||||
@@ -375,7 +371,7 @@ const AuthenticationOauth2 = (props) => {
|
|||||||
//
|
//
|
||||||
|
|
||||||
if (getAppAuthentication !== undefined) {
|
if (getAppAuthentication !== undefined) {
|
||||||
getAppAuthentication(true, true);
|
getAppAuthentication(true, true, true);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
console.log("Not closed")
|
console.log("Not closed")
|
||||||
@@ -574,7 +570,6 @@ const AuthenticationOauth2 = (props) => {
|
|||||||
return autoAuthButton
|
return autoAuthButton
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("Window: ", window.location)
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<DialogTitle>
|
<DialogTitle>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { sortByKey } from "../views/AngularWorkflow.jsx";
|
|||||||
import { useTheme } from "@material-ui/core/styles";
|
import { useTheme } from "@material-ui/core/styles";
|
||||||
import NestedMenuItem from "material-ui-nested-menu-item";
|
import NestedMenuItem from "material-ui-nested-menu-item";
|
||||||
import { useAlert } from "react-alert";
|
import { useAlert } from "react-alert";
|
||||||
import theme from '../theme';
|
import theme from '../theme.jsx';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
ButtonGroup,
|
ButtonGroup,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import React, { useState, useEffect, useLayoutEffect } from "react";
|
import React, { useState, useEffect, useLayoutEffect } from "react";
|
||||||
import * as cytoscape from "cytoscape";
|
import * as cytoscape from "cytoscape";
|
||||||
import CytoscapeComponent from "react-cytoscapejs";
|
import CytoscapeComponent from "react-cytoscapejs";
|
||||||
import cystyle from "../defaultCytoscapeStyle";
|
import cystyle from "../defaultCytoscapeStyle.jsx";
|
||||||
|
|
||||||
const surfaceColor = "#27292D";
|
const surfaceColor = "#27292D";
|
||||||
const CytoscapeWrapper = (props) => {
|
const CytoscapeWrapper = (props) => {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import {
|
|||||||
Button,
|
Button,
|
||||||
} from '@material-ui/core';
|
} from '@material-ui/core';
|
||||||
|
|
||||||
import theme from '../theme';
|
import theme from '../theme.jsx';
|
||||||
import Checkbox from '@mui/material/Checkbox';
|
import Checkbox from '@mui/material/Checkbox';
|
||||||
import { orange } from '@mui/material/colors';
|
import { orange } from '@mui/material/colors';
|
||||||
import { isMobile } from "react-device-detect"
|
import { isMobile } from "react-device-detect"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React, { useState, useEffect } from 'react';
|
import React, { useState, useEffect } from 'react';
|
||||||
import ReactGA from 'react-ga4';
|
import ReactGA from 'react-ga4';
|
||||||
import theme from '../theme';
|
import theme from '../theme.jsx';
|
||||||
import PaperComponent from "../components/PaperComponent.jsx"
|
import PaperComponent from "../components/PaperComponent.jsx"
|
||||||
import UsecaseSearch, { usecaseTypes } from "../components/UsecaseSearch.jsx"
|
import UsecaseSearch, { usecaseTypes } from "../components/UsecaseSearch.jsx"
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import React, { useState, useEffect } from "react";
|
import React, { useState, useEffect } from "react";
|
||||||
import theme from '../theme';
|
import theme from '../theme.jsx';
|
||||||
import { useNavigate, Link } from "react-router-dom";
|
import { useNavigate, Link } from "react-router-dom";
|
||||||
import { useAlert } from "react-alert";
|
import { useAlert } from "react-alert";
|
||||||
import ConfigureWorkflow from "../components/ConfigureWorkflow.jsx";
|
import ConfigureWorkflow from "../components/ConfigureWorkflow.jsx";
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import LightbulbIcon from '@mui/icons-material/Lightbulb';
|
|||||||
import ArrowBackIosNewIcon from '@mui/icons-material/ArrowBackIosNew';
|
import ArrowBackIosNewIcon from '@mui/icons-material/ArrowBackIosNew';
|
||||||
import ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos';
|
import ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos';
|
||||||
|
|
||||||
import theme from '../theme';
|
import theme from '../theme.jsx';
|
||||||
import {
|
import {
|
||||||
Fade,
|
Fade,
|
||||||
IconButton,
|
IconButton,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import React, { useState, useEffect, useLayoutEffect } from "react";
|
import React, { useState, useEffect, useLayoutEffect } from "react";
|
||||||
import theme from '../theme';
|
import theme from '../theme.jsx';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
Chip,
|
Chip,
|
||||||
@@ -30,19 +30,6 @@ const workflowActionStyle = {
|
|||||||
justifyContent: "space-between",
|
justifyContent: "space-between",
|
||||||
}
|
}
|
||||||
|
|
||||||
const paperAppStyle = {
|
|
||||||
minHeight: 130,
|
|
||||||
maxHeight: 130,
|
|
||||||
overflow: "hidden",
|
|
||||||
width: "100%",
|
|
||||||
color: "white",
|
|
||||||
backgroundColor: theme.palette.surfaceColor,
|
|
||||||
padding: "12px 12px 0px 15px",
|
|
||||||
borderRadius: 5,
|
|
||||||
display: "flex",
|
|
||||||
boxSizing: "border-box",
|
|
||||||
position: "relative",
|
|
||||||
}
|
|
||||||
|
|
||||||
const chipStyle = {
|
const chipStyle = {
|
||||||
backgroundColor: "#3d3f43",
|
backgroundColor: "#3d3f43",
|
||||||
@@ -70,6 +57,20 @@ const WorkflowPaper = (props) => {
|
|||||||
//console.log("Workflow: ", data)
|
//console.log("Workflow: ", data)
|
||||||
var boxColor = "#86c142";
|
var boxColor = "#86c142";
|
||||||
|
|
||||||
|
const paperAppStyle = {
|
||||||
|
minHeight: 130,
|
||||||
|
maxHeight: 130,
|
||||||
|
overflow: "hidden",
|
||||||
|
width: "100%",
|
||||||
|
color: "white",
|
||||||
|
backgroundColor: theme.palette.surfaceColor,
|
||||||
|
padding: "12px 12px 0px 15px",
|
||||||
|
borderRadius: 5,
|
||||||
|
display: "flex",
|
||||||
|
boxSizing: "border-box",
|
||||||
|
position: "relative",
|
||||||
|
}
|
||||||
|
|
||||||
var parsedName = data.name;
|
var parsedName = data.name;
|
||||||
if (
|
if (
|
||||||
parsedName !== undefined &&
|
parsedName !== undefined &&
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import React, { useState, useEffect, useLayoutEffect } from "react";
|
import React, { useState, useEffect, useLayoutEffect } from "react";
|
||||||
import theme from '../theme';
|
import theme from '../theme.jsx';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
Chip,
|
Chip,
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import countries from "../components/Countries.jsx";
|
|||||||
import CodeEditor from "../components/ShuffleCodeEditor.jsx";
|
import CodeEditor from "../components/ShuffleCodeEditor.jsx";
|
||||||
import getLocalCodeData from "../components/ShuffleCodeEditor.jsx";
|
import getLocalCodeData from "../components/ShuffleCodeEditor.jsx";
|
||||||
import CacheView from "../components/CacheView.jsx";
|
import CacheView from "../components/CacheView.jsx";
|
||||||
import theme from "../theme";
|
import theme from "../theme.jsx";
|
||||||
import AddIcon from "@mui/icons-material/Add";
|
import AddIcon from "@mui/icons-material/Add";
|
||||||
import ClearIcon from '@mui/icons-material/Clear';
|
import ClearIcon from '@mui/icons-material/Clear';
|
||||||
import StorageIcon from '@mui/icons-material/Storage';
|
import StorageIcon from '@mui/icons-material/Storage';
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import ReactJson from "react-json-view";
|
|||||||
import NestedMenuItem from "material-ui-nested-menu-item";
|
import NestedMenuItem from "material-ui-nested-menu-item";
|
||||||
import ReactMarkdown from "react-markdown";
|
import ReactMarkdown from "react-markdown";
|
||||||
import { useAlert } from "react-alert";
|
import { useAlert } from "react-alert";
|
||||||
import theme from '../theme';
|
import theme from '../theme.jsx';
|
||||||
import { isMobile } from "react-device-detect"
|
import { isMobile } from "react-device-detect"
|
||||||
import aa from 'search-insights'
|
import aa from 'search-insights'
|
||||||
import Drift from "react-driftjs";
|
import Drift from "react-driftjs";
|
||||||
@@ -128,7 +128,7 @@ import undoRedo from "cytoscape-undo-redo";
|
|||||||
|
|
||||||
import Draggable from "react-draggable";
|
import Draggable from "react-draggable";
|
||||||
|
|
||||||
import cytoscapestyle from "../defaultCytoscapeStyle";
|
import cytoscapestyle from "../defaultCytoscapeStyle.jsx";
|
||||||
import cxtmenu from "cytoscape-cxtmenu";
|
import cxtmenu from "cytoscape-cxtmenu";
|
||||||
|
|
||||||
import { validateJson, GetIconInfo } from "./Workflows.jsx";
|
import { validateJson, GetIconInfo } from "./Workflows.jsx";
|
||||||
@@ -1710,7 +1710,7 @@ const AngularWorkflow = (defaultprops) => {
|
|||||||
//"Testing",
|
//"Testing",
|
||||||
const internalIds = ["Shuffle Tools", "http", "email"];
|
const internalIds = ["Shuffle Tools", "http", "email"];
|
||||||
|
|
||||||
const getAppAuthentication = (reset, updateAction) => {
|
const getAppAuthentication = (reset, updateAction, closeMenu) => {
|
||||||
fetch(globalUrl + "/api/v1/apps/authentication", {
|
fetch(globalUrl + "/api/v1/apps/authentication", {
|
||||||
method: "GET",
|
method: "GET",
|
||||||
headers: {
|
headers: {
|
||||||
@@ -1727,6 +1727,7 @@ const AngularWorkflow = (defaultprops) => {
|
|||||||
return response.json();
|
return response.json();
|
||||||
})
|
})
|
||||||
.then((responseJson) => {
|
.then((responseJson) => {
|
||||||
|
var shouldClose = false
|
||||||
if (responseJson.success) {
|
if (responseJson.success) {
|
||||||
var newauth = [];
|
var newauth = [];
|
||||||
for (let authkey in responseJson.data) {
|
for (let authkey in responseJson.data) {
|
||||||
@@ -1757,13 +1758,18 @@ const AngularWorkflow = (defaultprops) => {
|
|||||||
for (let authkey in tmpAuth) {
|
for (let authkey in tmpAuth) {
|
||||||
var item = tmpAuth[authkey];
|
var item = tmpAuth[authkey];
|
||||||
|
|
||||||
|
//console.log("Got auth: ", item);
|
||||||
|
|
||||||
const newfields = {};
|
const newfields = {};
|
||||||
for (let filterkey in item.fields) {
|
for (let filterkey in item.fields) {
|
||||||
newfields[item.fields[filterkey].key] = item.fields[filterkey].value;
|
newfields[item.fields[filterkey].key] = item.fields[filterkey].value;
|
||||||
}
|
}
|
||||||
|
|
||||||
item.fields = newfields;
|
item.fields = newfields;
|
||||||
if (item.app.name === selectedApp.name) {
|
|
||||||
|
const appname = selectedApp.name.toLowerCase().replace(" ", "_", -1)
|
||||||
|
const itemname = item.app.name.toLowerCase().replace(" ", "_", -1)
|
||||||
|
if (itemname === appname) {
|
||||||
authenticationOptions.push(item);
|
authenticationOptions.push(item);
|
||||||
|
|
||||||
// Always becoming the last one
|
// Always becoming the last one
|
||||||
@@ -1772,14 +1778,19 @@ const AngularWorkflow = (defaultprops) => {
|
|||||||
selectedAction.selectedAuthentication = item;
|
selectedAction.selectedAuthentication = item;
|
||||||
|
|
||||||
for (let actionkey in workflow.actions) {
|
for (let actionkey in workflow.actions) {
|
||||||
if (workflow.actions[actionkey].app_name === selectedApp.name) {
|
const actionAppname = workflow.actions[actionkey].app_name.toLowerCase().replace(" ", "_", -1)
|
||||||
|
if (actionAppname === appname) {
|
||||||
workflow.actions[actionkey].selectedAuthentication = item;
|
workflow.actions[actionkey].selectedAuthentication = item;
|
||||||
workflow.actions[actionkey].authentication_id = item.id;
|
workflow.actions[actionkey].authentication_id = item.id;
|
||||||
appUpdates = true;
|
appUpdates = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
}
|
//console.log("Not newer: ", item.edited, " vs ", latest)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//console.log("Appname is wrong: ", appname, " vs ", itemname)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
selectedAction.authentication = authenticationOptions;
|
selectedAction.authentication = authenticationOptions;
|
||||||
@@ -1799,18 +1810,28 @@ const AngularWorkflow = (defaultprops) => {
|
|||||||
setWorkflow(workflow);
|
setWorkflow(workflow);
|
||||||
saveWorkflow(workflow);
|
saveWorkflow(workflow);
|
||||||
alert.info("Added and updated authentication!");
|
alert.info("Added and updated authentication!");
|
||||||
|
shouldClose = true
|
||||||
} else {
|
} else {
|
||||||
console.log("Closing auth modal? FAIL")
|
console.log("Closing auth modal? FAIL")
|
||||||
|
|
||||||
alert.error("Failed to find new authentication. See details in Oauth2 popup window where auth was attempted.");
|
alert.error("Failed to find new authentication. See details in Oauth2 popup window where auth was attempted.");
|
||||||
|
shouldClose = false
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
alert.info("No authentication to update");
|
alert.info("No authentication to update");
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
|
shouldClose = true
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
setAppAuthentication([]);
|
setAppAuthentication([]);
|
||||||
|
shouldClose = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Auto-closing if changes were made
|
||||||
|
if (closeMenu === true && shouldClose === true) {
|
||||||
|
setAuthenticationModalOpen(false);
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
setAppAuthentication([]);
|
setAppAuthentication([]);
|
||||||
@@ -3364,7 +3385,7 @@ const AngularWorkflow = (defaultprops) => {
|
|||||||
alert.error("Failed to auto-activate the app. Go to /apps and activate it.")
|
alert.error("Failed to auto-activate the app. Go to /apps and activate it.")
|
||||||
} else {
|
} else {
|
||||||
if (refresh === true) {
|
if (refresh === true) {
|
||||||
alert.success("App activated for your organization! Refresh the page to use the app.")
|
//alert.success("App activated for your organization! Refresh the page to use the app.")
|
||||||
getApps()
|
getApps()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14760,7 +14781,7 @@ const AngularWorkflow = (defaultprops) => {
|
|||||||
{curapp === null ? null : (
|
{curapp === null ? null : (
|
||||||
<img
|
<img
|
||||||
alt={selectedResult.action.app_name}
|
alt={selectedResult.action.app_name}
|
||||||
src={selectedResult === undefined ? theme.palette.defaultImage : selectedResult.action.app_name === "shuffle-subflow" ? triggers[4].large_image : selectedResult.action.app_name === "User Input" ? triggers[5].large_image : selectedResult.action.large_image}
|
src={selectedResult === undefined ? theme.palette.defaultImage : selectedResult.action.app_name === "shuffle-subflow" ? triggers[4].large_image : selectedResult.action.app_name === "User Input" ? triggers[5].large_image : selectedResult.action.large_image !== undefined && selectedResult.action.large_image !== null && selectedResult.action.large_image !== "" ? selectedResult.action.large_image : curapp.large_image}
|
||||||
style={{
|
style={{
|
||||||
marginRight: 20,
|
marginRight: 20,
|
||||||
width: imgsize,
|
width: imgsize,
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import AppFramework from "../components/AppFramework.jsx";
|
|||||||
import { makeStyles, useTheme } from "@material-ui/core/styles";
|
import { makeStyles, useTheme } from "@material-ui/core/styles";
|
||||||
// nodejs library that concatenates classes
|
// nodejs library that concatenates classes
|
||||||
import classNames from "classnames";
|
import classNames from "classnames";
|
||||||
import theme from '../theme';
|
import theme from '../theme.jsx';
|
||||||
import { useNavigate, Link, useParams } from "react-router-dom";
|
import { useNavigate, Link, useParams } from "react-router-dom";
|
||||||
|
|
||||||
// react plugin used to create charts
|
// react plugin used to create charts
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { useInterval } from "react-powerhooks";
|
|||||||
import { makeStyles, useTheme } from "@material-ui/core/styles";
|
import { makeStyles, useTheme } from "@material-ui/core/styles";
|
||||||
// nodejs library that concatenates classes
|
// nodejs library that concatenates classes
|
||||||
import classNames from "classnames";
|
import classNames from "classnames";
|
||||||
import theme from '../theme';
|
import theme from '../theme.jsx';
|
||||||
import { useNavigate, Link, useParams } from "react-router-dom";
|
import { useNavigate, Link, useParams } from "react-router-dom";
|
||||||
|
|
||||||
// react plugin used to create charts
|
// react plugin used to create charts
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import ReactDOM from "react-dom"
|
|||||||
import AppFramework from "../components/AppFramework.jsx";
|
import AppFramework from "../components/AppFramework.jsx";
|
||||||
import { useAlert } from "react-alert";
|
import { useAlert } from "react-alert";
|
||||||
import { Link, useParams } from "react-router-dom";
|
import { Link, useParams } from "react-router-dom";
|
||||||
import theme from '../theme';
|
import theme from '../theme.jsx';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
Button,
|
Button,
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { useInterval } from "react-powerhooks";
|
|||||||
import { makeStyles } from '@material-ui/styles';
|
import { makeStyles } from '@material-ui/styles';
|
||||||
import { useNavigate, Link, useParams } from "react-router-dom";
|
import { useNavigate, Link, useParams } from "react-router-dom";
|
||||||
import {isMobile} from "react-device-detect";
|
import {isMobile} from "react-device-detect";
|
||||||
import theme from '../theme';
|
import theme from '../theme.jsx';
|
||||||
import { validateJson, GetIconInfo } from "./Workflows.jsx";
|
import { validateJson, GetIconInfo } from "./Workflows.jsx";
|
||||||
import { green, yellow } from "./AngularWorkflow.jsx";
|
import { green, yellow } from "./AngularWorkflow.jsx";
|
||||||
|
|
||||||
@@ -39,15 +39,6 @@ const bodyDivStyle = {
|
|||||||
position: "relative",
|
position: "relative",
|
||||||
}
|
}
|
||||||
|
|
||||||
const boxStyle = {
|
|
||||||
color: "white",
|
|
||||||
paddingLeft: "30px",
|
|
||||||
paddingRight: "30px",
|
|
||||||
paddingBottom: "30px",
|
|
||||||
paddingTop: "30px",
|
|
||||||
backgroundColor: theme.palette.surfaceColor,
|
|
||||||
marginBottom: 150,
|
|
||||||
}
|
|
||||||
|
|
||||||
const RunWorkflow = (defaultprops) => {
|
const RunWorkflow = (defaultprops) => {
|
||||||
const { globalUrl, isLoaded, isLoggedIn, setIsLoggedIn, setCookie, register, serverside } = defaultprops;
|
const { globalUrl, isLoaded, isLoggedIn, setIsLoggedIn, setCookie, register, serverside } = defaultprops;
|
||||||
@@ -65,11 +56,25 @@ const RunWorkflow = (defaultprops) => {
|
|||||||
const [apps, setApps] = React.useState([]);
|
const [apps, setApps] = React.useState([]);
|
||||||
const [buttonClicked, setButtonClicked] = React.useState("");
|
const [buttonClicked, setButtonClicked] = React.useState("");
|
||||||
|
|
||||||
|
const boxStyle = {
|
||||||
|
color: "white",
|
||||||
|
paddingLeft: "30px",
|
||||||
|
paddingRight: "30px",
|
||||||
|
paddingBottom: "30px",
|
||||||
|
paddingTop: "30px",
|
||||||
|
backgroundColor: theme.palette.surfaceColor,
|
||||||
|
marginBottom: 150,
|
||||||
|
}
|
||||||
|
|
||||||
const params = useParams();
|
const params = useParams();
|
||||||
var props = JSON.parse(JSON.stringify(defaultprops))
|
var props = JSON.parse(JSON.stringify(defaultprops))
|
||||||
props.match = {}
|
props.match = {}
|
||||||
props.match.params = params
|
props.match.params = params
|
||||||
|
|
||||||
|
const defaultTitle = "Run Workflow"
|
||||||
|
if (document != undefined && document.title != defaultTitle) {
|
||||||
|
document.title = defaultTitle
|
||||||
|
}
|
||||||
|
|
||||||
const parsedsearch = serverside === true ? "" : window.location.search
|
const parsedsearch = serverside === true ? "" : window.location.search
|
||||||
if (serverside !== true) {
|
if (serverside !== true) {
|
||||||
@@ -513,6 +518,9 @@ const RunWorkflow = (defaultprops) => {
|
|||||||
if (responseJson.sync_features === undefined || responseJson.sync_features === null) {
|
if (responseJson.sync_features === undefined || responseJson.sync_features === null) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (document != undefined && document.title != defaultTitle) {
|
||||||
|
document.title = responseJson.name + " - " + defaultTitle
|
||||||
|
}
|
||||||
setSelectedOrganization(responseJson)
|
setSelectedOrganization(responseJson)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React, { useState, useEffect } from "react";
|
import React, { useState, useEffect } from "react";
|
||||||
|
|
||||||
import theme from '../theme';
|
import theme from '../theme.jsx';
|
||||||
import {isMobile} from "react-device-detect";
|
import {isMobile} from "react-device-detect";
|
||||||
import AppGrid from "../components/AppGrid.jsx"
|
import AppGrid from "../components/AppGrid.jsx"
|
||||||
import WorkflowGrid from "../components/WorkflowGrid.jsx"
|
import WorkflowGrid from "../components/WorkflowGrid.jsx"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import React, { useState } from "react";
|
import React, { useState } from "react";
|
||||||
|
|
||||||
import { Typography, CircularProgress } from "@material-ui/core";
|
import { Typography, CircularProgress } from "@material-ui/core";
|
||||||
import theme from '../theme';
|
import theme from '../theme.jsx';
|
||||||
|
|
||||||
const SetAuthentication = (props) => {
|
const SetAuthentication = (props) => {
|
||||||
const { globalUrl } = props;
|
const { globalUrl } = props;
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import {
|
|||||||
CardContent,
|
CardContent,
|
||||||
CardActionArea,
|
CardActionArea,
|
||||||
} from '@mui/material';
|
} from '@mui/material';
|
||||||
import theme from '../theme';
|
import theme from '../theme.jsx';
|
||||||
import { useNavigate, Link } from "react-router-dom";
|
import { useNavigate, Link } from "react-router-dom";
|
||||||
import Drift from "react-driftjs";
|
import Drift from "react-driftjs";
|
||||||
|
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ import { useNavigate, Link } from "react-router-dom";
|
|||||||
import { useAlert } from "react-alert";
|
import { useAlert } from "react-alert";
|
||||||
import ChipInput from "material-ui-chip-input";
|
import ChipInput from "material-ui-chip-input";
|
||||||
import { v4 as uuidv4 } from "uuid";
|
import { v4 as uuidv4 } from "uuid";
|
||||||
import theme from "../theme";
|
import theme from "../theme.jsx";
|
||||||
|
|
||||||
const inputColor = "#383B40";
|
const inputColor = "#383B40";
|
||||||
const surfaceColor = "#27292D";
|
const surfaceColor = "#27292D";
|
||||||
@@ -3447,8 +3447,8 @@ const Workflows = (props) => {
|
|||||||
</div>
|
</div>
|
||||||
) : null}
|
) : null}
|
||||||
|
|
||||||
{/*userdata.priorities !== undefined && userdata.priorities !== null && userdata.priorities.length > 0 ?
|
{userdata.priorities !== undefined && userdata.priorities !== null && userdata.priorities.length > 0 && userdata.priorities[0].name.includes("CPU") ?
|
||||||
<div style={{width: "100%", border: "1px solid rgba(255,255,255,0.1)", borderRadius: theme.palette.borderRadius, marginTop: 10, marginBottom: 10, padding: 15, textAlign: "center", height: 70, textAlign: "left", backgroundColor: theme.palette.surfaceColor, display: "flex", }}>
|
<div style={{border: "1px solid rgba(255,255,255,0.1)", borderRadius: theme.palette.borderRadius, marginTop: 10, marginBottom: 10, padding: 15, textAlign: "center", height: 70, textAlign: "left", backgroundColor: theme.palette.surfaceColor, display: "flex", }}>
|
||||||
<div style={{flex: 2, overflow: "hidden",}}>
|
<div style={{flex: 2, overflow: "hidden",}}>
|
||||||
<Typography variant="body1" >
|
<Typography variant="body1" >
|
||||||
{userdata.priorities[0].name}
|
{userdata.priorities[0].name}
|
||||||
@@ -3459,14 +3459,16 @@ const Workflows = (props) => {
|
|||||||
</div>
|
</div>
|
||||||
<div style={{flex: 1, display: "flex", marginLeft: 30, }}>
|
<div style={{flex: 1, display: "flex", marginLeft: 30, }}>
|
||||||
<Button style={{height: 50, borderRadius: 25, marginTop: 8, width: 200, }} variant="contained" color="secondary" onClick={() => {navigate(userdata.priorities[0].url)}}>
|
<Button style={{height: 50, borderRadius: 25, marginTop: 8, width: 200, }} variant="contained" color="secondary" onClick={() => {navigate(userdata.priorities[0].url)}}>
|
||||||
Continue
|
explore
|
||||||
</Button>
|
</Button>
|
||||||
|
{/*
|
||||||
<Button style={{borderRadius: 25, width: 200, height: 50, marginTop: 8, }} variant="text" color="secondary">
|
<Button style={{borderRadius: 25, width: 200, height: 50, marginTop: 8, }} variant="text" color="secondary">
|
||||||
Ignore
|
Ignore
|
||||||
</Button>
|
</Button>
|
||||||
|
*/}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
: null*/}
|
: null}
|
||||||
|
|
||||||
<div style={{marginTop: 15, }}>
|
<div style={{marginTop: 15, }}>
|
||||||
{view === "grid" ? (
|
{view === "grid" ? (
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ require (
|
|||||||
github.com/mackerelio/go-osstat v0.2.3
|
github.com/mackerelio/go-osstat v0.2.3
|
||||||
github.com/satori/go.uuid v1.2.0
|
github.com/satori/go.uuid v1.2.0
|
||||||
github.com/shirou/gopsutil v3.21.11+incompatible
|
github.com/shirou/gopsutil v3.21.11+incompatible
|
||||||
github.com/shuffle/shuffle-shared v0.4.14
|
github.com/shuffle/shuffle-shared v0.4.17
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
|||||||
@@ -202,6 +202,8 @@ github.com/shuffle/shuffle-shared v0.4.11 h1:qTYQ/kGzKbbMGMrKL2OLoabIpQABdtMurmk
|
|||||||
github.com/shuffle/shuffle-shared v0.4.11/go.mod h1:jQrYySmvp/0De5ftrAaY6xwwr7TMfqBmBxQ2AX9yrjQ=
|
github.com/shuffle/shuffle-shared v0.4.11/go.mod h1:jQrYySmvp/0De5ftrAaY6xwwr7TMfqBmBxQ2AX9yrjQ=
|
||||||
github.com/shuffle/shuffle-shared v0.4.14 h1:jDhvGRdnwDDfsJaNdaww8LlXmjDAlVTHarcO4F+9vKs=
|
github.com/shuffle/shuffle-shared v0.4.14 h1:jDhvGRdnwDDfsJaNdaww8LlXmjDAlVTHarcO4F+9vKs=
|
||||||
github.com/shuffle/shuffle-shared v0.4.14/go.mod h1:jQrYySmvp/0De5ftrAaY6xwwr7TMfqBmBxQ2AX9yrjQ=
|
github.com/shuffle/shuffle-shared v0.4.14/go.mod h1:jQrYySmvp/0De5ftrAaY6xwwr7TMfqBmBxQ2AX9yrjQ=
|
||||||
|
github.com/shuffle/shuffle-shared v0.4.17 h1:56ll366bdmIJu/7GFqNC2XTjjl0SGBf430PSq+EB6Ro=
|
||||||
|
github.com/shuffle/shuffle-shared v0.4.17/go.mod h1:jQrYySmvp/0De5ftrAaY6xwwr7TMfqBmBxQ2AX9yrjQ=
|
||||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=
|
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=
|
||||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M=
|
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
|||||||
@@ -935,6 +935,13 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handle Cleanup
|
||||||
|
// var cleanupEnv = strings.ToLower(os.Getenv("CLEANUP"))
|
||||||
|
// SHUFFLE_CONTAINER_AUTO_CLEANUP=false
|
||||||
|
if strings.ToLower(os.Getenv("SHUFFLE_CONTAINER_AUTO_CLEANUP")) == "true" {
|
||||||
|
cleanupEnv = "true"
|
||||||
|
}
|
||||||
|
|
||||||
workerTimeout := 600
|
workerTimeout := 600
|
||||||
if workerTimeoutEnv != "" {
|
if workerTimeoutEnv != "" {
|
||||||
tmpInt, err := strconv.Atoi(workerTimeoutEnv)
|
tmpInt, err := strconv.Atoi(workerTimeoutEnv)
|
||||||
@@ -1173,6 +1180,7 @@ func main() {
|
|||||||
|
|
||||||
if shuffle.ArrayContains(executionIds, execution.ExecutionId) {
|
if shuffle.ArrayContains(executionIds, execution.ExecutionId) {
|
||||||
log.Printf("[INFO] Execution already handled: %s", execution.ExecutionId)
|
log.Printf("[INFO] Execution already handled: %s", execution.ExecutionId)
|
||||||
|
toBeRemoved.Data = append(toBeRemoved.Data, execution)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ require (
|
|||||||
github.com/gorilla/mux v1.8.0
|
github.com/gorilla/mux v1.8.0
|
||||||
github.com/patrickmn/go-cache v2.1.0+incompatible
|
github.com/patrickmn/go-cache v2.1.0+incompatible
|
||||||
github.com/satori/go.uuid v1.2.0
|
github.com/satori/go.uuid v1.2.0
|
||||||
github.com/shuffle/shuffle-shared v0.4.14
|
github.com/shuffle/shuffle-shared v0.4.17
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
|||||||
@@ -220,6 +220,8 @@ github.com/shuffle/shuffle-shared v0.4.2 h1:GzDAOHN4YMMLzRmmToyO/KSYDziRuEuxLhea
|
|||||||
github.com/shuffle/shuffle-shared v0.4.2/go.mod h1:jQrYySmvp/0De5ftrAaY6xwwr7TMfqBmBxQ2AX9yrjQ=
|
github.com/shuffle/shuffle-shared v0.4.2/go.mod h1:jQrYySmvp/0De5ftrAaY6xwwr7TMfqBmBxQ2AX9yrjQ=
|
||||||
github.com/shuffle/shuffle-shared v0.4.9 h1:mGCaLcSbrsQCy26pJXPlZAtitEzEEwqotGNjnsvOM/U=
|
github.com/shuffle/shuffle-shared v0.4.9 h1:mGCaLcSbrsQCy26pJXPlZAtitEzEEwqotGNjnsvOM/U=
|
||||||
github.com/shuffle/shuffle-shared v0.4.9/go.mod h1:jQrYySmvp/0De5ftrAaY6xwwr7TMfqBmBxQ2AX9yrjQ=
|
github.com/shuffle/shuffle-shared v0.4.9/go.mod h1:jQrYySmvp/0De5ftrAaY6xwwr7TMfqBmBxQ2AX9yrjQ=
|
||||||
|
github.com/shuffle/shuffle-shared v0.4.17 h1:56ll366bdmIJu/7GFqNC2XTjjl0SGBf430PSq+EB6Ro=
|
||||||
|
github.com/shuffle/shuffle-shared v0.4.17/go.mod h1:jQrYySmvp/0De5ftrAaY6xwwr7TMfqBmBxQ2AX9yrjQ=
|
||||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=
|
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=
|
||||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M=
|
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
|||||||
Reference in New Issue
Block a user