commit
db248871f7
12 changed files with 9652 additions and 3732 deletions
|
|
@ -36,23 +36,25 @@ def login():
|
|||
|
||||
tenant_id = r.pop("tenantId")
|
||||
# change this in open-source
|
||||
r["limits"] = {
|
||||
"teamMember": int(environ.get("numberOfSeats", 0)),
|
||||
"projects": -1,
|
||||
"metadata": metadata.get_remaining_metadata_with_count(tenant_id)}
|
||||
|
||||
r = {**r,
|
||||
"limits": {
|
||||
"teamMember": int(environ.get("numberOfSeats", 0)),
|
||||
"projects": -1,
|
||||
"metadata": metadata.get_remaining_metadata_with_count(tenant_id)},
|
||||
**license.get_status(tenant_id),
|
||||
"smtp": environ["EMAIL_HOST"] is not None and len(environ["EMAIL_HOST"]) > 0,
|
||||
"saml2": SAML2_helper.is_saml2_available(),
|
||||
"iceServers": assist.get_ice_servers()
|
||||
}
|
||||
c = tenants.get_by_tenant_id(tenant_id)
|
||||
c.pop("createdAt")
|
||||
c["projects"] = projects.get_projects(tenant_id=tenant_id, recording_state=True, recorded=True,
|
||||
stack_integrations=True, version=True)
|
||||
c["smtp"] = helper.has_smtp()
|
||||
c["iceServers"] = assist.get_ice_servers()
|
||||
c = {**c, **license.get_status(tenant_id)}
|
||||
return {
|
||||
'jwt': r.pop('jwt'),
|
||||
'data': {
|
||||
"user": r,
|
||||
"client": c,
|
||||
"client": c
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -72,9 +72,15 @@ def process_sso_assertion():
|
|||
role = roles.get_role_by_name(tenant_id=t['tenantId'], name=role_name)
|
||||
if role is None:
|
||||
return {"errors": [f"role {role_name} not found, please create it in openreplay first"]}
|
||||
|
||||
admin_privileges = user_data.get("adminPrivileges", [])
|
||||
admin_privileges = not (len(admin_privileges) == 0
|
||||
or admin_privileges[0] is None
|
||||
or admin_privileges[0].lower() == "false")
|
||||
|
||||
if existing is None:
|
||||
print("== new user ==")
|
||||
users.create_sso_user(tenant_id=t['tenantId'], email=email, admin=True,
|
||||
users.create_sso_user(tenant_id=t['tenantId'], email=email, admin=admin_privileges,
|
||||
origin=SAML2_helper.get_saml2_provider(),
|
||||
name=" ".join(user_data.get("firstName", []) + user_data.get("lastName", [])),
|
||||
internal_id=internal_id, role_id=role["roleId"])
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ class Router extends React.Component {
|
|||
super(props);
|
||||
if (props.isLoggedIn) {
|
||||
Promise.all([props.fetchUserInfo()])
|
||||
.then(() => this.onLoginLogout());
|
||||
// .then(() => this.onLoginLogout());
|
||||
}
|
||||
props.fetchTenants();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ const ChatWindow: FC<Props> = function ChatWindow({ userId, incomeStream, localS
|
|||
const iid = setInterval(() => {
|
||||
const settings = incomeStream.getVideoTracks()[0]?.getSettings()
|
||||
const isDummyVideoTrack = !!settings ? (settings.width === 2 || settings.frameRate === 0) : true
|
||||
console.log(isDummyVideoTrack, settings)
|
||||
const shouldBeEnabled = !isDummyVideoTrack
|
||||
if (shouldBeEnabled !== localVideoEnabled) {
|
||||
setRemoteVideoEnabled(shouldBeEnabled)
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ function LiveSessionList(props: Props) {
|
|||
)
|
||||
}
|
||||
|
||||
export default withPermissions(['ASSIST_LIVE'])(connect(
|
||||
export default withPermissions(['ASSIST_LIVE', 'SESSION_REPLAY'])(connect(
|
||||
(state) => ({
|
||||
list: state.getIn(['sessions', 'liveSessions']),
|
||||
loading: state.getIn([ 'sessions', 'loading' ]),
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import { Loader, IconButton, Popup, NoContent, SlideModal } from 'UI'
|
|||
import { connect } from 'react-redux'
|
||||
import stl from './roles.css'
|
||||
import RoleForm from './components/RoleForm'
|
||||
import { init, edit, fetchList, remove as deleteRole } from 'Duck/roles';
|
||||
import { init, edit, fetchList, remove as deleteRole, resetErrors } from 'Duck/roles';
|
||||
import RoleItem from './components/RoleItem'
|
||||
import { confirm } from 'UI/Confirmation';
|
||||
import { toast } from 'react-toastify';
|
||||
|
|
@ -19,7 +19,8 @@ interface Props {
|
|||
fetchList: () => Promise<void>,
|
||||
account: any,
|
||||
permissionsMap: any,
|
||||
removeErrors: any
|
||||
removeErrors: any,
|
||||
resetErrors: () => void
|
||||
}
|
||||
|
||||
function Roles(props: Props) {
|
||||
|
|
@ -37,6 +38,9 @@ function Roles(props: Props) {
|
|||
toast.error(e)
|
||||
})
|
||||
}
|
||||
return () => {
|
||||
props.resetErrors()
|
||||
}
|
||||
}, [removeErrors])
|
||||
|
||||
const closeModal = () => {
|
||||
|
|
@ -134,4 +138,4 @@ export default connect(state => {
|
|||
loading: state.getIn(['roles', 'fetchRequest', 'loading']),
|
||||
account: state.getIn([ 'user', 'account' ])
|
||||
}
|
||||
}, { init, edit, fetchList, deleteRole })(Roles)
|
||||
}, { init, edit, fetchList, deleteRole, resetErrors })(Roles)
|
||||
|
|
@ -8,7 +8,7 @@ export default (requiredPermissions, className, backLink = '') => BaseComponent
|
|||
}))
|
||||
class extends React.PureComponent {
|
||||
render() {
|
||||
const hasPermission = this.props.permissions.some(permission => requiredPermissions.includes(permission));
|
||||
const hasPermission = requiredPermissions.every(permission => this.props.permissions.includes(permission));
|
||||
|
||||
return !this.props.isEnterprise || hasPermission ? <BaseComponent {...this.props} /> : <div className={className}><NoPermission backLink={backLink} /></div>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,9 @@ export default function ChromePluginMessage({ style }) {
|
|||
>
|
||||
<div className="flex items-center">
|
||||
<Icon name="info-circle" size="14" color="gray-darkest" />
|
||||
<div className="ml-2 mr-2 color-gray-darkest">Finding it difficult to add steps? Try our Chrome <a className="color-teal" target="_blank" href={links['chrome-plugin']}>Test Recorder</a></div>
|
||||
<div className="ml-2 mr-2 color-gray-darkest">
|
||||
Finding it difficult to add steps? Try our Chrome <a className="color-teal" rel="noopener noreferrer" target="_blank" href={links['chrome-plugin']}>Test Recorder</a>
|
||||
</div>
|
||||
<Icon name="external-link-alt" size="14" color="teal" />
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@ import { reduceDucks } from 'Duck/tools';
|
|||
const crudDuck = crudDuckGenerator('client/role', Role, { idKey: 'roleId' });
|
||||
export const { fetchList, init, edit, remove, } = crudDuck.actions;
|
||||
|
||||
const RESET_ERRORS = 'roles/RESET_ERRORS';
|
||||
|
||||
const initialState = Map({
|
||||
list: List(),
|
||||
permissions: List([
|
||||
|
|
@ -19,6 +21,10 @@ const initialState = Map({
|
|||
});
|
||||
|
||||
const reducer = (state = initialState, action = {}) => {
|
||||
switch (action.type) {
|
||||
case RESET_ERRORS:
|
||||
return state.setIn(['removeRequest', 'errors'], null);
|
||||
}
|
||||
return state;
|
||||
};
|
||||
|
||||
|
|
@ -29,4 +35,10 @@ export function save(instance) {
|
|||
};
|
||||
}
|
||||
|
||||
export function resetErrors() {
|
||||
return {
|
||||
type: RESET_ERRORS,
|
||||
}
|
||||
}
|
||||
|
||||
export default reduceDucks(crudDuck, { initialState, reducer }).reducer;
|
||||
|
|
|
|||
|
|
@ -458,8 +458,8 @@ export default class AssistManager {
|
|||
name: store.getState().getIn([ 'user', 'account', 'name']),
|
||||
});
|
||||
|
||||
this.md.overlay.addEventListener("mousemove", this.onMouseMove)
|
||||
this.md.overlay.addEventListener("click", this.onMouseClick)
|
||||
// this.md.overlay.addEventListener("mousemove", this.onMouseMove)
|
||||
// this.md.overlay.addEventListener("click", this.onMouseClick)
|
||||
});
|
||||
//call.peerConnection.addEventListener("track", e => console.log('newtrack',e.track))
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ const oss = {
|
|||
MINIO_ACCESS_KEY: process.env.MINIO_ACCESS_KEY,
|
||||
MINIO_SECRET_KEY: process.env.MINIO_SECRET_KEY,
|
||||
ICE_SERVERS: process.env.ICE_SERVERS,
|
||||
TRACKER_VERSION: '3.4.10', // trackerInfo.version,
|
||||
TRACKER_VERSION: '3.4.11', // trackerInfo.version,
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
|
|
|
|||
13317
frontend/package-lock.json
generated
13317
frontend/package-lock.json
generated
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue