matlab-proxy 0.5.3__py3-none-any.whl → 0.30.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- matlab_proxy/app.py +578 -205
- matlab_proxy/app_state.py +1061 -431
- matlab_proxy/constants.py +37 -0
- matlab_proxy/default_configuration.py +39 -4
- matlab_proxy/devel.py +18 -22
- matlab_proxy/gui/index.html +20 -1
- matlab_proxy/gui/static/css/index.BedVwcEg.css +10 -0
- matlab_proxy/gui/static/js/index.pQwV1obF.js +64 -0
- matlab_proxy/gui/static/media/MATLAB-env-blur.NupTbPv_.png +0 -0
- matlab_proxy/matlab/evaluateUserMatlabCode.m +51 -0
- matlab_proxy/matlab/startup.m +3 -28
- matlab_proxy/settings.py +543 -112
- matlab_proxy/util/__init__.py +187 -59
- matlab_proxy/util/cookie_jar.py +72 -0
- matlab_proxy/util/event_loop.py +28 -10
- matlab_proxy/util/list_servers.py +71 -26
- matlab_proxy/util/mw.py +16 -15
- matlab_proxy/util/mwi/download.py +136 -0
- matlab_proxy/util/mwi/embedded_connector/__init__.py +1 -1
- matlab_proxy/util/mwi/embedded_connector/helpers.py +12 -4
- matlab_proxy/util/mwi/embedded_connector/request.py +78 -12
- matlab_proxy/util/mwi/environment_variables.py +120 -27
- matlab_proxy/util/mwi/exceptions.py +63 -9
- matlab_proxy/util/mwi/logger.py +141 -27
- matlab_proxy/util/mwi/session_name.py +28 -0
- matlab_proxy/util/mwi/token_auth.py +264 -121
- matlab_proxy/util/mwi/validators.py +231 -88
- matlab_proxy/util/system.py +9 -0
- matlab_proxy/util/windows.py +32 -6
- {matlab_proxy-0.5.3.dist-info → matlab_proxy-0.30.1.dist-info}/METADATA +94 -49
- matlab_proxy-0.30.1.dist-info/RECORD +88 -0
- {matlab_proxy-0.5.3.dist-info → matlab_proxy-0.30.1.dist-info}/WHEEL +1 -2
- {matlab_proxy-0.5.3.dist-info → matlab_proxy-0.30.1.dist-info}/entry_points.txt +1 -1
- matlab_proxy_manager/README.md +85 -0
- matlab_proxy_manager/__init__.py +6 -0
- matlab_proxy_manager/lib/README.md +53 -0
- matlab_proxy_manager/lib/__init__.py +1 -0
- matlab_proxy_manager/lib/api.py +419 -0
- matlab_proxy_manager/storage/README.md +54 -0
- matlab_proxy_manager/storage/__init__.py +1 -0
- matlab_proxy_manager/storage/file_repository.py +144 -0
- matlab_proxy_manager/storage/interface.py +62 -0
- matlab_proxy_manager/storage/server.py +172 -0
- matlab_proxy_manager/utils/__init__.py +1 -0
- matlab_proxy_manager/utils/auth.py +77 -0
- matlab_proxy_manager/utils/constants.py +8 -0
- matlab_proxy_manager/utils/decorators.py +37 -0
- matlab_proxy_manager/utils/environment_variables.py +51 -0
- matlab_proxy_manager/utils/exceptions.py +45 -0
- matlab_proxy_manager/utils/helpers.py +314 -0
- matlab_proxy_manager/utils/logger.py +76 -0
- matlab_proxy_manager/web/README.md +37 -0
- matlab_proxy_manager/web/__init__.py +1 -0
- matlab_proxy_manager/web/app.py +536 -0
- matlab_proxy_manager/web/monitor.py +45 -0
- matlab_proxy_manager/web/watcher.py +65 -0
- matlab_proxy/gui/asset-manifest.json +0 -23
- matlab_proxy/gui/authorization.html +0 -115
- matlab_proxy/gui/bootstrap.3.4.1.min.css +0 -6
- matlab_proxy/gui/navbar.css +0 -8
- matlab_proxy/gui/signin.css +0 -42
- matlab_proxy/gui/static/css/main.d890078a.chunk.css +0 -13
- matlab_proxy/gui/static/css/main.d890078a.chunk.css.map +0 -1
- matlab_proxy/gui/static/js/2.13be6544.chunk.js +0 -3
- matlab_proxy/gui/static/js/2.13be6544.chunk.js.LICENSE.txt +0 -59
- matlab_proxy/gui/static/js/2.13be6544.chunk.js.map +0 -1
- matlab_proxy/gui/static/js/main.c311d854.chunk.js +0 -2
- matlab_proxy/gui/static/js/main.c311d854.chunk.js.map +0 -1
- matlab_proxy/gui/static/js/runtime-main.f70e4d5f.js +0 -2
- matlab_proxy/gui/static/js/runtime-main.f70e4d5f.js.map +0 -1
- matlab_proxy/gui/static/media/arrow.0c2968b9.svg +0 -4
- matlab_proxy/gui/static/media/feedback.6e8d50eb.svg +0 -1
- matlab_proxy/gui/static/media/gripper.9defbc5e.svg +0 -1
- matlab_proxy/gui/static/media/help.15e5bfab.svg +0 -1
- matlab_proxy/gui/static/media/ico-header-contact-hover.0958c442.svg +0 -17
- matlab_proxy/gui/static/media/ico-header-contact.ae9169c8.svg +0 -17
- matlab_proxy/gui/static/media/restart.7987508a.svg +0 -1
- matlab_proxy/gui/static/media/sign-out.08356b67.svg +0 -1
- matlab_proxy/gui/static/media/start.50c4596f.svg +0 -1
- matlab_proxy/gui/static/media/stop.30c9a9ab.svg +0 -1
- matlab_proxy/gui/static/media/terminate.7ea1363e.svg +0 -1
- matlab_proxy/gui/token.html +0 -123
- matlab_proxy-0.5.3.dist-info/RECORD +0 -84
- matlab_proxy-0.5.3.dist-info/top_level.txt +0 -1
- /matlab_proxy/gui/static/media/{glyphicons-halflings-regular.82b1212e.woff → glyphicons-halflings-regular.BKjkU69z.woff} +0 -0
- /matlab_proxy/gui/static/media/{glyphicons-halflings-regular.5be1347c.eot → glyphicons-halflings-regular.BUJKDMgK.eot} +0 -0
- /matlab_proxy/gui/static/media/{glyphicons-halflings-regular.060b2710.svg → glyphicons-halflings-regular.CSehLiBc.svg} +0 -0
- /matlab_proxy/gui/static/media/{glyphicons-halflings-regular.4692b9ec.ttf → glyphicons-halflings-regular.DrwTMapi.ttf} +0 -0
- /matlab_proxy/gui/static/media/{glyphicons-halflings-regular.be810be3.woff2 → glyphicons-halflings-regular.DzqM6ju8.woff2} +0 -0
- /matlab_proxy/gui/static/media/{ico-header-account-hover.89438e91.svg → ico-header-account-hover.-jQHo6Wx.svg} +0 -0
- /matlab_proxy/gui/static/media/{ico-header-account.86b10d7b.svg → ico-header-account.CJCFoo5a.svg} +0 -0
- /matlab_proxy/gui/static/media/{ico-sprite.cbdb66c0.png → ico-sprite.DXGLgzq9.png} +0 -0
- /matlab_proxy/gui/static/media/{mathworks-eps.4d20e0ee.ttf → mathworks-eps.CGNQALa9.ttf} +0 -0
- /matlab_proxy/gui/static/media/{mathworks-eps.df1428df.svg → mathworks-eps.DrkCtQtG.svg} +0 -0
- /matlab_proxy/gui/static/media/{mathworks-eps.e5c41e84.woff → mathworks-eps.Ds7lQbql.woff} +0 -0
- /matlab_proxy/gui/static/media/{mathworks-pictograms.3fc6513a.woff → mathworks-pictograms.BdqxEfBR.woff} +0 -0
- /matlab_proxy/gui/static/media/{mathworks-pictograms.f6f087b0.svg → mathworks-pictograms.CCLweoD4.svg} +0 -0
- /matlab_proxy/gui/static/media/{mathworks-pictograms.6e128c0e.ttf → mathworks-pictograms.DZhFdRSm.ttf} +0 -0
- /matlab_proxy/gui/static/media/{mathworks.80a3218e.svg → mathworks.C-qsbhDy.svg} +0 -0
- /matlab_proxy/gui/static/media/{mathworks.c422935b.ttf → mathworks.Ceplx86V.ttf} +0 -0
- /matlab_proxy/gui/static/media/{mathworks.37a563ef.woff → mathworks.D08X1Vp8.woff} +0 -0
- /matlab_proxy/gui/static/media/{trigger-error.3f1c4ef2.svg → trigger-error.QEdsGL-m.svg} +0 -0
- /matlab_proxy/gui/static/media/{trigger-ok.7b9c238b.svg → trigger-ok.Dzg8OIrk.svg} +0 -0
- {matlab_proxy-0.5.3.dist-info → matlab_proxy-0.30.1.dist-info/licenses}/LICENSE.md +0 -0
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
(this["webpackJsonpmatlab-proxy"]=this["webpackJsonpmatlab-proxy"]||[]).push([[0],{31:function(e,t,n){},32:function(e,t,n){},39:function(e,t,n){},41:function(e,t,n){},42:function(e,t,n){},43:function(e,t,n){},44:function(e,t,n){},57:function(e,t,n){},58:function(e,t,n){},59:function(e,t,n){},60:function(e,t,n){"use strict";n.r(t);var a=n(1),r=n(9),c=n.n(r),s=n(2),i=n(8),o=(n(31),n(6)),l=n(64),d=(n(32),n(0));var u=function(e){var t=e.confirm,n=e.cancel,a=e.children;return Object(d.jsx)("div",{className:"modal show",id:"confirmation",tabIndex:"-1",role:"dialog","aria-labelledby":"confirmation-dialog-title",children:Object(d.jsx)("div",{className:"modal-dialog modal-dialog-centered",role:"document",children:Object(d.jsxs)("div",{className:"modal-content",children:[Object(d.jsx)("div",{className:"modal-header",children:Object(d.jsx)("h4",{className:"modal-title",id:"confirmation-dialog-title",children:"Confirmation"})}),Object(d.jsx)("div",{className:"modal-body",children:a}),Object(d.jsxs)("div",{className:"modal-footer",children:[Object(d.jsx)("button",{onClick:n,"data-testid":"cancelButton",className:"btn companion_btn btn_color_blue",children:"Cancel"}),Object(d.jsx)("button",{onClick:t,"data-testid":"confirmButton",className:"btn btn_color_blue",children:"Confirm"})]})]})})})},b=n(20),j=n.n(b),m=n(13);n(39);var h=function(e){var t=e.children,n=e.transparent,a=void 0!==n&&n;return Object(d.jsx)("div",{id:"overlay",style:{backgroundColor:a?"transparent":null},children:t})},f=n(4),p=function(e){return e.tutorialHidden},O=function(e){return e.serverStatus.matlabStatus},g=function(e){return e.serverStatus.matlabVersion},v=function(e){return e.serverStatus.wsEnv},x=function(e){return e.serverStatus.isSubmitting},y=function(e){return e.serverStatus.hasFetched},N=function(e){return e.serverStatus.licensingInfo},w=function(e){return e.loadUrl},T=function(e){return e.error},A=Object(f.a)((function(e){return e.triggerPosition}),(function(e){return null===e?void 0:e})),E=Object(f.a)((function(e){return e.envConfig}),(function(e){return null!==e&&e})),_=Object(f.a)(T,(function(e){return null!==e})),S=Object(f.a)((function(e){return e.serverStatus.fetchFailCount}),(function(e){return e>=5})),k=Object(f.a)(O,(function(e){return"up"===e})),M=Object(f.a)(O,(function(e){return"up"===e})),L=Object(f.a)(O,(function(e){return"starting"===e})),I=Object(f.a)(O,(function(e){return"stopping"===e})),C=Object(f.a)(O,_,(function(e,t){return"up"===e&&!t})),B=Object(f.a)((function(e){return e.overlayVisibility}),k,_,(function(e,t,n){return!t||e||n})),R=(Object(f.a)((function(e){return e.serverStatus}),(function(e){return e.fetchAbortController})),Object(f.a)(O,x,(function(e,t){return t?null:"up"===e?1e4:5e3}))),U=Object(f.a)(N,(function(e){return Object.prototype.hasOwnProperty.call(e,"type")})),D=Object(f.a)(N,U,(function(e,t){return t&&"MHLM"===e.type})),P=Object(f.a)(N,D,(function(e,t){return t?e.emailAddress:""})),H=Object(f.a)(O,(function(e){return"starting"===e})),V=Object(f.a)(B,_,(function(e,t){return e||t})),F=Object(f.a)(O,_,T,(function(e,t,n){if(t&&408===n.statusCode)return{icon:"warning",alert:"warning",label:"Unknown"};switch(e){case"up":return{label:"Running",icon:"success",alert:"success"};case"starting":return{label:"Starting. This may take several minutes.",icon:"info-reverse",alert:"info",spinner:!0};case"stopping":return{label:"Stopping",icon:"info-reverse",alert:"info",spinner:!0};case"down":var a={label:"Not running",icon:"info-reverse",alert:"info"};return t&&(a.icon="error",a.alert="danger"),a;default:throw new Error('Unknown MATLAB status: "'.concat(e,'".'))}})),G=n(11),J=n(5),W=n.n(J),Q=n(7),X="SET_TRIGGER_POSITION",Y="SET_TUTORIAL_HIDDEN",q="SET_OVERLAY_VISIBILITY",$="REQUEST_SERVER_STATUS",z="RECEIVE_SERVER_STATUS",K="REQUEST_SET_LICENSING",Z="REQUEST_TERMINATE_INTEGRATION",ee="REQUEST_STOP_MATLAB",te="REQUEST_START_MATLAB",ne="RECEIVE_SET_LICENSING",ae="RECEIVE_TERMINATE_INTEGRATION",re="RECEIVE_STOP_MATLAB",ce="RECEIVE_START_MATLAB",se="RECEIVE_ERROR",ie="REQUEST_ENV_CONFIG",oe="RECEIVE_ENV_CONFIG";function le(e,t){return{type:X,x:e,y:t}}function de(e){return{type:q,visibility:e}}function ue(e){return function(t,n){return t({type:z,status:e,previousMatlabPending:H(n())})}}function be(){return{type:K}}function je(e){return{type:ne,status:e}}function me(e,t){return{type:se,error:e,statusCode:t}}function he(e,t){return fe.apply(this,arguments)}function fe(){return fe=Object(Q.a)(W.a.mark((function e(t,n){var a,r,c,s,i,o,l=arguments;return W.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=l.length>2&&void 0!==l[2]?l[2]:{},r=l.length>3&&void 0!==l[3]?l[3]:1e4,c=new AbortController,s=setTimeout((function(){return c.abort()}),r),e.prev=4,e.next=7,fetch(n,Object(G.a)(Object(G.a)({},a),{},{signal:c.signal}));case 7:return i=e.sent,clearTimeout(s),e.abrupt("return",i);case 12:e.prev=12,e.t0=e.catch(4),o="Check your internet connection and verify that the server is running.","AbortError"===e.t0.name||"TypeError"===e.t0.name?t(me("HTTP Error 408 - Request Timeout. ".concat(o),408)):t(me("Communication with server failed.",500));case 16:case"end":return e.stop()}}),e,null,[[4,12]])}))),fe.apply(this,arguments)}function pe(){return function(){var e=Object(Q.a)(W.a.mark((function e(t,n){var a,r;return W.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t({type:$}),e.next=3,he(t,"./get_status",{},1e4);case 3:return a=e.sent,e.next=6,a.json();case 6:r=e.sent,t(ue(r));case 8:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}()}function Oe(e){return function(){var t=Object(Q.a)(W.a.mark((function t(n,a){var r,c,s;return W.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return r={method:"PUT",mode:"same-origin",cache:"no-cache",credentials:"same-origin",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)},n(be()),t.next=4,he(n,"./set_licensing_info",r,15e3);case 4:return c=t.sent,t.next=7,c.json();case 7:s=t.sent,n(je(s));case 9:case"end":return t.stop()}}),t)})));return function(e,n){return t.apply(this,arguments)}}()}function ge(){return function(){var e=Object(Q.a)(W.a.mark((function e(t,n){var a,r,c;return W.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a={method:"DELETE",mode:"same-origin",cache:"no-cache",credentials:"same-origin"},t(be()),e.next=4,he(t,"./set_licensing_info",a,15e3);case 4:return r=e.sent,e.next=7,r.json();case 7:c=e.sent,t(je(c));case 9:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}()}function ve(){return function(){var e=Object(Q.a)(W.a.mark((function e(t,n){var a,r,c;return W.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a={method:"DELETE",mode:"same-origin",cache:"no-cache",credentials:"same-origin"},t({type:Z}),e.next=4,he(t,"./terminate_integration",a,15e3);case 4:return r=e.sent,e.next=7,r.json();case 7:c=e.sent,t({type:ae,status:c,loadUrl:"../"});case 9:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}()}function xe(){return function(){var e=Object(Q.a)(W.a.mark((function e(t,n){var a,r,c;return W.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a={method:"DELETE",mode:"same-origin",cache:"no-cache",credentials:"same-origin"},t({type:ee,status:"stopping"}),e.next=4,he(t,"./stop_matlab",a,15e3);case 4:return r=e.sent,e.next=7,r.json();case 7:c=e.sent,t({type:re,status:c});case 9:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}()}function ye(){return function(){var e=Object(Q.a)(W.a.mark((function e(t,n){var a,r,c;return W.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a={method:"PUT",mode:"same-origin",cache:"no-cache",credentials:"same-origin",headers:{"Content-Type":"application/json"},body:JSON.stringify({})},t({type:te,status:"starting"}),e.next=4,he(t,"./start_matlab",a,15e3);case 4:return r=e.sent,e.next=7,r.json();case 7:c=e.sent,t({type:ce,status:c});case 9:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}()}n(41);var Ne=function(){var e=Object(s.b)(),t=Object(s.c)(A),n=Object(s.c)(E),r=Object(a.useState)(!1),c=Object(o.a)(r,2),i=c[0],l=c[1],u=Object(a.useRef)(),b=""===n.extension_name?"MATLAB Web Desktop":"".concat(n.extension_name_short_description," - MATLAB Integration");Object(a.useEffect)((function(){var t=new IntersectionObserver((function(t){Object(o.a)(t,1)[0].isIntersecting||e(le(window.innerWidth/2+27,0))}));return t.observe(u.current),function(){t.disconnect()}}),[e]);var f=Object(s.c)(V),O=Object(a.useCallback)((function(){return e(de(!f))}),[f,e]),g=Object(s.c)(p),v=Object(s.c)(F),x=Object(a.useCallback)((function(t,n){l(!0),e(le(n.x,n.y))}),[e,l]),y=Object(a.useCallback)((function(t,n){l(!1),e(le(n.x,n.y))}),[e,l]),N=i?Object(d.jsx)(h,{transparent:!0}):null,w=g?null:Object(d.jsxs)("div",{id:"trigger-tutorial",className:"trigger-tutorial modal-content",children:[Object(d.jsxs)("p",{children:["To control the MATLAB session (for example to restart or sign out), click the ",Object(d.jsx)("span",{className:"icon-custom-trigger icon trigger-tutorial-icon",title:"tools icon"})," icon."]}),Object(d.jsx)("p",{children:"The color of the badge shows the MATLAB status."}),Object(d.jsxs)("p",{children:["To position this widget anywhere on screen, click and drag the ",Object(d.jsx)("span",{className:"drag-handle icon",title:"grab handle icon"})," icon."]}),Object(d.jsx)("button",{className:"btn btn_color_blue pull-right","data-testid":"tutorialCloseBtn",onClick:function(){e({type:Y,hidden:!0})},children:"Close"})]}),T=g?Object(d.jsx)(m.a,{id:"trigger-button-tooltip",place:"bottom",type:"info",effect:"solid"}):null;return Object(d.jsxs)(d.Fragment,{children:[N,Object(d.jsx)(j.a,{position:t,onDrag:x,onStop:y,handle:".card-body",bounds:"parent",children:Object(d.jsxs)("div",{ref:u,className:"card alert-".concat(v.alert),"data-testid":"overlayTrigger",children:[Object(d.jsxs)("div",{className:"card-body","data-testid":"cardBody",children:[Object(d.jsx)("span",{id:"drag-handle",className:"drag-handle"}),Object(d.jsx)("button",{type:"button",className:"trigger-btn",onClick:O,onMouseDown:function(e){return e.stopPropagation()},"aria-label":"Menu","data-for":"trigger-button-tooltip","data-tip":"Open the ".concat(b," settings"),children:Object(d.jsx)("span",{className:"icon-custom-trigger"})})]}),w]})}),T]})};n(42);var we=function(e){var t=e.url;return Object(d.jsx)("div",{id:"MatlabJsd",children:Object(d.jsx)("iframe",{title:"MATLAB JSD",src:t,frameBorder:"0",allowFullScreen:!0})})};var Te=function(){var e=Object(s.b)(),t=Object(a.useState)(!1),n=Object(o.a)(t,2),r=n[0],c=n[1],i=Object(s.c)(P),l=Object(s.c)(v),u=Object(a.useMemo)((function(){var e="login";return l.includes("integ")&&(e="".concat(e,"-").concat(l)),"https://".concat(e,".mathworks.com")}),[l]),b=Object(a.useState)(Math.random().toString(36).substring(2,15)+Math.random().toString(36).substring(2,15))[0];Object(a.useEffect)((function(){var t=function(t){if(t.origin===u){var n=JSON.parse(t.data);"nonce"===n.event?function(e,t,n){var a={event:"load",clientTransactionId:e,transactionId:t,release:"",platform:"web",clientString:"desktop-jupyter",clientId:"",sourceId:n,profileTier:"MINIMUM",showCreateAccount:!1,showRememberMe:!1,showLicenseField:!1,entitlementId:"",showPrivacyPolicy:!0,contextualText:"",legalText:"",cachedIdentifier:"",cachedRememberMe:"",token:"",unauthorized:!1};document.getElementById("loginframe").contentWindow.postMessage(JSON.stringify(a),"*")}(n.clientTransactionId,n.transactionId,b):"login"===n.event&&e(Oe({type:"MHLM",token:n.token,profileId:n.profileId,emailAddress:n.emailAddress,sourceId:b}))}};return window.addEventListener("message",t),function(){window.removeEventListener("message",t)}}),[e,b,u]),Object(a.useEffect)((function(){!0===r&&function(e){var t={event:"init",clientTransactionId:(Math.random()+"").substr(2),transactionId:"",release:"",platform:"",clientString:"desktop-jupyter",clientID:"",locale:"",profileTier:"",showCreateAccount:!1,showRememberMe:!1,showLicenseField:!1,licenseNo:"",cachedUsername:e,cachedRememberMe:!1};document.getElementById("loginframe").contentWindow.postMessage(JSON.stringify(t),"*")}(i)}),[r,i]);var j="".concat(u,"/embedded-login/v2/login.html");return Object(d.jsx)("div",{id:"MHLM",children:Object(d.jsx)("iframe",{id:"loginframe",title:"MathWorks Embedded Login",type:"text/html",height:"380",width:"100%",frameBorder:"0",src:j,onLoad:function(){return c(!0)},children:"Sorry your browser does not support inline frames."})})},Ae=/^[\d]+@[\w|\-|_|.]+$|^[\d]+@[\w|\-|_|.]+,[\d]+@[\w|\-|_|.]+,[\d]+@[\w|\-|_|.]+$/;var Ee=function(){var e,t=Object(s.b)(),n=Object(a.useState)(""),r=Object(o.a)(n,2),c=r[0],i=r[1],l=Object(a.useState)(!1),u=Object(o.a)(l,2),b=u[0],j=u[1],m=(e=c,Ae.test(e));return Object(d.jsx)("div",{id:"NLM",children:Object(d.jsxs)("form",{onSubmit:function(e){e.preventDefault(),t(Oe({type:"NLM",connectionString:c}))},children:[Object(d.jsxs)("div",{className:"form-group has-feedback ".concat(b?m?"has-success":"has-error":""),children:[Object(d.jsx)("label",{htmlFor:"nlm-connection-string",children:"License Server Address"}),Object(d.jsx)("input",{id:"nlm-connection-string",type:"text",required:!0,placeholder:"port@hostname",className:"form-control","aria-invalid":!m,value:c,onChange:function(e){j(!0),i(e.target.value)}}),Object(d.jsx)("span",{className:"glyphicon form-control-feedback glyphicon-remove"}),Object(d.jsx)("span",{className:"glyphicon form-control-feedback glyphicon-ok"})]}),Object(d.jsx)("input",{type:"submit",value:"Submit",className:"btn btn_color_blue",disabled:!m})]})})};n(43);var _e=function(){var e=Object(a.useState)("mhlm"),t=Object(o.a)(e,2),n=t[0],r=t[1],c="mhlm"===n?"active":"",s="mhlm"===n?"true":"false",i="nlm"===n?"active":"",l="nlm"===n?"true":"false";return Object(d.jsx)("div",{className:"modal show",id:"setup-dialog",tabIndex:"-1",role:"dialog","aria-labelledby":"setup-dialog-title",children:Object(d.jsx)("div",{className:"modal-dialog modal-dialog-centered",role:"document",children:Object(d.jsx)("div",{className:"modal-content",children:Object(d.jsx)("div",{className:"modal-body",children:Object(d.jsxs)("div",{className:"tab-container",children:[Object(d.jsxs)("ul",{id:"setup-tabs",className:"nav nav-tabs",role:"tablist",children:[Object(d.jsx)("li",{role:"presentation",className:c,children:Object(d.jsx)("a",{href:"#mhlm",id:"mhlm-tab",onClick:function(e){e.preventDefault(),r("mhlm")},role:"tab","aria-controls":"mhlm","aria-expanded":s,children:"Online License Manager"})}),Object(d.jsx)("li",{role:"presentation",className:i,children:Object(d.jsx)("a",{href:"#nlm",id:"nlm-tab",onClick:function(e){e.preventDefault(),r("nlm")},role:"tab","aria-controls":"nlm","aria-expanded":l,children:"Network License Manager"})})]}),Object(d.jsxs)("div",{id:"setup-tabs-content",className:"tab-content",children:[Object(d.jsx)("div",{role:"tabpanel",className:"tab-pane ".concat(c),id:"mhlm","aria-labelledby":"mhlm-tab",children:Object(d.jsx)(Te,{})}),Object(d.jsx)("div",{role:"tabpanel",className:"tab-pane ".concat(i),id:"nlm","aria-labelledby":"nlm-tab",children:Object(d.jsx)(Ee,{})}),Object(d.jsx)("div",{children:Object(d.jsxs)("p",{id:"LicensingGathererNote",children:["For more details, see\xa0",Object(d.jsx)("a",{href:"https://github.com/mathworks/matlab-proxy/blob/main/MATLAB-Licensing-Info.md",target:"_blank",rel:"noopener noreferrer",children:"MATLAB Licensing information"})]})})]})]})})})})})},Se=(n(44),{"sign-out":["NetworkLicensingError","EntitlementError"],restart:["OnlineLicensingError"]});var ke=function(e){var t=e.callback,n=Object(s.c)(x),r=Object(s.c)(U),c=Object(s.c)(D),i=Object(s.c)(M),o=Object(s.c)(L),l=Object(s.c)(I),u=Object(s.c)(g),b=Object(s.c)(T),j=r&&!n,h=Object(a.useMemo)((function(){return"%0D%0A\nThank you for providing feedback.%0D%0A\n%0D%0A\nMATLAB version: ".concat(u,"%0D%0A")}),[u]),f={START:{type:"confirmation",message:"Are you sure you want to ".concat(i?"re":"","start MATLAB?"),callback:ye},STOP:{type:"confirmation",message:"Are you sure you want to stop MATLAB?",callback:xe},TERMINATE:{type:"confirmation",message:"Are you sure you want to terminate MATLAB and the backing matlab-proxy server?",callback:ve},SIGN_OUT:{type:"confirmation",message:"Are you sure you want to ".concat(c?"sign out of MATLAB":"unset the connection string","?"),callback:ge},HELP:{type:"help"}};function p(e){var t="btn companion_btn ";if(b){if((Se[e]||[]).includes(b.type))return t+"btn_color_blue"}else if("start"===e)return t+"btn_color_blue";return t+"btn_color_mediumgray"}return Object(d.jsxs)("div",{id:"controls",className:"labels-on-top",children:[Object(d.jsxs)("button",{id:"startMatlab","data-testid":"startMatlabBtn",className:p(i?"restart":"start"),onClick:function(){return t(f.START)},disabled:!r||o||l,"data-for":"control-button-tooltip","data-tip":"".concat(i?"Restart":"Start"," your MATLAB session"),children:[Object(d.jsx)("span",{className:"icon-custom-".concat(i?"re":"","start")}),Object(d.jsx)("span",{className:"btn-label",children:"".concat(i?"Restart":"Start"," MATLAB Session")})]}),Object(d.jsxs)("button",{id:"stopMatlab","data-testid":"stopMatlabBtn",className:p("stop"),onClick:function(){return t(f.STOP)},disabled:!i,"data-for":"control-button-tooltip","data-tip":"Stop your MATLAB session",children:[Object(d.jsx)("span",{className:"icon-custom-stop"}),Object(d.jsx)("span",{className:"btn-label",children:"Stop MATLAB Session"})]}),Object(d.jsxs)("button",{id:"unsetLicensing","data-testid":"unsetLicensingBtn",className:p("sign-out"),onClick:function(){return t(f.SIGN_OUT)},disabled:!j,"data-for":"control-button-tooltip","data-tip":c?"Sign out":"Unset the network license manager server address",children:[Object(d.jsx)("span",{className:"icon-custom-sign-out"}),Object(d.jsx)("span",{className:"btn-label",children:c?"Sign Out":"Unset License Server Address"})]}),Object(d.jsxs)("a",{id:"feedback","data-testid":"feedbackLink",className:"btn btn_color_mediumgray companion_btn",href:"mailto:cloud@mathworks.com?subject=MATLAB-PROXY Feedback&body=".concat(h),"data-for":"control-button-tooltip","data-tip":"Send feedback (opens your default email application)",children:[Object(d.jsx)("span",{className:"icon-custom-feedback"}),Object(d.jsx)("span",{className:"btn-label",children:"Feedback"})]}),Object(d.jsxs)("button",{id:"Help","data-testid":"helpBtn",className:"btn btn_color_mediumgray companion_btn",onClick:function(){return t(f.HELP)},"data-for":"control-button-tooltip","data-tip":"See a description of the buttons",children:[Object(d.jsx)("span",{className:"icon-custom-help"}),Object(d.jsx)("span",{className:"btn-label",children:"Help"})]}),Object(d.jsx)(m.a,{id:"control-button-tooltip",place:"top",type:"info",effect:"solid"})]})},Me=n(10),Le=n.n(Me);n(57);var Ie=function(e){var t,n=e.closeHandler,r=e.children,c=Object(s.c)(N),i=Object(s.c)(T),l=Object(s.c)(C),u=Object(a.useState)(!1),b=Object(o.a)(u,2),j=b[0],m=b[1];switch(null===c||void 0===c?void 0:c.type){case"MHLM":t={label:"Online License Manager (".concat(c.emailAddress,")")};break;case"NLM":t={label:"Network License Manager (".concat(c.connectionString,")")};break;default:t={label:"None"}}var h=Object(s.c)(F),f=i?Object(d.jsxs)("div",{className:"error-container alert alert-danger",children:[Object(d.jsx)("p",{children:Object(d.jsx)("strong",{children:"Error"})}),Object(d.jsx)(Le.a,{children:Object(d.jsx)("div",{className:"error-text",children:i.message})})]}):null,p=i&&null!==i.logs&&i.logs.length>0?Object(d.jsxs)("div",{className:"expand_collapse error-logs-container",children:[Object(d.jsxs)("h4",{className:"expand_trigger ".concat(j?"expanded":"collapsed"),onClick:function(){m(!j)},children:[Object(d.jsx)("span",{className:"icon-arrow-open-down"}),Object(d.jsx)("span",{className:"icon-arrow-open-right"}),"Error logs"]}),Object(d.jsx)("div",{id:"error-logs",className:"expand_target error-container alert alert-danger ".concat(j?"expanded":"collapsed"),"aria-expanded":j,children:Object(d.jsx)(Le.a,{children:Object(d.jsx)("div",{className:"error-msg",children:i.logs.join("\n").trim()})})})]}):null;return Object(d.jsx)("div",{className:"modal show",id:"information",onClick:l?function(e){e.target===e.currentTarget&&(e.preventDefault(),n())}:null,tabIndex:"-1",role:"dialog","aria-labelledby":"information-dialog-title",children:Object(d.jsx)("div",{className:"modal-dialog modal-dialog-centered",role:"document",children:Object(d.jsxs)("div",{className:"modal-content alert alert-".concat(h.alert),children:[Object(d.jsxs)("div",{className:"modal-header",children:[l&&Object(d.jsx)("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":"Close",onClick:n,children:Object(d.jsx)("span",{"aria-hidden":"true",children:"\xd7"})}),Object(d.jsx)("span",{className:"alert_icon icon-alert-".concat(h.icon)}),Object(d.jsx)("h4",{className:"modal-title alert_heading",id:"information-dialog-title",children:"Status Information"})]}),Object(d.jsxs)("div",{className:"modal-body",children:[Object(d.jsx)("table",{className:"details",children:Object(d.jsxs)("tbody",{children:[Object(d.jsxs)("tr",{children:[Object(d.jsx)("td",{children:"MATLAB Status:"}),Object(d.jsxs)("td",{children:[Object(d.jsx)("span",{id:"spinner",className:h.spinner?"show":"hidden"}),h.label]})]}),Object(d.jsxs)("tr",{children:[Object(d.jsx)("td",{children:"Licensing:"}),Object(d.jsx)("td",{children:t.label})]})]})}),f,p]}),Object(d.jsx)("div",{className:"modal-footer",children:r})]})})})};n(58);var Ce=function(e){var t=e.closeHandler,n=e.dismissAllHandler,a=Object(s.c)(C),r=Object(s.c)(E),c=r.doc_url,i=""===r.extension_name?"MATLAB Web Desktop":"MATLAB Integration for ".concat(r.extension_name_short_description);return Object(d.jsx)("div",{className:"modal show",id:"help",onClick:a?function(e){e.target===e.currentTarget&&(e.preventDefault(),n())}:null,tabIndex:"-1",role:"dialog","aria-labelledby":"help-dialog-title",children:Object(d.jsx)("div",{className:"modal-dialog modal-dialog-centered",role:"document",children:Object(d.jsxs)("div",{className:"modal-content",children:[Object(d.jsx)("div",{className:"modal-header",children:Object(d.jsx)("h4",{className:"modal-title",id:"confirmation-dialog-title",children:"Help"})}),Object(d.jsxs)("div",{className:"modal-body help",children:[Object(d.jsxs)("p",{children:["The status panel shows you options to manage the ",Object(d.jsx)("a",{href:c,target:"_blank",rel:"noopener noreferrer",children:i}),"."]}),Object(d.jsx)("p",{children:"Use the buttons in the status panel to:"}),Object(d.jsxs)("div",{children:[Object(d.jsx)("p",{className:"icon-custom-start",children:"Start your MATLAB session. Available if MATLAB is stopped."}),Object(d.jsx)("p",{className:"icon-custom-restart",children:"Restart your MATLAB session. Available if MATLAB is running or starting."}),Object(d.jsx)("p",{className:"icon-custom-stop",children:"Stop your MATLAB session. Use this option if you want to free up RAM and CPU resources. Available if MATLAB is running or starting."}),Object(d.jsxs)("p",{className:"icon-custom-sign-out",children:["Sign out of MATLAB. Use this to stop MATLAB and to sign in with an alternative account. Available if using online licensing.",Object(d.jsx)("br",{}),"Unset network license manager server address. Use this to stop MATLAB and enter new licensing information. Available if using network license manager."]}),Object(d.jsx)("p",{className:"icon-custom-feedback",children:"Send feedback about the ".concat(i,". This action opens your default email application.")})]})]}),Object(d.jsx)("div",{className:"modal-footer",children:Object(d.jsx)("button",{onClick:t,"data-testid":"backBtn",className:"btn btn_color_blue",children:"Back"})})]})})})};n(59);var Be=function(e){var t=e.message,n=e.logs,a=e.children,r=n?Object(d.jsx)("p",{className:"error-msg",children:n}):null;return Object(d.jsx)("div",{className:"modal show",id:"error",tabIndex:"-1",role:"dialog","aria-labelledby":"help-dialog-title",children:Object(d.jsx)("div",{className:"modal-dialog modal-dialog-centered",role:"document",children:Object(d.jsxs)("div",{className:"modal-content alert alert-danger",children:[Object(d.jsxs)("div",{className:"modal-header",children:[Object(d.jsx)("span",{className:"alert_icon icon-alert-error"}),Object(d.jsx)("h4",{className:"modal-title alert_heading",children:"Error"})]}),Object(d.jsxs)("div",{className:"modal-body",children:[Object(d.jsx)("p",{children:t}),Object(d.jsx)(Le.a,{children:r}),a]})]})})})};var Re=function(){var e,t,n=Object(s.b)(),r=Object(s.c)(V),c=Object(s.c)(R),i=Object(s.c)(y),b=Object(s.c)(E),j=Object(s.c)(U),m=Object(s.c)(k),f=Object(s.c)(T),p=Object(s.c)(w),O=Object(s.c)(S),g=Object(a.useCallback)((function(){return n(de(!r))}),[r,n]),v=Object(a.useState)(null),x=Object(o.a)(v,2),N=x[0],A=x[1];if(N){var _=function(){return A(null)};switch(N.type){case"confirmation":e=Object(d.jsx)(u,{confirm:function(){n(N.callback()),A(null)},cancel:_,children:N.message||""});break;case"help":e=Object(d.jsx)(Ce,{closeHandler:_,dismissAllHandler:function(){_(),g(!1)}});break;default:throw new Be("Unknown dialog type: ".concat(N.type,"."))}}O?e=Object(d.jsx)(Be,{message:"Either this integration terminated or the session ended",children:Object(d.jsxs)("p",{children:["Attempt to ",Object(d.jsx)("a",{href:"../",children:"return to a parent app"})]})}):f&&"MatlabInstallError"===f.type&&(e=Object(d.jsx)(Be,{message:f.message})),Object(a.useEffect)((function(){b||n(function(){var e=Object(Q.a)(W.a.mark((function e(t,n){var a,r;return W.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t({type:ie}),e.next=3,he(t,"./get_env_config",{},1e4);case 3:return a=e.sent,e.next=6,a.json();case 6:r=e.sent,t({type:oe,config:r});case 8:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}())}),[n,b]),Object(a.useEffect)((function(){i||n(pe())}),[n,i]),Object(l.a)((function(){n(pe())}),c),Object(a.useEffect)((function(){null!==p&&(window.location.href=p)}),[p]),e?t=e:i&&!j?t=Object(d.jsx)(_e,{}):j&&!e&&(t=Object(d.jsx)(Ie,{closeHandler:g,children:Object(d.jsx)(ke,{callback:function(e){return A(e)}})}));var M=r?Object(d.jsx)(h,{children:t}):null,L=m?Object(d.jsx)(we,{url:"./index-jsd-cr.html"}):null,I=r?null:Object(d.jsx)(Ne,{});return Object(d.jsxs)("div",{"data-testid":"app",className:"main",children:[I,L,M]})};var Ue=Object(i.b)({licensingInfo:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;switch(t.type){case z:case ne:case ae:case re:case ce:return Object(G.a)({},t.status.licensing);default:return e}},matlabStatus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"down",t=arguments.length>1?arguments[1]:void 0;switch(t.type){case z:case ne:case ae:case re:case ce:return t.status.matlab.status;case ee:case te:return t.status;default:return e}},matlabVersion:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case z:case ne:case ae:case re:case ce:return t.status.matlab.version;default:return e}},wsEnv:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case z:case ne:case ae:case re:case ce:return t.status.wsEnv;default:return e}},isFetching:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1?arguments[1]:void 0;switch(t.type){case $:case K:case Z:case ee:case te:case ie:return!0;case z:case ne:case ae:case re:case ce:case se:case oe:return!1;default:return e}},hasFetched:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1?arguments[1]:void 0;switch(t.type){case z:case ne:case ae:case re:case ce:return!0;default:return e}},isSubmitting:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1?arguments[1]:void 0;switch(t.type){case K:case Z:case ee:case te:return!0;case ne:case ae:case re:case ce:case se:return!1;default:return e}},fetchFailCount:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case z:case ne:case ae:case re:case ce:return 0;case se:return e+1;default:return e}}}),De=Object(i.b)({triggerPosition:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{x:window.innerWidth/2+27,y:0},t=arguments.length>1?arguments[1]:void 0;return t.type===X?{x:t.x,y:t.y}:e},tutorialHidden:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1?arguments[1]:void 0;return t.type===Y?t.hidden:e},overlayVisibility:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1?arguments[1]:void 0;switch(t.type){case q:return t.visibility;case z:if(!0===t.previousMatlabPending&&"up"===t.status.matlab.status)return!1;default:return e}},serverStatus:Ue,loadUrl:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1?arguments[1]:void 0;return t.type===ae?t.loadUrl:e},error:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case se:return{message:t.error,statusCode:null===t||void 0===t?void 0:t.statusCode,logs:null};case z:case ne:case ae:case re:case ce:return t.status.error?{message:t.status.error.message,logs:t.status.error.logs,type:t.status.error.type}:null;default:return e}},envConfig:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1?arguments[1]:void 0;return t.type===oe?t.config:e}}),Pe=n(21),He="undefined"!==typeof window&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__||i.c,Ve=Object(i.d)(De,He(Object(i.a)(Pe.a)));c.a.render(Object(d.jsx)(s.a,{store:Ve,children:Object(d.jsx)(Re,{})}),document.getElementById("root"))}},[[60,1,2]]]);
|
|
2
|
-
//# sourceMappingURL=main.c311d854.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["components/Confirmation/index.js","components/Overlay/index.js","selectors/index.js","actions/index.js","actionCreators/index.js","components/OverlayTrigger/index.js","components/MatlabJsd/index.js","components/LicensingGatherer/MHLM.js","components/LicensingGatherer/NLM.js","components/LicensingGatherer/index.js","components/Controls/index.js","components/Information/index.js","components/Help/index.js","components/Error/index.js","components/App/index.js","reducers/index.js","index.js"],"names":["Confirmation","confirm","cancel","children","className","id","tabIndex","role","onClick","Overlay","transparent","style","backgroundColor","selectTutorialHidden","state","tutorialHidden","selectMatlabStatus","serverStatus","matlabStatus","selectMatlabVersion","matlabVersion","selectWsEnv","wsEnv","selectSubmittingServerStatus","isSubmitting","selectHasFetchedServerStatus","hasFetched","selectLicensingInfo","licensingInfo","selectLoadUrl","loadUrl","selectError","error","selectTriggerPosition","createSelector","triggerPosition","pos","undefined","selectHasFetchedEnvConfig","envConfig","config","selectIsError","selectIsConnectionError","fetchFailCount","fails","selectMatlabUp","selectMatlabRunning","selectMatlabStarting","selectMatlabStopping","selectOverlayHidable","isError","selectOverlayVisibility","overlayVisibility","visibility","matlabUp","selectFetchStatusPeriod","fetchAbortController","selectLicensingProvided","Object","prototype","hasOwnProperty","call","selectLicensingIsMhlm","licensingProvided","type","selectLicensingMhlmUsername","isMhlm","emailAddress","selectMatlabPending","selectOverlayVisible","selectInformationDetails","statusCode","icon","alert","label","spinner","detail","Error","SET_TRIGGER_POSITION","SET_TUTORIAL_HIDDEN","SET_OVERLAY_VISIBILITY","REQUEST_SERVER_STATUS","RECEIVE_SERVER_STATUS","REQUEST_SET_LICENSING","REQUEST_TERMINATE_INTEGRATION","REQUEST_STOP_MATLAB","REQUEST_START_MATLAB","RECEIVE_SET_LICENSING","RECEIVE_TERMINATE_INTEGRATION","RECEIVE_STOP_MATLAB","RECEIVE_START_MATLAB","RECEIVE_ERROR","REQUEST_ENV_CONFIG","RECEIVE_ENV_CONFIG","setTriggerPosition","x","y","setOverlayVisibility","receiveServerStatus","status","dispatch","getState","previousMatlabPending","requestSetLicensing","receiveSetLicensing","receiveError","fetchWithTimeout","resource","a","options","timeout","controller","AbortController","setTimeout","abort","fetch","signal","response","clearTimeout","errorText","name","fetchServerStatus","json","data","fetchSetLicensing","info","method","mode","cache","credentials","headers","body","JSON","stringify","fetchUnsetLicensing","fetchTerminateIntegration","fetchStopMatlab","fetchStartMatlab","OverlayTrigger","useDispatch","useSelector","useState","dragging","setDragging","triggerRef","useRef","dataTipMsg","extension_name","extension_name_short_description","useEffect","observer","IntersectionObserver","isIntersecting","window","innerWidth","observe","current","disconnect","overlayVisible","toggleOverlayVisible","useCallback","details","onDrag","event","onStop","blankOverlay","tutorial","title","hidden","tooltip","place","effect","position","handle","bounds","ref","onMouseDown","e","stopPropagation","MatlabJsd","url","src","frameBorder","allowFullScreen","MHLM","iFrameLoaded","setIFrameLoaded","username","mhlmLoginHostname","useMemo","subdomain","includes","sourceId","Math","random","toString","substring","handler","origin","parse","clientNonce","serverNonce","initPayload","clientTransactionId","transactionId","release","platform","clientString","clientId","profileTier","showCreateAccount","showRememberMe","showLicenseField","entitlementId","showPrivacyPolicy","contextualText","legalText","cachedIdentifier","cachedRememberMe","token","unauthorized","document","getElementById","contentWindow","postMessage","initLogin","profileId","addEventListener","removeEventListener","noncePayload","substr","clientID","locale","licenseNo","cachedUsername","setLoginNonce","embeddedLoginUrl","height","width","onLoad","connStrRegex","NLM","str","connStr","setConnStr","changed","setChanged","valid","test","onSubmit","preventDefault","htmlFor","required","placeholder","value","onChange","target","disabled","LicensingGatherer","activeTab","setActiveTab","mhlmActive","mhlmAriaExpanded","nlmActive","nlmAriaExpanded","href","rel","ERROR_TYPE_MAP","Controls","callback","submitting","licensed","mhlmLicense","matlabRunning","matlabStarting","matlabStopping","canResetLicensing","feedbackBody","Confirmations","START","message","STOP","TERMINATE","SIGN_OUT","HELP","getBtnClass","btn","cls","Information","closeHandler","overlayHidable","errorLogsExpanded","setErrorLogsExpanded","connectionString","errorMessageNode","errorLogsNode","logs","length","join","trim","currentTarget","Help","dismissAllHandler","doc_url","targetEnvMsg","logReport","App","dialog","overlayContent","fetchStatusPeriod","hasFetchedServerStatus","hasFetchedEnvConfig","isConnectionError","dialogModel","setDialogModel","useInterval","location","args","overlay","matlabJsd","overlayTrigger","combineReducers","action","licensing","matlab","version","isFetching","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","store","createStore","rootReducer","applyMiddleware","thunkMiddleware","ReactDOM","render"],"mappings":"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","file":"static/js/main.c311d854.chunk.js","sourcesContent":["// Copyright (c) 2020-2022 The MathWorks, Inc.\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction Confirmation({ confirm, cancel, children }) {\n return (\n <div className=\"modal show\"\n id=\"confirmation\"\n tabIndex=\"-1\"\n role=\"dialog\"\n aria-labelledby=\"confirmation-dialog-title\">\n <div className=\"modal-dialog modal-dialog-centered\"\n role=\"document\">\n <div className=\"modal-content\">\n <div className=\"modal-header\">\n <h4 className=\"modal-title\" id=\"confirmation-dialog-title\">Confirmation</h4>\n </div>\n <div className=\"modal-body\">\n {children}\n </div>\n <div className=\"modal-footer\">\n <button onClick={cancel} data-testid='cancelButton' className=\"btn companion_btn btn_color_blue\">Cancel</button>\n <button onClick={confirm} data-testid='confirmButton' className=\"btn btn_color_blue\">Confirm</button>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nConfirmation.propTypes = {\n confirm: PropTypes.func.isRequired,\n cancel: PropTypes.func.isRequired,\n children: PropTypes.node.isRequired\n};\n\nexport default Confirmation;\n","// Copyright (c) 2020-2022 The MathWorks, Inc.\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport './Overlay.css';\n\nfunction Overlay({\n children,\n transparent = false\n}) {\n\n return (\n <div\n id=\"overlay\"\n style={\n {\n backgroundColor: transparent ? \"transparent\" : null\n }\n }\n >\n {children}\n </div>\n );\n}\n\nOverlay.propTypes = {\n transparent: PropTypes.bool\n};\n\nexport default Overlay;\n","// Copyright (c) 2020-2022 The MathWorks, Inc.\n\nimport { createSelector } from 'reselect';\n\nexport const selectTutorialHidden = state => state.tutorialHidden;\nexport const selectServerStatus = state => state.serverStatus;\nexport const selectMatlabStatus = state => state.serverStatus.matlabStatus;\nexport const selectMatlabVersion = state => state.serverStatus.matlabVersion;\nexport const selectWsEnv = state => state.serverStatus.wsEnv;\nexport const selectSubmittingServerStatus = state => state.serverStatus.isSubmitting;\nexport const selectHasFetchedServerStatus = state => state.serverStatus.hasFetched;\nexport const selectLicensingInfo = state => state.serverStatus.licensingInfo;\nexport const selectLoadUrl = state => state.loadUrl;\nexport const selectServerStatusFetchFailCount = state => state.serverStatus.fetchFailCount;\nexport const selectError = state => state.error;\n\nexport const selectTriggerPosition = createSelector(\n state => state.triggerPosition,\n pos => pos === null ? undefined : pos\n);\n\nexport const selectHasFetchedEnvConfig = createSelector(\n (state) => state.envConfig,\n (config) => (config === null ? false : config)\n);\n\nexport const selectIsError = createSelector(\n selectError,\n error => error !== null\n);\n\nexport const selectIsConnectionError = createSelector(\n selectServerStatusFetchFailCount,\n fails => fails >= 5\n);\n\nexport const selectMatlabUp = createSelector(\n selectMatlabStatus,\n matlabStatus => matlabStatus === 'up'\n);\n\nexport const selectMatlabRunning = createSelector(\n selectMatlabStatus,\n matlabStatus => matlabStatus === 'up'\n);\n\nexport const selectMatlabStarting = createSelector(\n selectMatlabStatus,\n matlabStatus => matlabStatus === 'starting'\n);\n\nexport const selectMatlabStopping = createSelector(\n selectMatlabStatus,\n matlabStatus => matlabStatus === 'stopping'\n);\n\nexport const selectOverlayHidable = createSelector(\n selectMatlabStatus,\n selectIsError,\n (matlabStatus, isError) => (matlabStatus === 'up' && !isError)\n);\n\nexport const selectOverlayVisibility = createSelector(\n state => state.overlayVisibility,\n selectMatlabUp,\n selectIsError,\n (visibility, matlabUp, isError) => (\n !matlabUp || visibility || isError\n )\n);\n\nexport const getFetchAbortController = createSelector(\n selectServerStatus,\n serverStatus => serverStatus.fetchAbortController\n);\n\nexport const selectFetchStatusPeriod = createSelector(\n selectMatlabStatus,\n selectSubmittingServerStatus,\n (matlabStatus, isSubmitting) => {\n if (isSubmitting) {\n return null;\n } else if (matlabStatus === 'up') {\n return 10000;\n }\n return 5000;\n }\n);\n\nexport const selectLicensingProvided = createSelector(\n selectLicensingInfo,\n licensingInfo => Object.prototype.hasOwnProperty.call(licensingInfo, 'type')\n);\n\nexport const selectLicensingIsMhlm = createSelector(\n selectLicensingInfo,\n selectLicensingProvided,\n (licensingInfo, licensingProvided) => licensingProvided && licensingInfo.type === 'MHLM'\n);\n\nexport const selectLicensingMhlmUsername = createSelector(\n selectLicensingInfo,\n selectLicensingIsMhlm,\n (licensingInfo, isMhlm) => isMhlm ? licensingInfo.emailAddress : ''\n);\n\n// TODO Are these overkill? Perhaps just selecting status would be enough\n// TODO Could be used for detected intermedia failures, such as server being\n// temporarily inaccessible\nexport const selectMatlabPending = createSelector(\n selectMatlabStatus,\n matlabStatus => matlabStatus === 'starting'\n);\n\nexport const selectOverlayVisible = createSelector(\n selectOverlayVisibility,\n selectIsError,\n (visibility, isError) => (visibility || isError)\n);\n\nexport const selectInformationDetails = createSelector(\n selectMatlabStatus,\n selectIsError,\n selectError,\n (matlabStatus, isError, error) => {\n\n // Check for any errors on the front-end \n // to see if HTTP Requests are timing out. \n if (isError && error.statusCode === 408) {\n return {\n icon: 'warning',\n alert: 'warning',\n label: 'Unknown',\n }\n }\n\n\n // Check status of MATLAB for errors\n switch (matlabStatus) {\n case 'up':\n return {\n label: 'Running',\n icon: 'success',\n alert: 'success'\n };\n case 'starting':\n return {\n label: 'Starting. This may take several minutes.',\n icon: 'info-reverse',\n alert: 'info',\n spinner: true\n };\n\n case 'stopping':\n return {\n label: 'Stopping',\n icon: 'info-reverse',\n alert: 'info',\n spinner: true\n };\n case 'down':\n const detail = {\n label: 'Not running',\n icon: 'info-reverse',\n alert: 'info'\n };\n if (isError) {\n detail.icon = 'error';\n detail.alert = 'danger';\n }\n return detail;\n default:\n throw new Error(`Unknown MATLAB status: \"${matlabStatus}\".`);\n }\n\n }\n);\n","// Copyright (c) 2020-2022 The MathWorks, Inc.\n\nexport const SET_TRIGGER_POSITION = 'SET_TRIGGER_POSITION';\nexport const SET_TUTORIAL_HIDDEN = 'SET_TUTORIAL_HIDDEN';\nexport const SET_OVERLAY_VISIBILITY = 'SET_OVERLAY_VISIBILITY';\nexport const REQUEST_SERVER_STATUS = 'REQUEST_SERVER_STATUS';\nexport const RECEIVE_SERVER_STATUS = 'RECEIVE_SERVER_STATUS';\nexport const REQUEST_SET_LICENSING = 'REQUEST_SET_LICENSING';\nexport const REQUEST_TERMINATE_INTEGRATION = 'REQUEST_TERMINATE_INTEGRATION';\nexport const REQUEST_STOP_MATLAB = 'REQUEST_STOP_MATLAB';\nexport const REQUEST_START_MATLAB = 'REQUEST_START_MATLAB';\nexport const RECEIVE_SET_LICENSING = 'RECEIVE_SET_LICENSING';\nexport const RECEIVE_TERMINATE_INTEGRATION = 'RECEIVE_TERMINATE_INTEGRATION';\nexport const RECEIVE_STOP_MATLAB = 'RECEIVE_STOP_MATLAB';\nexport const RECEIVE_START_MATLAB = 'RECEIVE_START_MATLAB';\nexport const RECEIVE_ERROR = 'RECEIVE_ERROR';\nexport const REQUEST_ENV_CONFIG = 'REQUEST_ENV_CONFIG';\nexport const RECEIVE_ENV_CONFIG = 'RECEIVE_ENV_CONFIG';\n","// Copyright (c) 2020-2022 The MathWorks, Inc.\n\nimport {\n SET_TRIGGER_POSITION,\n SET_TUTORIAL_HIDDEN,\n SET_OVERLAY_VISIBILITY,\n REQUEST_SERVER_STATUS,\n RECEIVE_SERVER_STATUS,\n REQUEST_SET_LICENSING,\n REQUEST_TERMINATE_INTEGRATION,\n REQUEST_STOP_MATLAB,\n REQUEST_START_MATLAB,\n REQUEST_ENV_CONFIG,\n RECEIVE_SET_LICENSING,\n RECEIVE_TERMINATE_INTEGRATION,\n RECEIVE_STOP_MATLAB,\n RECEIVE_START_MATLAB,\n RECEIVE_ERROR,\n RECEIVE_ENV_CONFIG,\n} from '../actions';\nimport { selectMatlabPending } from '../selectors';\n\nexport function setTriggerPosition(x, y) {\n return {\n type: SET_TRIGGER_POSITION,\n x,\n y\n };\n}\n\nexport function setTutorialHidden(hidden) {\n return {\n type: SET_TUTORIAL_HIDDEN,\n hidden\n };\n}\n\nexport function setOverlayVisibility(visibility) {\n return {\n type: SET_OVERLAY_VISIBILITY,\n visibility\n };\n}\n\nexport function requestServerStatus() {\n return {\n type: REQUEST_SERVER_STATUS,\n };\n}\n\nexport function receiveServerStatus(status) {\n return function (dispatch, getState) {\n return dispatch({\n type: RECEIVE_SERVER_STATUS,\n status,\n previousMatlabPending: selectMatlabPending(getState())\n });\n }\n}\n\nexport function requestEnvConfig() {\n return {\n type: REQUEST_ENV_CONFIG,\n };\n}\n\nexport function receiveEnvConfig(config) {\n return {\n type: RECEIVE_ENV_CONFIG,\n config,\n };\n}\n\nexport function requestSetLicensing() {\n return {\n type: REQUEST_SET_LICENSING,\n };\n}\n\nexport function receiveSetLicensing(status) {\n return {\n type: RECEIVE_SET_LICENSING,\n status\n };\n}\n\nexport function requestTerminateIntegration() {\n return {\n type: REQUEST_TERMINATE_INTEGRATION,\n };\n}\n\nexport function receiveTerminateIntegration(status) {\n return {\n type: RECEIVE_TERMINATE_INTEGRATION,\n status,\n loadUrl: '../'\n };\n}\n\nexport function requestStopMatlab() {\n return {\n type: REQUEST_STOP_MATLAB,\n status: 'stopping'\n };\n}\n\nexport function receiveStopMatlab(status) {\n return {\n type: RECEIVE_STOP_MATLAB,\n status\n };\n}\n\nexport function requestStartMatlab() {\n return {\n type: REQUEST_START_MATLAB,\n status: 'starting'\n };\n}\n\nexport function receiveStartMatlab(status) {\n return {\n type: RECEIVE_START_MATLAB,\n status\n };\n}\n\n// TODO Probably no need for multiple actions/action creators for fetch\n// failures?\nexport function receiveError(error, statusCode) {\n return {\n type: RECEIVE_ERROR,\n error,\n statusCode\n }\n}\n\nexport async function fetchWithTimeout(dispatch, resource, options = {}, timeout = 10000) {\n // Create an abort controller for this request and set a timeout for it to abort.\n const controller = new AbortController();\n const id = setTimeout(() => controller.abort(), timeout);\n\n try {\n const response = await fetch(resource, {\n ...options,\n signal: controller.signal\n });\n clearTimeout(id);\n\n return response;\n } catch (err) {\n const errorText = 'Check your internet connection and verify that the server is running.';\n // If AbortController is aborted, then AbortError exception is raised due to time out.\n if (err.name === \"AbortError\" || err.name === 'TypeError') {\n dispatch(receiveError(`HTTP Error 408 - Request Timeout. ${errorText}`, 408))\n } else {\n dispatch(receiveError(\"Communication with server failed.\", 500))\n }\n }\n}\n\n\nexport function fetchServerStatus() {\n return async function (dispatch, getState) {\n\n dispatch(requestServerStatus());\n const response = await fetchWithTimeout(dispatch, './get_status', {}, 10000)\n const data = await response.json();\n dispatch(receiveServerStatus(data));\n\n }\n}\n\nexport function fetchEnvConfig() {\n return async function (dispatch, getState) {\n\n dispatch(requestEnvConfig());\n const response = await fetchWithTimeout(dispatch, './get_env_config', {}, 10000);\n const data = await response.json();\n dispatch(receiveEnvConfig(data));\n\n };\n}\n\n\nexport function fetchSetLicensing(info) {\n return async function (dispatch, getState) {\n\n const options = {\n method: 'PUT',\n mode: 'same-origin',\n cache: 'no-cache',\n credentials: 'same-origin',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(info),\n }\n\n dispatch(requestSetLicensing());\n const response = await fetchWithTimeout(dispatch, './set_licensing_info', options, 15000);\n const data = await response.json();\n dispatch(receiveSetLicensing(data));\n\n }\n}\n\nexport function fetchUnsetLicensing() {\n return async function (dispatch, getState) {\n\n const options = {\n method: 'DELETE',\n mode: 'same-origin',\n cache: 'no-cache',\n credentials: 'same-origin',\n }\n\n dispatch(requestSetLicensing());\n const response = await fetchWithTimeout(dispatch, './set_licensing_info', options, 15000);\n const data = await response.json();\n dispatch(receiveSetLicensing(data));\n\n }\n}\n\nexport function fetchTerminateIntegration() {\n return async function (dispatch, getState) {\n\n const options = {\n method: 'DELETE',\n mode: 'same-origin',\n cache: 'no-cache',\n credentials: 'same-origin',\n }\n\n dispatch(requestTerminateIntegration());\n const response = await fetchWithTimeout(dispatch, './terminate_integration', options, 15000);\n const data = await response.json();\n dispatch(receiveTerminateIntegration(data));\n\n }\n}\n\nexport function fetchStopMatlab() {\n return async function (dispatch, getState) {\n\n const options = {\n method: 'DELETE',\n mode: 'same-origin',\n cache: 'no-cache',\n credentials: 'same-origin',\n }\n\n dispatch(requestStopMatlab());\n const response = await fetchWithTimeout(dispatch, './stop_matlab', options, 15000);\n const data = await response.json();\n dispatch(receiveStopMatlab(data));\n\n }\n}\n\nexport function fetchStartMatlab() {\n return async function (dispatch, getState) {\n\n const options = {\n method: 'PUT',\n mode: 'same-origin',\n cache: 'no-cache',\n credentials: 'same-origin',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({}),\n }\n\n dispatch(requestStartMatlab());\n const response = await fetchWithTimeout(dispatch, './start_matlab', options, 15000);\n const data = await response.json();\n dispatch(receiveStartMatlab(data));\n\n }\n}\n","// Copyright (c) 2020-2022 The MathWorks, Inc.\n\n\nimport React, { useState, useCallback, useRef, useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport Draggable from 'react-draggable';\nimport ReactTooltip from 'react-tooltip';\nimport Overlay from '../Overlay';\nimport {\n selectInformationDetails,\n selectTriggerPosition,\n selectTutorialHidden,\n selectOverlayVisible,\n selectHasFetchedEnvConfig\n} from '../../selectors';\nimport {\n setTriggerPosition,\n setTutorialHidden,\n setOverlayVisibility\n} from '../../actionCreators';\nimport './OverlayTrigger.css';\n\nfunction OverlayTrigger() {\n const dispatch = useDispatch();\n const triggerPosition = useSelector(selectTriggerPosition);\n const config = useSelector(selectHasFetchedEnvConfig);\n const [dragging, setDragging] = useState(false);\n const triggerRef = useRef();\n\n\n const dataTipMsg = config.extension_name === '' ? `MATLAB Web Desktop` : `${config.extension_name_short_description} - MATLAB Integration`;\n\n // Observe trigger position and react to it appearing offscreen\n useEffect(() => {\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (!entry.isIntersecting) {\n dispatch(setTriggerPosition(window.innerWidth / 2 + 27, 0));\n }\n }\n );\n observer.observe(triggerRef.current);\n return () => {\n observer.disconnect();\n };\n }, [dispatch]);\n\n const overlayVisible = useSelector(selectOverlayVisible);\n\n const toggleOverlayVisible = useCallback(\n () => dispatch(setOverlayVisibility(!overlayVisible)),\n [overlayVisible, dispatch]\n );\n\n const tutorialHidden = useSelector(selectTutorialHidden);\n\n const details = useSelector(selectInformationDetails);\n\n const onDrag = useCallback(\n (event, data) => {\n setDragging(true);\n dispatch(setTriggerPosition(data.x, data.y));\n },\n [dispatch, setDragging]\n );\n\n const onStop = useCallback(\n (event, data) => {\n setDragging(false);\n dispatch(setTriggerPosition(data.x, data.y))\n\n },\n [dispatch, setDragging]\n );\n\n // Blank overlay to use when moving the icon because iframes swallow events\n // if not masked\n const blankOverlay = dragging ? <Overlay transparent={true} /> : null;\n\n const handleCloseTutorial = () => {\n dispatch(setTutorialHidden(true));\n };\n\n const tutorial = tutorialHidden ? null : (\n <div id=\"trigger-tutorial\" className=\"trigger-tutorial modal-content\">\n <p>To control the MATLAB session (for example to restart or sign out), click the <span className=\"icon-custom-trigger icon trigger-tutorial-icon\" title=\"tools icon\" /> icon.</p>\n <p>The color of the badge shows the MATLAB status.</p>\n <p>To position this widget anywhere on screen, click and drag the <span className=\"drag-handle icon\" title=\"grab handle icon\" /> icon.</p>\n <button className=\"btn btn_color_blue pull-right\" data-testid='tutorialCloseBtn' onClick={handleCloseTutorial}>Close</button>\n </div>\n );\n\n const tooltip = tutorialHidden ? (\n <ReactTooltip\n id=\"trigger-button-tooltip\"\n place=\"bottom\"\n type=\"info\"\n effect=\"solid\"\n />\n ) : null;\n\n return (\n <>\n {blankOverlay}\n <Draggable\n position={triggerPosition}\n onDrag={onDrag}\n onStop={onStop}\n handle=\".card-body\"\n bounds=\"parent\"\n >\n <div\n ref={triggerRef}\n className={`card alert-${details.alert}`}\n data-testid='overlayTrigger'\n >\n <div className=\"card-body\" data-testid='cardBody'>\n <span id=\"drag-handle\" className=\"drag-handle\"></span>\n <button\n type=\"button\"\n className=\"trigger-btn\"\n onClick={toggleOverlayVisible}\n onMouseDown={e => e.stopPropagation()}\n aria-label=\"Menu\"\n data-for=\"trigger-button-tooltip\"\n data-tip={`Open the ${dataTipMsg} settings`}\n >\n <span className=\"icon-custom-trigger\"></span>\n </button>\n </div>\n {tutorial}\n </div>\n </Draggable>\n {tooltip}\n </>\n );\n}\n\nexport default OverlayTrigger;\n","// Copyright (c) 2020-2022 The MathWorks, Inc.\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport './MatlabJsd.css';\n\nfunction MatlabJsd({ url }) {\n return (\n <div id=\"MatlabJsd\">\n <iframe\n title=\"MATLAB JSD\"\n src={url}\n frameBorder=\"0\"\n allowFullScreen />\n </div>\n );\n}\n\nMatlabJsd.propTypes = {\n url: PropTypes.string.isRequired\n};\n\nexport default MatlabJsd;\n","// Copyright (c) 2020-2022 The MathWorks, Inc.\n\nimport React, { useState, useEffect, useMemo } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n selectLicensingMhlmUsername,\n selectWsEnv\n} from '../../selectors';\nimport {\n fetchSetLicensing\n} from '../../actionCreators';\n\n// Send a generated nonce to the login iframe\nfunction setLoginNonce(username) {\n const clientNonce = (Math.random() + \"\").substr(2);\n const noncePayload = {\n event: \"init\",\n clientTransactionId: clientNonce,\n transactionId: \"\",\n release: \"\",\n platform: \"\",\n clientString: \"desktop-jupyter\",\n clientID: \"\",\n locale: \"\",\n profileTier: \"\",\n showCreateAccount: false,\n showRememberMe: false,\n showLicenseField: false,\n licenseNo: \"\",\n cachedUsername: username,\n cachedRememberMe: false\n };\n\n const loginFrame = document.getElementById(\"loginframe\").contentWindow;\n loginFrame.postMessage(JSON.stringify(noncePayload), \"*\");\n}\n\nfunction initLogin(clientNonce, serverNonce, sourceId) {\n const initPayload = {\n event: \"load\",\n clientTransactionId: clientNonce,\n transactionId: serverNonce,\n release: \"\",\n platform: \"web\",\n clientString: \"desktop-jupyter\",\n clientId: \"\",\n sourceId: sourceId,\n profileTier: \"MINIMUM\",\n showCreateAccount: false,\n showRememberMe: false,\n showLicenseField: false,\n entitlementId: \"\",\n showPrivacyPolicy: true,\n contextualText: \"\",\n legalText: \"\",\n cachedIdentifier: \"\",\n cachedRememberMe: \"\",\n token: \"\",\n unauthorized: false\n };\n\n const loginFrame = document.getElementById(\"loginframe\").contentWindow;\n loginFrame.postMessage(JSON.stringify(initPayload), \"*\");\n}\n\nfunction MHLM() {\n const dispatch = useDispatch();\n const [iFrameLoaded, setIFrameLoaded] = useState(false);\n const username = useSelector(selectLicensingMhlmUsername);\n const wsEnv = useSelector(selectWsEnv);\n const mhlmLoginHostname = useMemo(\n () => {\n let subdomain = 'login';\n if (wsEnv.includes('integ')) {\n subdomain = `${subdomain}-${wsEnv}`;\n }\n return `https://${subdomain}.mathworks.com`;\n },\n [wsEnv]\n );\n\n // Create random sourceId string\n const sourceId = useState(\n Math.random().toString(36).substring(2, 15)\n + Math.random().toString(36).substring(2, 15)\n )[0];\n\n useEffect(() => {\n\n const handler = event => {\n\n // Only process events that are related to the iframe setup\n if (event.origin === mhlmLoginHostname) {\n const data = JSON.parse(event.data);\n\n if (data.event === 'nonce') {\n initLogin(\n data.clientTransactionId,\n data.transactionId,\n sourceId\n );\n } else if (data.event === 'login') {\n // Persist credentials to serverside\n dispatch(fetchSetLicensing({\n type: 'MHLM',\n token: data.token,\n profileId: data.profileId,\n emailAddress: data.emailAddress,\n sourceId\n }));\n }\n }\n };\n\n window.addEventListener(\"message\", handler);\n\n // Clean up\n return () => {\n window.removeEventListener(\"message\", handler);\n };\n }, [dispatch, sourceId, mhlmLoginHostname]);\n\n useEffect(() => {\n if (iFrameLoaded === true) {\n setLoginNonce(username);\n }\n }, [iFrameLoaded, username]);\n\n const handleIFrameLoaded = () => setIFrameLoaded(true);\n\n const embeddedLoginUrl = `${mhlmLoginHostname}/embedded-login/v2/login.html`;\n\n return (\n <div id=\"MHLM\">\n <iframe\n id=\"loginframe\"\n title=\"MathWorks Embedded Login\"\n type=\"text/html\"\n height=\"380\"\n width=\"100%\"\n frameBorder=\"0\"\n src={embeddedLoginUrl}\n onLoad={handleIFrameLoaded}\n >\n Sorry your browser does not support inline frames.\n </iframe>\n </div>\n );\n}\n\nexport default MHLM;\n\n","// Copyright (c) 2020-2022 The MathWorks, Inc.\n\nimport React, { useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport {\n fetchSetLicensing\n} from '../../actionCreators';\n\n// Regular expression to match port@hostname,\n// where port is any number and hostname is alphanumeric\n// Regex FOR \n// Start of Line, Any number of 0-9 digits , @, any number of nonwhite space characters with \"- _ .\" allowed, and EOL\n// IS:\n// ^[0-9]+[@](\\w|\\_|\\-|\\.)+$\n// Server triad is of the form : port@host1,port@host2,port@host3\nconst connStrRegex = /^[\\d]+@[\\w|\\-|_|.]+$|^[\\d]+@[\\w|\\-|_|.]+,[\\d]+@[\\w|\\-|_|.]+,[\\d]+@[\\w|\\-|_|.]+$/\n\nfunction validateInput(str) {\n return connStrRegex.test(str);\n}\n\nfunction NLM() {\n const dispatch = useDispatch();\n const [connStr, setConnStr] = useState('');\n const [changed, setChanged] = useState(false);\n\n const valid = validateInput(connStr);\n\n function submitForm(event) {\n event.preventDefault();\n dispatch(fetchSetLicensing({\n 'type': 'NLM',\n 'connectionString': connStr\n }));\n }\n\n return (\n <div id=\"NLM\">\n <form onSubmit={submitForm}>\n <div className={`form-group has-feedback ${changed ? (valid ? 'has-success' : 'has-error') : ''}`}>\n <label htmlFor=\"nlm-connection-string\">License Server Address</label>\n <input id=\"nlm-connection-string\"\n type=\"text\"\n required={true}\n placeholder={'port@hostname'}\n className=\"form-control\"\n aria-invalid={!valid}\n value={connStr}\n onChange={event => { setChanged(true); setConnStr(event.target.value); }}\n />\n <span className=\"glyphicon form-control-feedback glyphicon-remove\"></span>\n <span className=\"glyphicon form-control-feedback glyphicon-ok\"></span>\n </div>\n <input type=\"submit\" value=\"Submit\" className=\"btn btn_color_blue\" disabled={!valid} />\n </form>\n </div>\n );\n}\n\nexport default NLM;\n","// Copyright (c) 2020-2022 The MathWorks, Inc.\n\nimport React, { useState } from 'react';\nimport MHLM from './MHLM';\nimport NLM from './NLM';\nimport './LicensingGatherer.css';\n\nfunction LicensingGatherer() {\n\n const [activeTab, setActiveTab] = useState('mhlm');\n\n const handleMhlmTabClick = e => {\n e.preventDefault();\n setActiveTab(\"mhlm\");\n };\n\n const handleNlmTabClick = e => {\n e.preventDefault();\n setActiveTab(\"nlm\");\n };\n\n const mhlmActive = activeTab === \"mhlm\" ? \"active\" : \"\";\n const mhlmAriaExpanded = activeTab === \"mhlm\" ? \"true\" : \"false\";\n const nlmActive = activeTab === \"nlm\" ? \"active\" : \"\";\n const nlmAriaExpanded = activeTab === \"nlm\" ? \"true\" : \"false\";\n\n return (\n <div className=\"modal show\" id=\"setup-dialog\" tabIndex=\"-1\" role=\"dialog\" aria-labelledby=\"setup-dialog-title\">\n <div className=\"modal-dialog modal-dialog-centered\" role=\"document\">\n <div className=\"modal-content\">\n <div className=\"modal-body\">\n <div className=\"tab-container\">\n <ul id=\"setup-tabs\" className=\"nav nav-tabs\" role=\"tablist\">\n <li role=\"presentation\" className={mhlmActive}>\n <a\n href=\"#mhlm\"\n id=\"mhlm-tab\"\n onClick={handleMhlmTabClick}\n role=\"tab\"\n aria-controls=\"mhlm\"\n aria-expanded={mhlmAriaExpanded}>Online License Manager</a>\n </li>\n <li role=\"presentation\" className={nlmActive}>\n <a\n href=\"#nlm\"\n id=\"nlm-tab\"\n onClick={handleNlmTabClick}\n role=\"tab\"\n aria-controls=\"nlm\"\n aria-expanded={nlmAriaExpanded}>Network License Manager</a>\n </li>\n </ul>\n {/* Because the MHLM tab contains an iframe which is slow to load, always render both tabs and select the active one with React */}\n <div id=\"setup-tabs-content\" className=\"tab-content\">\n <div role=\"tabpanel\" className={`tab-pane ${mhlmActive}`} id=\"mhlm\" aria-labelledby=\"mhlm-tab\">\n <MHLM />\n </div>\n <div role=\"tabpanel\" className={`tab-pane ${nlmActive}`} id=\"nlm\" aria-labelledby=\"nlm-tab\">\n <NLM />\n </div>\n <div>\n <p id=\"LicensingGathererNote\">\n For more details, see \n <a\n href=\"https://github.com/mathworks/matlab-proxy/blob/main/MATLAB-Licensing-Info.md\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n MATLAB Licensing information\n </a>\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport default LicensingGatherer;\n","// Copyright (c) 2020-2022 The MathWorks, Inc.\n\nimport React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\nimport ReactTooltip from 'react-tooltip';\nimport {\n selectSubmittingServerStatus,\n selectLicensingIsMhlm,\n selectLicensingProvided,\n selectMatlabRunning,\n selectMatlabStarting,\n selectMatlabStopping,\n selectMatlabVersion,\n selectError\n} from '../../selectors';\nimport {\n fetchStartMatlab,\n fetchStopMatlab,\n fetchTerminateIntegration,\n fetchUnsetLicensing\n} from '../../actionCreators';\nimport './Controls.css';\n\n// Suggested actions for certain errors\nconst ERROR_TYPE_MAP = {\n 'sign-out': ['NetworkLicensingError', 'EntitlementError'],\n 'restart': ['OnlineLicensingError']\n};\n\nfunction Controls({\n callback\n}) {\n const submitting = useSelector(selectSubmittingServerStatus);\n const licensed = useSelector(selectLicensingProvided);\n const mhlmLicense = useSelector(selectLicensingIsMhlm);\n const matlabRunning = useSelector(selectMatlabRunning);\n const matlabStarting = useSelector(selectMatlabStarting);\n const matlabStopping = useSelector(selectMatlabStopping);\n const matlabVersion = useSelector(selectMatlabVersion);\n const error = useSelector(selectError);\n\n // const canTerminateIntegration = !submitting;\n const canResetLicensing = licensed && !submitting;\n\n const feedbackBody = useMemo(\n () => `%0D%0A\nThank you for providing feedback.%0D%0A\n%0D%0A\nMATLAB version: ${matlabVersion}%0D%0A`,\n [matlabVersion]\n );\n\n const Confirmations = {\n START: {\n type: 'confirmation',\n message: `Are you sure you want to ${matlabRunning ? 're' : ''}start MATLAB?`,\n callback: fetchStartMatlab\n },\n STOP: {\n type: 'confirmation',\n message: 'Are you sure you want to stop MATLAB?',\n callback: fetchStopMatlab\n },\n TERMINATE: {\n type: 'confirmation',\n message: 'Are you sure you want to terminate MATLAB and the backing matlab-proxy server?',\n callback: fetchTerminateIntegration\n },\n SIGN_OUT: {\n type: 'confirmation',\n message: `Are you sure you want to ${mhlmLicense ? 'sign out of MATLAB' : 'unset the connection string'}?`,\n callback: fetchUnsetLicensing\n },\n HELP: {\n type: 'help'\n }\n };\n\n function getBtnClass(btn) {\n let cls = 'btn companion_btn ';\n if (error) {\n if ((ERROR_TYPE_MAP[btn] || []).includes(error.type)) {\n return cls + 'btn_color_blue';\n }\n } else if (btn === 'start') {\n // if there's no error, then highlight the \"Start\" button (if visible)\n return cls + 'btn_color_blue';\n }\n return cls + 'btn_color_mediumgray';\n };\n\n return (\n <div id=\"controls\" className=\"labels-on-top\">\n <button\n id=\"startMatlab\"\n data-testid='startMatlabBtn'\n className={getBtnClass(matlabRunning ? 'restart' : 'start')}\n onClick={() => callback(Confirmations.START)}\n disabled={!licensed || matlabStarting || matlabStopping}\n data-for=\"control-button-tooltip\"\n data-tip={`${matlabRunning ? 'Restart' : 'Start'} your MATLAB session`}\n >\n <span className={`icon-custom-${matlabRunning ? 're' : ''}start`}></span>\n <span className='btn-label'>{`${matlabRunning ? 'Restart' : 'Start'} MATLAB Session`}</span>\n </button>\n <button\n id=\"stopMatlab\"\n data-testid='stopMatlabBtn'\n className={getBtnClass('stop')}\n onClick={() => callback(Confirmations.STOP)}\n disabled={!matlabRunning}\n data-for=\"control-button-tooltip\"\n data-tip=\"Stop your MATLAB session\"\n >\n <span className='icon-custom-stop'></span>\n <span className='btn-label'>Stop MATLAB Session</span>\n </button>\n <button\n id=\"unsetLicensing\"\n data-testid='unsetLicensingBtn'\n className={getBtnClass('sign-out')}\n onClick={() => callback(Confirmations.SIGN_OUT)}\n disabled={!canResetLicensing}\n data-for=\"control-button-tooltip\"\n data-tip={mhlmLicense ? 'Sign out' : 'Unset the network license manager server address'}\n >\n <span className='icon-custom-sign-out'></span>\n <span className='btn-label'>{mhlmLicense ? 'Sign Out' : 'Unset License Server Address'}</span>\n </button>\n {/* <button\n id=\"terminateIntegration\"\n className=\"btn btn_color_mediumgray companion_btn\"\n style={{display: 'none'}}\n onClick={() => callback(Confirmations.TERMINATE)}\n disabled={!canTerminateIntegration}\n data-for=\"control-button-tooltip\"\n data-tip=\"Terminate your MATLAB and MATLAB in Jupyter sessions\"\n >\n <span className='icon-custom-terminate'></span>\n <span className='btn-label'>End Session</span>\n </button> */}\n <a\n id=\"feedback\"\n data-testid='feedbackLink'\n className=\"btn btn_color_mediumgray companion_btn\"\n href={`mailto:cloud@mathworks.com?subject=MATLAB-PROXY Feedback&body=${feedbackBody}`}\n data-for=\"control-button-tooltip\"\n data-tip=\"Send feedback (opens your default email application)\"\n >\n <span className='icon-custom-feedback'></span>\n <span className='btn-label'>Feedback</span>\n </a>\n <button\n id=\"Help\"\n data-testid='helpBtn'\n className=\"btn btn_color_mediumgray companion_btn\"\n onClick={() => callback(Confirmations.HELP)}\n data-for=\"control-button-tooltip\"\n data-tip=\"See a description of the buttons\"\n >\n <span className='icon-custom-help'></span>\n <span className='btn-label'>Help</span>\n </button>\n <ReactTooltip\n id=\"control-button-tooltip\"\n place=\"top\"\n type=\"info\"\n effect=\"solid\"\n />\n </div>\n );\n}\n\nControls.propTypes = {\n confirmHandler: PropTypes.func\n};\n\nexport default Controls;\n","// Copyright (c) 2020-2022 The MathWorks, Inc.\n\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\nimport Linkify from 'react-linkify';\nimport {\n selectLicensingInfo,\n selectError,\n selectOverlayHidable,\n selectInformationDetails\n} from '../../selectors';\nimport './Information.css';\n\nfunction Information({\n closeHandler,\n children\n}) {\n const licensingInfo = useSelector(selectLicensingInfo);\n const error = useSelector(selectError);\n const overlayHidable = useSelector(selectOverlayHidable);\n\n const [errorLogsExpanded, setErrorLogsExpanded] = useState(false);\n const errorLogsExpandedToggle = () => {\n setErrorLogsExpanded(!errorLogsExpanded);\n };\n\n let info;\n switch (licensingInfo?.type) {\n case \"MHLM\":\n info = {\n label: `Online License Manager (${licensingInfo.emailAddress})`\n };\n break;\n case \"NLM\":\n info = {\n label: `Network License Manager (${licensingInfo.connectionString})`\n };\n break;\n default:\n info = {\n label: 'None'\n };\n }\n\n const details = useSelector(selectInformationDetails);\n\n const errorMessageNode = error ? (\n <div className=\"error-container alert alert-danger\">\n <p><strong>Error</strong></p>\n <Linkify>\n <div className=\"error-text\">{error.message}</div>\n </Linkify>\n </div>\n ) : null;\n\n const errorLogsNode = (error && error.logs !== null && error.logs.length > 0) ? (\n <div className=\"expand_collapse error-logs-container\">\n <h4 className={`expand_trigger ${errorLogsExpanded ? 'expanded' : 'collapsed'}`}\n onClick={errorLogsExpandedToggle}>\n <span className=\"icon-arrow-open-down\"></span>\n <span className=\"icon-arrow-open-right\"></span>\n Error logs\n </h4>\n <div id=\"error-logs\"\n className={`expand_target error-container alert alert-danger ${errorLogsExpanded ? 'expanded' : 'collapsed'}`}\n aria-expanded={errorLogsExpanded}>\n <Linkify>\n <div className=\"error-msg\">{error.logs.join('\\n').trim()}</div>\n </Linkify>\n </div>\n </div>\n ) : null;\n\n const onCloseClick = event => {\n if (event.target === event.currentTarget) {\n event.preventDefault();\n closeHandler();\n }\n };\n\n return (\n <div className=\"modal show\"\n id=\"information\"\n onClick={overlayHidable ? onCloseClick : null}\n tabIndex=\"-1\"\n role=\"dialog\"\n aria-labelledby=\"information-dialog-title\">\n <div className=\"modal-dialog modal-dialog-centered\" role=\"document\">\n <div className={`modal-content alert alert-${details.alert}`}>\n <div className=\"modal-header\">\n {\n overlayHidable && (\n <button\n type=\"button\"\n className=\"close\"\n data-dismiss=\"modal\"\n aria-label=\"Close\"\n onClick={closeHandler}>\n <span aria-hidden=\"true\">×</span>\n </button>\n )\n }\n <span className={`alert_icon icon-alert-${details.icon}`} />\n <h4 className=\"modal-title alert_heading\" id=\"information-dialog-title\">Status Information</h4>\n </div >\n <div className=\"modal-body\">\n <table className=\"details\">\n <tbody>\n <tr>\n <td>MATLAB Status:</td>\n <td>\n <span id=\"spinner\"\n className={details.spinner ? 'show' : 'hidden'}\n ></span>\n {details.label}\n </td>\n </tr>\n <tr>\n <td>Licensing:</td>\n <td>{info.label}</td>\n </tr>\n </tbody>\n </table>\n {errorMessageNode}\n {errorLogsNode}\n </div>\n <div className=\"modal-footer\">\n {children}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nInformation.propTypes = {\n closeHandler: PropTypes.func.isRequired\n};\n\nexport default Information;\n","// Copyright (c) 2020-2022 The MathWorks, Inc.\n\nimport React from 'react';\nimport { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport './Help.css';\n\nimport {\n selectOverlayHidable,\n selectHasFetchedEnvConfig,\n} from '../../selectors';\n\nfunction Help({\n closeHandler,\n dismissAllHandler\n}) {\n const overlayHidable = useSelector(selectOverlayHidable);\n\n const onCloseClick = event => {\n if (event.target === event.currentTarget) {\n event.preventDefault();\n dismissAllHandler();\n }\n };\n\n const config = useSelector(selectHasFetchedEnvConfig);\n\n const url = config.doc_url;\n\n const targetEnvMsg = config.extension_name === \"\" ? `MATLAB Web Desktop` : `MATLAB Integration for ${config.extension_name_short_description}`;\n\n\n\n return (\n <div className=\"modal show\"\n id=\"help\"\n onClick={overlayHidable ? onCloseClick : null}\n tabIndex=\"-1\"\n role=\"dialog\"\n aria-labelledby=\"help-dialog-title\">\n <div className=\"modal-dialog modal-dialog-centered\"\n role=\"document\">\n <div className=\"modal-content\">\n <div className=\"modal-header\">\n <h4 className=\"modal-title\" id=\"confirmation-dialog-title\">Help</h4>\n </div>\n <div className=\"modal-body help\">\n <p>The status panel shows you options to manage the <a href={url} target=\"_blank\" rel=\"noopener noreferrer\">{targetEnvMsg}</a>.</p>\n <p>Use the buttons in the status panel to:</p>\n <div>\n <p className=\"icon-custom-start\">Start your MATLAB session. Available if MATLAB is stopped.</p>\n <p className=\"icon-custom-restart\">Restart your MATLAB session. Available if MATLAB is running or starting.</p>\n <p className=\"icon-custom-stop\">Stop your MATLAB session. Use this option if you want to free up RAM and CPU resources. Available if MATLAB is running or starting.</p>\n <p className=\"icon-custom-sign-out\">\n Sign out of MATLAB. Use this to stop MATLAB and to sign in with an alternative account. Available if using online licensing.<br />\n Unset network license manager server address. Use this to stop MATLAB and enter new licensing information. Available if using network license manager.\n </p>\n <p className=\"icon-custom-feedback\">{`Send feedback about the ${targetEnvMsg}. This action opens your default email application.`}</p>\n </div>\n </div>\n <div className=\"modal-footer\">\n <button onClick={closeHandler} data-testid='backBtn' className=\"btn btn_color_blue\">Back</button>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nHelp.propTypes = {\n closeHandler: PropTypes.func.isRequired\n};\n\nexport default Help;\n","// Copyright (c) 2020-2022 The MathWorks, Inc.\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Linkify from 'react-linkify';\nimport './Error.css';\n\nfunction Error({ message, logs, children }) {\n\n const logReport = logs\n ? (\n <p className=\"error-msg\">\n {logs}\n </p>\n )\n : null;\n\n return (\n <div className=\"modal show\"\n id=\"error\"\n tabIndex=\"-1\"\n role=\"dialog\"\n aria-labelledby=\"help-dialog-title\">\n <div className=\"modal-dialog modal-dialog-centered\" role=\"document\">\n <div className=\"modal-content alert alert-danger\">\n <div className=\"modal-header\">\n <span className={`alert_icon icon-alert-error`}></span>\n <h4 className=\"modal-title alert_heading\">Error</h4>\n </div>\n <div className=\"modal-body\">\n <p>{message}</p>\n <Linkify>{logReport}</Linkify>\n {children}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nError.propTypes = {\n message: PropTypes.string.isRequired,\n logs: PropTypes.arrayOf(PropTypes.string),\n children: PropTypes.node\n};\n\nexport default Error;\n","// Copyright (c) 2020-2022 The MathWorks, Inc.\n\nimport React, { useState, useCallback, useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useInterval } from 'react-use';\nimport './App.css';\nimport Confirmation from '../Confirmation';\nimport OverlayTrigger from '../OverlayTrigger';\nimport Overlay from '../Overlay';\nimport MatlabJsd from '../MatlabJsd';\nimport LicensingGatherer from '../LicensingGatherer';\nimport Controls from '../Controls';\nimport Information from '../Information';\nimport Help from '../Help';\nimport Error from '../Error';\nimport {\n selectOverlayVisible,\n selectFetchStatusPeriod,\n selectHasFetchedServerStatus,\n selectLicensingProvided,\n selectMatlabUp,\n selectError,\n selectLoadUrl,\n selectIsConnectionError,\n selectHasFetchedEnvConfig,\n} from '../../selectors';\nimport {\n setOverlayVisibility,\n fetchServerStatus,\n fetchEnvConfig,\n} from '../../actionCreators';\n\nfunction App() {\n const dispatch = useDispatch();\n\n const overlayVisible = useSelector(selectOverlayVisible);\n const fetchStatusPeriod = useSelector(selectFetchStatusPeriod);\n const hasFetchedServerStatus = useSelector(selectHasFetchedServerStatus);\n const hasFetchedEnvConfig = useSelector(selectHasFetchedEnvConfig);\n const licensingProvided = useSelector(selectLicensingProvided);\n const matlabUp = useSelector(selectMatlabUp);\n const error = useSelector(selectError);\n const loadUrl = useSelector(selectLoadUrl);\n const isConnectionError = useSelector(selectIsConnectionError);\n\n const toggleOverlayVisible = useCallback(\n () => dispatch(setOverlayVisibility(!overlayVisible)),\n [overlayVisible, dispatch]\n );\n\n const [dialogModel, setDialogModel] = useState(null);\n\n let dialog;\n if (dialogModel) {\n const closeHandler = () => setDialogModel(null);\n const dismissAllHandler = () => {\n closeHandler();\n toggleOverlayVisible(false);\n };\n switch (dialogModel.type) {\n case 'confirmation':\n const confirm = () => {\n dispatch(dialogModel.callback());\n setDialogModel(null);\n };\n dialog = (\n <Confirmation\n confirm={confirm}\n cancel={closeHandler}>\n {dialogModel.message || ''}\n </Confirmation>\n );\n break;\n case 'help':\n dialog = (\n <Help\n closeHandler={closeHandler}\n dismissAllHandler={dismissAllHandler}\n />);\n break;\n default:\n throw new Error(`Unknown dialog type: ${dialogModel.type}.`);\n }\n }\n if (isConnectionError) {\n dialog = (\n <Error\n message=\"Either this integration terminated or the session ended\"\n >\n <p>Attempt to <a href=\"../\">return to a parent app</a></p>\n </Error>\n );\n } else if (error && error.type === \"MatlabInstallError\") {\n dialog = <Error message={error.message} />;\n }\n\n useEffect(() => {\n // Initial fetch environment configuration\n if (!hasFetchedEnvConfig) {\n dispatch(fetchEnvConfig());\n }\n\n }, [dispatch, hasFetchedEnvConfig]);\n\n useEffect(() => {\n // Initial fetch server status\n if (!hasFetchedServerStatus) {\n dispatch(fetchServerStatus());\n }\n\n }, [dispatch, hasFetchedServerStatus]);\n\n // Periodic fetch server status\n useInterval(() => {\n dispatch(fetchServerStatus());\n }, fetchStatusPeriod);\n\n // Load URL\n useEffect(() => {\n if (loadUrl !== null) {\n window.location.href = loadUrl;\n }\n }, [loadUrl]);\n\n // Display one of:\n // * Confirmation\n // * Help\n // * Error\n // * License gatherer\n // * Status\n let overlayContent;\n if (dialog) {\n // TODO Inline confirmation component build\n overlayContent = dialog;\n } else if (hasFetchedServerStatus && (!licensingProvided)) {\n overlayContent = <LicensingGatherer />;\n } else if (licensingProvided && !dialog) {\n overlayContent = (\n <Information closeHandler={toggleOverlayVisible}>\n <Controls callback={args => setDialogModel(args)} />\n </Information>\n );\n }\n\n const overlay = overlayVisible ? (\n <Overlay>\n {overlayContent}\n </Overlay>\n ) : null;\n\n // FIXME Until https://github.com/http-party/node-http-proxy/issues/1342\n // is addressed, use a direct URL in development mode. Once that is\n // fixed, the request will be served by the fake MATLAB Embedded Connector\n // process in development mode\n const matlabUrl = process.env.NODE_ENV === 'development'\n ? 'http://localhost:31515/index-jsd-cr.html'\n : './index-jsd-cr.html';\n\n const matlabJsd = matlabUp ? (\n <MatlabJsd url={matlabUrl} />\n ) : null;\n\n const overlayTrigger = overlayVisible ? null : <OverlayTrigger />;\n\n return (\n <div data-testid=\"app\" className=\"main\">\n {overlayTrigger}\n {matlabJsd}\n {overlay}\n </div>\n );\n}\n\nexport default App;\n","// Copyright (c) 2020-2022 The MathWorks, Inc.\n\nimport { combineReducers } from 'redux';\n\n// ACTIONS\nimport {\n SET_TRIGGER_POSITION,\n SET_TUTORIAL_HIDDEN,\n SET_OVERLAY_VISIBILITY,\n REQUEST_SERVER_STATUS,\n RECEIVE_SERVER_STATUS,\n REQUEST_SET_LICENSING,\n REQUEST_TERMINATE_INTEGRATION,\n REQUEST_STOP_MATLAB,\n REQUEST_START_MATLAB,\n REQUEST_ENV_CONFIG,\n RECEIVE_SET_LICENSING,\n RECEIVE_TERMINATE_INTEGRATION,\n RECEIVE_STOP_MATLAB,\n RECEIVE_START_MATLAB,\n RECEIVE_ERROR,\n RECEIVE_ENV_CONFIG,\n} from '../actions';\n\nexport function triggerPosition(state = { x: window.innerWidth / 2 + 27, y: 0 }, action) {\n switch (action.type) {\n case SET_TRIGGER_POSITION:\n return { x: action.x, y: action.y };\n default:\n return state;\n }\n}\n\nexport function tutorialHidden(state = false, action) {\n switch (action.type) {\n case SET_TUTORIAL_HIDDEN:\n return action.hidden;\n default:\n return state;\n }\n}\n\nexport function overlayVisibility(state = false, action) {\n switch (action.type) {\n case SET_OVERLAY_VISIBILITY:\n return action.visibility;\n case RECEIVE_SERVER_STATUS:\n if (\n action.previousMatlabPending === true\n && action.status.matlab.status === \"up\"\n ) return false;\n // fall through\n default:\n return state;\n }\n}\n\nexport function licensingInfo(state = {}, action) {\n switch (action.type) {\n case RECEIVE_SERVER_STATUS:\n case RECEIVE_SET_LICENSING:\n case RECEIVE_TERMINATE_INTEGRATION:\n case RECEIVE_STOP_MATLAB:\n case RECEIVE_START_MATLAB:\n return {\n ...action.status.licensing\n };\n default:\n return state;\n }\n}\n\nexport function matlabStatus(state = 'down', action) {\n switch (action.type) {\n case RECEIVE_SERVER_STATUS:\n case RECEIVE_SET_LICENSING:\n case RECEIVE_TERMINATE_INTEGRATION:\n case RECEIVE_STOP_MATLAB:\n case RECEIVE_START_MATLAB:\n return action.status.matlab.status;\n case REQUEST_STOP_MATLAB:\n case REQUEST_START_MATLAB:\n return action.status;\n default:\n return state;\n }\n}\n\nexport function matlabVersion(state = null, action) {\n switch (action.type) {\n case RECEIVE_SERVER_STATUS:\n case RECEIVE_SET_LICENSING:\n case RECEIVE_TERMINATE_INTEGRATION:\n case RECEIVE_STOP_MATLAB:\n case RECEIVE_START_MATLAB:\n return action.status.matlab.version;\n default:\n return state;\n }\n}\n\nexport function wsEnv(state = null, action) {\n switch (action.type) {\n case RECEIVE_SERVER_STATUS:\n case RECEIVE_SET_LICENSING:\n case RECEIVE_TERMINATE_INTEGRATION:\n case RECEIVE_STOP_MATLAB:\n case RECEIVE_START_MATLAB:\n return action.status.wsEnv;\n default:\n return state;\n }\n}\n\nexport function isFetching(state = false, action) {\n switch (action.type) {\n case REQUEST_SERVER_STATUS:\n case REQUEST_SET_LICENSING:\n case REQUEST_TERMINATE_INTEGRATION:\n case REQUEST_STOP_MATLAB:\n case REQUEST_START_MATLAB:\n case REQUEST_ENV_CONFIG:\n return true;\n case RECEIVE_SERVER_STATUS:\n case RECEIVE_SET_LICENSING:\n case RECEIVE_TERMINATE_INTEGRATION:\n case RECEIVE_STOP_MATLAB:\n case RECEIVE_START_MATLAB:\n case RECEIVE_ERROR:\n case RECEIVE_ENV_CONFIG:\n return false;\n default:\n return state;\n }\n}\n\nexport function hasFetched(state = false, action) {\n switch (action.type) {\n case RECEIVE_SERVER_STATUS:\n case RECEIVE_SET_LICENSING:\n case RECEIVE_TERMINATE_INTEGRATION:\n case RECEIVE_STOP_MATLAB:\n case RECEIVE_START_MATLAB:\n return true;\n default:\n return state;\n }\n}\n\nexport function isSubmitting(state = false, action) {\n switch (action.type) {\n case REQUEST_SET_LICENSING:\n case REQUEST_TERMINATE_INTEGRATION:\n case REQUEST_STOP_MATLAB:\n case REQUEST_START_MATLAB:\n return true;\n case RECEIVE_SET_LICENSING:\n case RECEIVE_TERMINATE_INTEGRATION:\n case RECEIVE_STOP_MATLAB:\n case RECEIVE_START_MATLAB:\n case RECEIVE_ERROR:\n return false;\n default:\n return state;\n }\n}\n\nexport function fetchFailCount(state = 0, action) {\n switch (action.type) {\n case RECEIVE_SERVER_STATUS:\n case RECEIVE_SET_LICENSING:\n case RECEIVE_TERMINATE_INTEGRATION:\n case RECEIVE_STOP_MATLAB:\n case RECEIVE_START_MATLAB:\n return 0;\n case RECEIVE_ERROR:\n return state + 1;\n default:\n return state;\n\n }\n}\n\nexport function loadUrl(state = null, action) {\n switch (action.type) {\n case RECEIVE_TERMINATE_INTEGRATION:\n return action.loadUrl;\n default:\n return state;\n }\n}\n\nexport function error(state = null, action) {\n switch (action.type) {\n case RECEIVE_ERROR:\n return {\n message: action.error,\n statusCode: action?.statusCode,\n logs: null\n };\n case RECEIVE_SERVER_STATUS:\n case RECEIVE_SET_LICENSING:\n case RECEIVE_TERMINATE_INTEGRATION:\n case RECEIVE_STOP_MATLAB:\n case RECEIVE_START_MATLAB:\n return action.status.error ? {\n message: action.status.error.message,\n logs: action.status.error.logs,\n type: action.status.error.type\n } : null;\n default:\n return state;\n }\n}\n\nexport function envConfig(state = null, action) {\n switch (action.type) {\n case RECEIVE_ENV_CONFIG:\n return action.config;\n default:\n return state;\n }\n}\n\nexport const serverStatus = combineReducers({\n licensingInfo,\n matlabStatus,\n matlabVersion,\n wsEnv,\n isFetching,\n hasFetched,\n isSubmitting,\n fetchFailCount\n});\n\nexport default combineReducers({\n triggerPosition,\n tutorialHidden,\n overlayVisibility,\n serverStatus,\n loadUrl,\n error,\n envConfig,\n});\n","// Copyright (c) 2020-2022 The MathWorks, Inc.\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport { createStore, applyMiddleware, compose } from 'redux';\nimport './index.css';\nimport App from './components/App';\n// import * as serviceWorker from './serviceWorker';\nimport rootReducer from './reducers';\nimport thunkMiddleware from 'redux-thunk';\n\nconst composeEnhancers = (\n typeof window !== 'undefined'\n && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\n) || compose;\n\nconst store = createStore(rootReducer, composeEnhancers(\n applyMiddleware(thunkMiddleware)\n));\n\nReactDOM.render(\n <Provider store={store}>\n <App />\n </Provider>,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\n// serviceWorker.unregister();\n"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
!function(e){function r(r){for(var n,l,a=r[0],p=r[1],f=r[2],c=0,s=[];c<a.length;c++)l=a[c],Object.prototype.hasOwnProperty.call(o,l)&&o[l]&&s.push(o[l][0]),o[l]=0;for(n in p)Object.prototype.hasOwnProperty.call(p,n)&&(e[n]=p[n]);for(i&&i(r);s.length;)s.shift()();return u.push.apply(u,f||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,a=1;a<t.length;a++){var p=t[a];0!==o[p]&&(n=!1)}n&&(u.splice(r--,1),e=l(l.s=t[0]))}return e}var n={},o={1:0},u=[];function l(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,l),t.l=!0,t.exports}l.m=e,l.c=n,l.d=function(e,r,t){l.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},l.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,r){if(1&r&&(e=l(e)),8&r)return e;if(4&r&&"object"===typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(l.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)l.d(t,n,function(r){return e[r]}.bind(null,n));return t},l.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(r,"a",r),r},l.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},l.p="./";var a=this["webpackJsonpmatlab-proxy"]=this["webpackJsonpmatlab-proxy"]||[],p=a.push.bind(a);a.push=r,a=a.slice();for(var f=0;f<a.length;f++)r(a[f]);var i=p;t()}([]);
|
|
2
|
-
//# sourceMappingURL=runtime-main.f70e4d5f.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../webpack/bootstrap"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","this","oldJsonpFunction","slice"],"mappings":"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","file":"static/js/runtime-main.f70e4d5f.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"./\";\n\n \tvar jsonpArray = this[\"webpackJsonpmatlab-proxy\"] = this[\"webpackJsonpmatlab-proxy\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// run deferred modules from other chunks\n \tcheckDeferredModules();\n"],"sourceRoot":""}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
<svg id="main" data-name="main" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32">
|
|
2
|
-
<polygon points="16,16 1,31 31,31" style="fill: #fff; stroke: rgba(0,0,0,0.2); stroke-width: 3px" />
|
|
3
|
-
<line x1="2" y1="31" x2="30" y2="31" style="stroke: #fff; stroke-width: 3px" />
|
|
4
|
-
</svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32"><defs><style>.cls-1{fill:none;stroke:#706f6f;}.cls-1,.cls-3,.cls-6{stroke-miterlimit:10;}.cls-2{fill:#9d9d9c;}.cls-3{fill:#f1abc2;stroke:url(#rubber_outline);}.cls-4{fill:#c1b49a;}.cls-5{fill:url(#linear-gradient);}.cls-6{fill:url(#Light_Blue_Gradient_);stroke:url(#Blue_Gradient_);}</style><linearGradient id="rubber_outline" x1="61.99" y1="-2.03" x2="66.52" y2="-0.76" gradientTransform="translate(-37.48 17.4)" gradientUnits="userSpaceOnUse"><stop offset="0.04" stop-color="#e56691"/><stop offset="0.99" stop-color="#6d0538"/></linearGradient><linearGradient id="linear-gradient" x1="-330.35" y1="-327.4" x2="-332.91" y2="-329.97" gradientTransform="matrix(0.7, -0.71, -0.71, -0.7, 13.67, -440.73)" gradientUnits="userSpaceOnUse"><stop offset="0.06" stop-color="#58595b"/><stop offset="0.98"/></linearGradient><linearGradient id="Light_Blue_Gradient_" x1="55.23" y1="-4.61" x2="55.23" y2="-1.36" gradientTransform="translate(-28.26 23.65) scale(0.91 0.96)" gradientUnits="userSpaceOnUse"><stop offset="0.12" stop-color="#d9f0fc"/><stop offset="0.99" stop-color="#5e99c5"/></linearGradient><linearGradient id="Blue_Gradient_" x1="54.08" y1="0.93" x2="56.38" y2="-6.9" gradientTransform="translate(-28.26 23.65) scale(0.91 0.96)" gradientUnits="userSpaceOnUse"><stop offset="0.09" stop-color="#143253"/><stop offset="0.99" stop-color="#6199bc"/></linearGradient></defs><path class="cls-1" d="M1.44.5H21.56a.89.89,0,0,1,.94.84V21.56a.89.89,0,0,1-.84.94H1.44a.89.89,0,0,1-.94-.84V1.44A.89.89,0,0,1,1.34.5Z"/><rect class="cls-2" x="1" y="1" width="21" height="5"/><rect class="cls-3" x="25.4" y="14.44" width="2.73" height="3.12" transform="translate(-3.39 23.93) rotate(-45.6)"/><polygon class="cls-4" points="18.54 26.59 15.36 27.75 16.43 24.52 18.54 26.59"/><polygon class="cls-5" points="15.89 27.25 16.71 24.8 15.97 24.08 14.57 28.47 18.92 26.96 18.18 26.24 15.89 27.25"/><rect class="cls-6" x="15.95" y="19.22" width="12.27" height="3.12" transform="translate(-8.21 22.02) rotate(-45.6)"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 5 10"><defs><style>.cls-1{fill:#6c99d0;}</style></defs><circle class="cls-1" cx="1" cy="1" r="1"/><circle class="cls-1" cx="4" cy="1" r="1"/><circle class="cls-1" cx="1" cy="5" r="1"/><circle class="cls-1" cx="1" cy="9" r="1"/><circle class="cls-1" cx="4" cy="5" r="1"/><circle class="cls-1" cx="4" cy="9" r="1"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32"><defs><style>.cls-1{fill:none;stroke:#706f6f;}.cls-1,.cls-3{stroke-miterlimit:10;}.cls-2{fill:#9d9d9c;}.cls-3{fill:url(#Light_Blue_Gradient_);stroke:url(#Blue_Gradient_);}</style><linearGradient id="Light_Blue_Gradient_" x1="21.37" y1="13.65" x2="21.37" y2="28.01" gradientUnits="userSpaceOnUse"><stop offset="0.12" stop-color="#d9f0fc"/><stop offset="0.99" stop-color="#5e99c5"/></linearGradient><linearGradient id="Blue_Gradient_" x1="21.34" y1="28.51" x2="21.34" y2="13.15" gradientUnits="userSpaceOnUse"><stop offset="0.09" stop-color="#143253"/><stop offset="0.99" stop-color="#6199bc"/></linearGradient></defs><path class="cls-1" d="M1.56.43H21.68a.89.89,0,0,1,.94.84V21.49a.89.89,0,0,1-.84.94H1.56a.89.89,0,0,1-.94-.84V1.37A.89.89,0,0,1,1.46.43Z"/><rect class="cls-2" x="1.12" y="0.93" width="21" height="5"/><path class="cls-3" d="M20.5,24.53c0-.23,0-.4,0-.52a4.89,4.89,0,0,1,.28-1.76,4.19,4.19,0,0,1,.69-1.13,12.72,12.72,0,0,1,1.25-1.2,6,6,0,0,0,1.17-1.27,2.06,2.06,0,0,0,.27-1,2.42,2.42,0,0,0-.79-1.78,2.69,2.69,0,0,0-1.94-.76,2.62,2.62,0,0,0-1.85.69,3.63,3.63,0,0,0-1,2.17l-1.78-.22a4.57,4.57,0,0,1,1.43-3,4.57,4.57,0,0,1,3.14-1,4.7,4.7,0,0,1,3.3,1.13,3.54,3.54,0,0,1,1.24,2.72,3.46,3.46,0,0,1-.44,1.71A8,8,0,0,1,23.8,21.1a8.5,8.5,0,0,0-1.11,1.11,2.47,2.47,0,0,0-.38.82,6.26,6.26,0,0,0-.15,1.5ZM20.39,28V26h2v2Z"/></svg>
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
-
<!-- Generator: Adobe Illustrator 23.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
3
|
-
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
|
4
|
-
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
|
5
|
-
<style type="text/css">
|
|
6
|
-
.st0{fill:#6F6F6F;}
|
|
7
|
-
</style>
|
|
8
|
-
<path class="st0" d="M17.9,24c-1.4,0-5.8-0.5-11.7-6.1C0.5,12.5,0,6.8,0,6.1c0-0.8,0.1-3.8,3.9-5.8C4.4,0,5.6-0.2,6,0.3
|
|
9
|
-
c0.2,0.2,3.1,5.1,3.2,5.1c0.1,0.2,0.2,0.5,0.2,0.7c0,0.4-0.2,0.7-0.6,1.2c-0.3,0.3-0.7,0.7-1.1,1C7.3,8.5,7,8.7,6.7,9
|
|
10
|
-
C6.4,9.3,6.4,9.4,6.4,9.4c0,0.1,0.2,1.8,3.4,4.7c3.3,2.9,4.7,3.5,4.7,3.5c0.1,0,0.2,0,0.2,0c0,0,0.1,0,0.4-0.3
|
|
11
|
-
c0.1-0.1,0.4-0.5,0.7-0.9c0.5-0.6,0.8-1,1-1.2c0.7-0.7,1.3-0.7,1.8-0.4c0,0,5,2.9,5.2,3.1c0.1,0.1,0.5,0.5-0.2,2.3l0,0
|
|
12
|
-
C22.2,23.6,19.2,24,17.9,24C17.9,24,17.9,24,17.9,24z M5.2,1C5,1,4.6,1.1,4.4,1.2C1.2,2.9,1,5.2,1,6.1c0,0.6,0.5,6,5.8,11.1
|
|
13
|
-
c6,5.6,10.3,5.9,11.1,5.8c1.3,0,3.6-0.4,4.7-3c0.2-0.5,0.4-1.1,0.4-1.3c-0.7-0.4-4.6-2.7-4.8-2.8c-0.1,0-0.2-0.1-0.2-0.1
|
|
14
|
-
c0,0-0.1,0-0.5,0.3c-0.1,0.1-0.5,0.6-0.9,1c-0.3,0.4-0.6,0.8-0.8,1c-0.6,0.6-1,0.7-1.6,0.5c-0.3-0.1-2-1.1-5-3.7
|
|
15
|
-
c-3.4-3-3.8-4.9-3.8-5.5c0-0.4,0.2-0.7,0.6-1.1C6.3,8,6.7,7.7,7.1,7.4C7.4,7.1,7.7,6.9,8,6.6c0.3-0.3,0.3-0.5,0.3-0.5
|
|
16
|
-
c0-0.1,0-0.2-0.1-0.2C8.2,5.6,5.8,1.7,5.3,1C5.3,1,5.3,1,5.2,1z"/>
|
|
17
|
-
</svg>
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
-
<!-- Generator: Adobe Illustrator 23.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
3
|
-
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
|
4
|
-
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
|
5
|
-
<style type="text/css">
|
|
6
|
-
.st0{fill:#B3B3B4;}
|
|
7
|
-
</style>
|
|
8
|
-
<path class="st0" d="M17.9,24c-1.4,0-5.8-0.5-11.7-6.1C0.5,12.5,0,6.8,0,6.1c0-0.8,0.1-3.8,3.9-5.8C4.4,0,5.6-0.2,6,0.3
|
|
9
|
-
c0.2,0.2,3.1,5.1,3.2,5.1c0.1,0.2,0.2,0.5,0.2,0.7c0,0.4-0.2,0.7-0.6,1.2c-0.3,0.3-0.7,0.7-1.1,1C7.3,8.5,7,8.7,6.7,9
|
|
10
|
-
C6.4,9.3,6.4,9.4,6.4,9.4c0,0.1,0.2,1.8,3.4,4.7c3.3,2.9,4.7,3.5,4.7,3.5c0.1,0,0.2,0,0.2,0c0,0,0.1,0,0.4-0.3
|
|
11
|
-
c0.1-0.1,0.4-0.5,0.7-0.9c0.5-0.6,0.8-1,1-1.2c0.7-0.7,1.3-0.7,1.8-0.4c0,0,5,2.9,5.2,3.1c0.1,0.1,0.5,0.5-0.2,2.3l0,0
|
|
12
|
-
C22.2,23.6,19.2,24,17.9,24C17.9,24,17.9,24,17.9,24z M5.2,1C5,1,4.6,1.1,4.4,1.2C1.2,2.9,1,5.2,1,6.1c0,0.6,0.5,6,5.8,11.1
|
|
13
|
-
c6,5.6,10.3,5.9,11.1,5.8c1.3,0,3.6-0.4,4.7-3c0.2-0.5,0.4-1.1,0.4-1.3c-0.7-0.4-4.6-2.7-4.8-2.8c-0.1,0-0.2-0.1-0.2-0.1
|
|
14
|
-
c0,0-0.1,0-0.5,0.3c-0.1,0.1-0.5,0.6-0.9,1c-0.3,0.4-0.6,0.8-0.8,1c-0.6,0.6-1,0.7-1.6,0.5c-0.3-0.1-2-1.1-5-3.7
|
|
15
|
-
c-3.4-3-3.8-4.9-3.8-5.5c0-0.4,0.2-0.7,0.6-1.1C6.3,8,6.7,7.7,7.1,7.4C7.4,7.1,7.7,6.9,8,6.6c0.3-0.3,0.3-0.5,0.3-0.5
|
|
16
|
-
c0-0.1,0-0.2-0.1-0.2C8.2,5.6,5.8,1.7,5.3,1C5.3,1,5.3,1,5.2,1z"/>
|
|
17
|
-
</svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32"><defs><style>.cls-1{fill:none;stroke:#706f6f;}.cls-1,.cls-3{stroke-miterlimit:10;}.cls-2{fill:#9d9d9c;}.cls-3{fill:url(#Light_Blue_Gradient_);stroke:url(#Blue_Gradient_);}</style><linearGradient id="Light_Blue_Gradient_" x1="-1245.17" y1="-78.08" x2="-1245.17" y2="-92.11" gradientTransform="translate(-1222 -64) rotate(180)" gradientUnits="userSpaceOnUse"><stop offset="0.12" stop-color="#d9f0fc"/><stop offset="0.99" stop-color="#5e99c5"/></linearGradient><linearGradient id="Blue_Gradient_" x1="23.07" y1="28.61" x2="23.07" y2="13.18" gradientUnits="userSpaceOnUse"><stop offset="0.09" stop-color="#143253"/><stop offset="0.99" stop-color="#6199bc"/></linearGradient></defs><path class="cls-1" d="M1.44.5H21.56a.89.89,0,0,1,.94.84V21.56a.89.89,0,0,1-.84.94H1.44a.89.89,0,0,1-.94-.84V1.44A.89.89,0,0,1,1.34.5Z"/><rect class="cls-2" x="1" y="1" width="21" height="5"/><path class="cls-3" d="M20.61,23.16l-2.27,2.4.47.5a6.4,6.4,0,0,0,9.36,0l0,0a7.28,7.28,0,0,0,0-9.93,6.39,6.39,0,0,0-8.86-.51L18,14.18l-1.81,7.15L23,19.42l-1.3-1.37a3.32,3.32,0,0,1,4.3.49,3.73,3.73,0,0,1,0,5.11,3.39,3.39,0,0,1-2.45,1.06,3.3,3.3,0,0,1-2.43-1.06Z"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32"><defs><style>.cls-1{fill:none;stroke:#706f6f;}.cls-1,.cls-3{stroke-miterlimit:10;}.cls-2{fill:#9d9d9c;}.cls-3{fill:url(#Light_Blue_Gradient_);stroke:url(#Blue_Gradient_);}</style><linearGradient id="Light_Blue_Gradient_" x1="21.2" y1="14.36" x2="21.2" y2="27.47" gradientUnits="userSpaceOnUse"><stop offset="0.12" stop-color="#d9f0fc"/><stop offset="0.99" stop-color="#5e99c5"/></linearGradient><linearGradient id="Blue_Gradient_" x1="21.32" y1="28.61" x2="21.32" y2="13.23" gradientUnits="userSpaceOnUse"><stop offset="0.09" stop-color="#143253"/><stop offset="0.99" stop-color="#6199bc"/></linearGradient></defs><path class="cls-1" d="M1.44.5H21.56a.89.89,0,0,1,.94.84V21.56a.89.89,0,0,1-.84.94H1.44a.89.89,0,0,1-.94-.84V1.44A.89.89,0,0,1,1.34.5Z"/><rect class="cls-2" x="1" y="1" width="21" height="5"/><polyline class="cls-3" points="13.73 18.69 22.02 18.74 22.02 14.36 29.16 20.92 22.02 27.47 22.02 23.12 13.27 23.12 13.25 18.2"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32"><defs><style>.cls-1{fill:none;stroke:#706f6f;}.cls-1,.cls-3{stroke-miterlimit:10;}.cls-2{fill:#9d9d9c;}.cls-3{fill:url(#Light_Blue_Gradient_);stroke:url(#Blue_Gradient_);}</style><linearGradient id="Light_Blue_Gradient_" x1="24.5" y1="13.95" x2="24.5" y2="27.77" gradientUnits="userSpaceOnUse"><stop offset="0.12" stop-color="#d9f0fc"/><stop offset="0.99" stop-color="#5e99c5"/></linearGradient><linearGradient id="Blue_Gradient_" x1="24.78" y1="28.63" x2="24.78" y2="13.14" gradientUnits="userSpaceOnUse"><stop offset="0.09" stop-color="#143253"/><stop offset="0.99" stop-color="#6199bc"/></linearGradient></defs><path class="cls-1" d="M1.44.5H21.56a.89.89,0,0,1,.94.84V21.56a.89.89,0,0,1-.84.94H1.44a.89.89,0,0,1-.94-.84V1.44A.89.89,0,0,1,1.34.5Z"/><rect class="cls-2" x="1" y="1" width="21" height="5"/><polygon class="cls-3" points="18 13.95 18 27.77 31 20.36 18 13.95"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32"><defs><style>.cls-1{fill:none;stroke:#706f6f;}.cls-1,.cls-3{stroke-miterlimit:10;}.cls-2{fill:#9d9d9c;}.cls-3{fill:url(#Light_Blue_Gradient_);stroke:url(#Blue_Gradient_);}.cls-4{fill:url(#Blue_Gradient_2);}</style><linearGradient id="Light_Blue_Gradient_" x1="23.29" y1="13.73" x2="23.29" y2="27.97" gradientUnits="userSpaceOnUse"><stop offset="0.12" stop-color="#d9f0fc"/><stop offset="0.99" stop-color="#5e99c5"/></linearGradient><linearGradient id="Blue_Gradient_" x1="23.29" y1="28.47" x2="23.29" y2="13.23" gradientUnits="userSpaceOnUse"><stop offset="0.09" stop-color="#143253"/><stop offset="0.99" stop-color="#6199bc"/></linearGradient><linearGradient id="Blue_Gradient_2" x1="23.29" y1="23.22" x2="23.29" y2="18.48" xlink:href="#Blue_Gradient_"/></defs><path class="cls-1" d="M1.44.5H21.56a.89.89,0,0,1,.94.84V21.56a.89.89,0,0,1-.84.94H1.44a.89.89,0,0,1-.94-.84V1.44A.89.89,0,0,1,1.34.5Z"/><rect class="cls-2" x="1" y="1" width="21" height="5"/><circle class="cls-3" cx="23.29" cy="20.85" r="7.12"/><rect class="cls-4" x="20.92" y="18.48" width="4.75" height="4.75"/></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32"><defs><style>.cls-1{fill:none;stroke:#706f6f;}.cls-1,.cls-3,.cls-4{stroke-miterlimit:10;}.cls-2{fill:#9d9d9c;}.cls-3{fill:url(#Light_Blue_Gradient_);stroke:url(#Blue_Gradient_);}.cls-4{fill:url(#Light_Blue_Gradient_2);stroke:url(#Blue_Gradient_2);}</style><linearGradient id="Light_Blue_Gradient_" x1="-1761.33" y1="-365.39" x2="-1774.31" y2="-366.68" gradientTransform="matrix(0, -1.05, 1.04, 0, 400.64, -1829.66)" gradientUnits="userSpaceOnUse"><stop offset="0.12" stop-color="#d9f0fc"/><stop offset="0.99" stop-color="#5e99c5"/></linearGradient><linearGradient id="Blue_Gradient_" x1="242.54" y1="1.89" x2="228.38" y2="0.49" gradientTransform="matrix(0, 1.05, -1.04, 0, 20.78, -225.56)" gradientUnits="userSpaceOnUse"><stop offset="0.09" stop-color="#143253"/><stop offset="0.99" stop-color="#6199bc"/></linearGradient><linearGradient id="Light_Blue_Gradient_2" x1="-11.48" y1="-188.04" x2="-11.48" y2="-185.37" gradientTransform="translate(198.71 5.81) rotate(-90) scale(0.91 0.96)" xlink:href="#Light_Blue_Gradient_"/><linearGradient id="Blue_Gradient_2" x1="-12.24" y1="-184.12" x2="-10.72" y2="-189.29" gradientTransform="translate(198.71 5.81) rotate(-90) scale(0.91 0.96)" xlink:href="#Blue_Gradient_"/></defs><path class="cls-1" d="M1.44.5H21.56a.89.89,0,0,1,.94.84V21.56a.89.89,0,0,1-.84.94H1.44a.89.89,0,0,1-.94-.84V1.44A.89.89,0,0,1,1.34.5Z"/><rect class="cls-2" x="1" y="1" width="21" height="5"/><path class="cls-3" d="M22.2,17.31,23,18.73a3.64,3.64,0,0,1-.62,4.52,4,4,0,0,1-5.54,0,3.74,3.74,0,0,1-1.23-2.66,5.41,5.41,0,0,1,1.17-3l-.2-.24-2.34-2.62L14,15c-2.43,2.68-2.74,7.89.18,10.73l0,0a7.88,7.88,0,0,0,10.78,0c3.34-3.27,2.44-9-.24-11l-2.57,3.16"/><rect class="cls-4" x="18.22" y="13.71" width="2.57" height="5.14"/></svg>
|
matlab_proxy/gui/token.html
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
<!-- Copyright (c) 2020-2022 The MathWorks, Inc. -->
|
|
2
|
-
<!-- This page lists the token used to authorize the server.-->
|
|
3
|
-
<!doctype html>
|
|
4
|
-
<html lang="en">
|
|
5
|
-
|
|
6
|
-
<head>
|
|
7
|
-
<meta charset="utf-8">
|
|
8
|
-
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
9
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
10
|
-
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
|
|
11
|
-
<meta name="description" content="matlab-proxy Token Authorization">
|
|
12
|
-
<meta name="author" content="The MathWorks Inc.">
|
|
13
|
-
<link rel="icon" href="./favicon.ico">
|
|
14
|
-
|
|
15
|
-
<title>matlab-proxy Token Authorization</title>
|
|
16
|
-
|
|
17
|
-
<!-- Bootstrap core CSS -->
|
|
18
|
-
<!-- Custom styles for this template -->
|
|
19
|
-
<!-- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.4.1/dist/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous"> -->
|
|
20
|
-
<link href="./bootstrap.3.4.1.min.css" rel="stylesheet">
|
|
21
|
-
<link href="./signin.css" rel="stylesheet">
|
|
22
|
-
<link href="./navbar.css" rel="stylesheet">
|
|
23
|
-
|
|
24
|
-
<script type="text/javascript">
|
|
25
|
-
function isServerAuthenticated() {
|
|
26
|
-
// Check whether server is authorized
|
|
27
|
-
var url_string = document.URL
|
|
28
|
-
var base_url = url_string.split("token.html")[0]
|
|
29
|
-
var url = new URL(url_string);
|
|
30
|
-
var token = url.searchParams.get("mwi_auth_token");
|
|
31
|
-
var auth_endpoint = base_url + "authenticate_request"
|
|
32
|
-
if (token) {
|
|
33
|
-
auth_endpoint += "?mwi_auth_token=" + token
|
|
34
|
-
}
|
|
35
|
-
console.log("auth_endpoint: " + auth_endpoint);
|
|
36
|
-
fetch(auth_endpoint)
|
|
37
|
-
.then(function (response) {
|
|
38
|
-
if (response.ok) {
|
|
39
|
-
console.log('This page is authorized!')
|
|
40
|
-
// User may have requested for token.html directly, bypassing the "mwi_auth_token" endpoint
|
|
41
|
-
// This case is handled in the showToken function
|
|
42
|
-
return;
|
|
43
|
-
} else {
|
|
44
|
-
console.log('This page is NOT authorized!')
|
|
45
|
-
// Redirect to endpoint which can display the token if it passes authentication
|
|
46
|
-
window.location.replace(base_url + "mwi_auth_token")
|
|
47
|
-
}
|
|
48
|
-
}).catch(function (error) {
|
|
49
|
-
console.log(error);
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
function showToken() {
|
|
54
|
-
isServerAuthenticated();
|
|
55
|
-
// Get URL parameter "mwi_auth_token"
|
|
56
|
-
var mwi_auth_token = urlParams['mwi_auth_token']
|
|
57
|
-
if (mwi_auth_token) {
|
|
58
|
-
document.getElementById("mwi_auth_token").innerHTML = mwi_auth_token;
|
|
59
|
-
} else {
|
|
60
|
-
// The server is authenticated but the token is absent in the URL
|
|
61
|
-
// Redirect to the endpoint which shows the token
|
|
62
|
-
var url_string = document.URL
|
|
63
|
-
var base_url = url_string.split("token.html")[0]
|
|
64
|
-
window.location.replace(base_url + "mwi_auth_token")
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// Helper to query URL parameter
|
|
69
|
-
let urlParams = {};
|
|
70
|
-
(window.onpopstate = function () {
|
|
71
|
-
let match,
|
|
72
|
-
pl = /\+/g, // Regex for replacing addition symbol with a space
|
|
73
|
-
search = /([^&=]+)=?([^&]*)/g,
|
|
74
|
-
decode = function (s) {
|
|
75
|
-
return decodeURIComponent(s.replace(pl, " "));
|
|
76
|
-
},
|
|
77
|
-
query = window.location.search.substring(1);
|
|
78
|
-
|
|
79
|
-
while (match = search.exec(query)) {
|
|
80
|
-
if (decode(match[1]) in urlParams) {
|
|
81
|
-
if (!Array.isArray(urlParams[decode(match[1])])) {
|
|
82
|
-
urlParams[decode(match[1])] = [urlParams[decode(match[1])]];
|
|
83
|
-
}
|
|
84
|
-
urlParams[decode(match[1])].push(decode(match[2]));
|
|
85
|
-
} else {
|
|
86
|
-
urlParams[decode(match[1])] = decode(match[2]);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
})();
|
|
90
|
-
</script>
|
|
91
|
-
</head>
|
|
92
|
-
|
|
93
|
-
<body onload="showToken()">
|
|
94
|
-
<div class="container">
|
|
95
|
-
<!-- Static navbar -->
|
|
96
|
-
<nav class="navbar navbar-default">
|
|
97
|
-
<div class="container-fluid">
|
|
98
|
-
<div class="navbar-header">
|
|
99
|
-
<a class="navbar-brand">matlab-proxy</a>
|
|
100
|
-
</div>
|
|
101
|
-
<div id="navbar" class="navbar-collapse collapse">
|
|
102
|
-
<ul class="nav navbar-nav navbar-right">
|
|
103
|
-
<li><a href="https://github.com/mathworks/matlab-proxy/blob/main/SECURITY.md#token-based-authentication"
|
|
104
|
-
target="_blank">Help</a>
|
|
105
|
-
</li>
|
|
106
|
-
</ul>
|
|
107
|
-
</div>
|
|
108
|
-
<!--/.nav-collapse -->
|
|
109
|
-
</div>
|
|
110
|
-
<!--/.container-fluid -->
|
|
111
|
-
</nav>
|
|
112
|
-
|
|
113
|
-
<div class="container">
|
|
114
|
-
<div class="starter-template">
|
|
115
|
-
<h2 id="mwi_auth_token_header">This server's authentication token is: </h2>
|
|
116
|
-
<p style="color:red;font-size: medium;font-weight: bold;" id="mwi_auth_token">Unknown</p>
|
|
117
|
-
</div>
|
|
118
|
-
</div>
|
|
119
|
-
|
|
120
|
-
</div> <!-- /container -->
|
|
121
|
-
</body>
|
|
122
|
-
|
|
123
|
-
</html>
|