diff --git a/src/skins/vector/skindex.js b/src/skins/vector/skindex.js index e1476fac..51bfb105 100644 --- a/src/skins/vector/skindex.js +++ b/src/skins/vector/skindex.js @@ -66,6 +66,7 @@ skin['molecules.UserSelector'] = require('./views/molecules/UserSelector'); skin['molecules.voip.CallView'] = require('./views/molecules/voip/CallView'); skin['molecules.voip.IncomingCallBox'] = require('./views/molecules/voip/IncomingCallBox'); skin['molecules.voip.VideoView'] = require('./views/molecules/voip/VideoView'); +skin['organisms.CasLogin'] = require('./views/organisms/CasLogin'); skin['organisms.CreateRoom'] = require('./views/organisms/CreateRoom'); skin['organisms.ErrorDialog'] = require('./views/organisms/ErrorDialog'); skin['organisms.LeftPanel'] = require('./views/organisms/LeftPanel'); diff --git a/src/skins/vector/views/organisms/CasLogin.js b/src/skins/vector/views/organisms/CasLogin.js new file mode 100644 index 00000000..ae41e955 --- /dev/null +++ b/src/skins/vector/views/organisms/CasLogin.js @@ -0,0 +1,37 @@ +/* +Copyright 2015 OpenMarket Ltd + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +'use strict'; + +var React = require('react'); + +var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg'); + +var CasLoginController = require('matrix-react-sdk/lib/controllers/organisms/CasLogin'); + +module.exports = React.createClass({ + displayName: 'CasLogin', + mixins: [CasLoginController], + + render: function() { + return ( +
+ +
+ ); + }, + +}); diff --git a/src/skins/vector/views/templates/Login.js b/src/skins/vector/views/templates/Login.js index 4e78dce9..0378153a 100644 --- a/src/skins/vector/views/templates/Login.js +++ b/src/skins/vector/views/templates/Login.js @@ -141,6 +141,11 @@ module.exports = React.createClass({ ); + case 'stage_m.login.cas': + var CasLogin = sdk.getComponent('organisms.CasLogin'); + return ( + + ); } }, diff --git a/src/vector/index.js b/src/vector/index.js index 1f6585f7..22db05a3 100644 --- a/src/vector/index.js +++ b/src/vector/index.js @@ -21,24 +21,29 @@ var sdk = require("matrix-react-sdk"); sdk.loadSkin(require('../skins/vector/skindex')); sdk.loadModule(require('../modules/VectorConferenceHandler')); +var qs = require("querystring"); + var lastLocationHashSet = null; + +// We want to support some name / value pairs in the fragment +// so we're re-using query string like format +function parseQsFromFragment(location) { + var hashparts = location.hash.split('?'); + if (hashparts.length > 1) { + return qs.parse(hashparts[1]); + } + return {}; +} + // Here, we do some crude URL analysis to allow // deep-linking. We only support registration // deep-links in this example. function routeUrl(location) { if (location.hash.indexOf('#/register') == 0) { - var hashparts = location.hash.split('?'); - var params = {}; - if (hashparts.length == 2) { - var pairs = hashparts[1].split('&'); - for (var i = 0; i < pairs.length; ++i) { - var parts = pairs[i].split('='); - if (parts.length != 2) continue; - params[decodeURIComponent(parts[0])] = decodeURIComponent(parts[1]); - } - } - window.matrixChat.showScreen('register', params); + window.matrixChat.showScreen('register', parseQsFromFragment(location)); + } else if (location.hash.indexOf('#/login/cas') == 0) { + window.matrixChat.showScreen('cas_login', parseQsFromFragment(location)); } else { window.matrixChat.showScreen(location.hash.substring(2)); }