diff --git a/client/main.html b/client/main.html
index 28e9a87..32dd10b 100644
--- a/client/main.html
+++ b/client/main.html
@@ -1,12 +1,23 @@
- Application Name
-
+ YoungDesk
+
+
+
-
+
diff --git a/imports/client/views/org/enter/Login.js b/imports/client/views/org/enter/Login.js
deleted file mode 100644
index c6e5cb7..0000000
--- a/imports/client/views/org/enter/Login.js
+++ /dev/null
@@ -1,54 +0,0 @@
-import React from 'react';
-import { Link } from 'react-router';
-import { Row, Col, FormGroup, ControlLabel, FormControl, Button } from 'react-bootstrap';
-import handleLogin from './module/login';
-
-export default class Login extends React.Component {
- componentDidMount() {
- handleLogin({ component: this });
- }
-
- handleSubmit(event) {
- event.preventDefault();
- }
-
- render() {
- return (
-
-
-
- Login
-
-
-
-
- );
- }
-}
diff --git a/imports/client/views/org/enter/login/LoginView.js b/imports/client/views/org/enter/login/LoginView.js
new file mode 100644
index 0000000..8ebed8f
--- /dev/null
+++ b/imports/client/views/org/enter/login/LoginView.js
@@ -0,0 +1,54 @@
+import React from 'react';
+import { Link } from 'react-router';
+import { Row, Col, FormGroup, ControlLabel, FormControl, Button } from 'react-bootstrap';
+import handleLogin from './login';
+
+export default class Login extends React.Component {
+ componentDidMount() {
+ handleLogin({ component: this });
+ }
+
+ handleSubmit(event) {
+ event.preventDefault();
+ }
+
+ render() {
+ return (
+
+
+
+ Login
+
+
+
+
+ );
+ }
+}
diff --git a/imports/client/views/org/enter/login/login.js b/imports/client/views/org/enter/login/login.js
new file mode 100644
index 0000000..a83a0d3
--- /dev/null
+++ b/imports/client/views/org/enter/login/login.js
@@ -0,0 +1,57 @@
+/* eslint-disable no-undef */
+
+import { browserHistory } from 'react-router';
+import { Meteor } from 'meteor/meteor';
+import { Bert } from 'meteor/themeteorchef:bert';
+import '/imports/client/components/validation';
+
+let component;
+
+const login = () => {
+ const email = document.querySelector('[name="emailAddress"]').value;
+ const password = document.querySelector('[name="password"]').value;
+
+ Meteor.loginWithPassword(email, password, (error) => {
+ if (error) {
+ Bert.alert(error.reason, 'warning');
+ } else {
+ Bert.alert('Logged in!', 'success');
+
+ const { location } = component.props;
+ if (location.state && location.state.nextPathname) {
+ browserHistory.push(location.state.nextPathname);
+ } else {
+ browserHistory.push('/');
+ }
+ }
+ });
+};
+
+const validate = () => {
+ $(component.loginForm).validate({
+ rules: {
+ emailAddress: {
+ required: true,
+ email: true,
+ },
+ password: {
+ required: true,
+ },
+ },
+ messages: {
+ emailAddress: {
+ required: 'Need an email address here.',
+ email: 'Is this email address legit?',
+ },
+ password: {
+ required: 'Need a password here.',
+ },
+ },
+ submitHandler() { login(); },
+ });
+};
+
+export default function handleLogin(options) {
+ component = options.component;
+ validate();
+}
diff --git a/imports/client/views/org/enter/module/login.js b/imports/client/views/org/enter/module/login.js
deleted file mode 100644
index a83a0d3..0000000
--- a/imports/client/views/org/enter/module/login.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/* eslint-disable no-undef */
-
-import { browserHistory } from 'react-router';
-import { Meteor } from 'meteor/meteor';
-import { Bert } from 'meteor/themeteorchef:bert';
-import '/imports/client/components/validation';
-
-let component;
-
-const login = () => {
- const email = document.querySelector('[name="emailAddress"]').value;
- const password = document.querySelector('[name="password"]').value;
-
- Meteor.loginWithPassword(email, password, (error) => {
- if (error) {
- Bert.alert(error.reason, 'warning');
- } else {
- Bert.alert('Logged in!', 'success');
-
- const { location } = component.props;
- if (location.state && location.state.nextPathname) {
- browserHistory.push(location.state.nextPathname);
- } else {
- browserHistory.push('/');
- }
- }
- });
-};
-
-const validate = () => {
- $(component.loginForm).validate({
- rules: {
- emailAddress: {
- required: true,
- email: true,
- },
- password: {
- required: true,
- },
- },
- messages: {
- emailAddress: {
- required: 'Need an email address here.',
- email: 'Is this email address legit?',
- },
- password: {
- required: 'Need a password here.',
- },
- },
- submitHandler() { login(); },
- });
-};
-
-export default function handleLogin(options) {
- component = options.component;
- validate();
-}
diff --git a/imports/client/views/org/module/Index.js b/imports/client/views/org/module/Index.js
new file mode 100644
index 0000000..e69de29
diff --git a/imports/client/views/org/module/navigation/AppNavigation.js b/imports/client/views/org/module/navigation/AppNavigation.js
new file mode 100644
index 0000000..319c936
--- /dev/null
+++ b/imports/client/views/org/module/navigation/AppNavigation.js
@@ -0,0 +1,27 @@
+import React from 'react';
+import { Navbar } from 'react-bootstrap';
+import { Link } from 'react-router';
+import PublicNavigation from './PublicNavigation.js';
+import AuthenticatedNavigation from './AuthenticatedNavigation.js';
+
+const renderNavigation = hasUser => (hasUser ? : );
+
+const AppNavigation = ({ hasUser }) => (
+
+
+
+ Application Name
+
+
+
+
+ { renderNavigation(hasUser) }
+
+
+);
+
+AppNavigation.propTypes = {
+ hasUser: React.PropTypes.object,
+};
+
+export default AppNavigation;
diff --git a/imports/client/views/org/module/navigation/AuthenticatedNavigation.js b/imports/client/views/org/module/navigation/AuthenticatedNavigation.js
new file mode 100644
index 0000000..87a0c38
--- /dev/null
+++ b/imports/client/views/org/module/navigation/AuthenticatedNavigation.js
@@ -0,0 +1,30 @@
+import React from 'react';
+import { browserHistory } from 'react-router';
+import { LinkContainer } from 'react-router-bootstrap';
+import { Nav, NavItem, NavDropdown, MenuItem } from 'react-bootstrap';
+import { Meteor } from 'meteor/meteor';
+
+const handleLogout = () => Meteor.logout(() => browserHistory.push('/login'));
+
+const userName = () => {
+ const user = Meteor.user();
+ const name = user && user.profile ? user.profile.name : '';
+ return user ? `${name.first} ${name.last}` : '';
+};
+
+const AuthenticatedNavigation = () => (
+
+
+
+
+);
+
+export default AuthenticatedNavigation;
diff --git a/imports/client/views/org/module/navigation/Loading.js b/imports/client/views/org/module/navigation/Loading.js
new file mode 100644
index 0000000..c97a7eb
--- /dev/null
+++ b/imports/client/views/org/module/navigation/Loading.js
@@ -0,0 +1,30 @@
+import React from 'react';
+
+const Loading = () => (
+
+);
+
+export default Loading;
diff --git a/imports/client/views/org/module/navigation/PublicNavigation.js b/imports/client/views/org/module/navigation/PublicNavigation.js
new file mode 100644
index 0000000..d04fc80
--- /dev/null
+++ b/imports/client/views/org/module/navigation/PublicNavigation.js
@@ -0,0 +1,16 @@
+import React from 'react';
+import { LinkContainer } from 'react-router-bootstrap';
+import { Nav, NavItem } from 'react-bootstrap';
+
+const PublicNavigation = () => (
+
+);
+
+export default PublicNavigation;
diff --git a/imports/client/views/org/module/navigation/index.js b/imports/client/views/org/module/navigation/index.js
new file mode 100644
index 0000000..65f743d
--- /dev/null
+++ b/imports/client/views/org/module/navigation/index.js
@@ -0,0 +1,7 @@
+import { composeWithTracker } from 'react-komposer';
+import { Meteor } from 'meteor/meteor';
+import AppNavigation from '../components/AppNavigation.js';
+
+const composer = (props, onData) => onData(null, { hasUser: Meteor.user() });
+
+export default composeWithTracker(composer, {}, {}, { pure: false })(AppNavigation);
diff --git a/imports/startup/client/routes.js b/imports/startup/client/routes.js
index 36d266e..a2f5e2f 100644
--- a/imports/startup/client/routes.js
+++ b/imports/startup/client/routes.js
@@ -4,15 +4,33 @@ import React from 'react';
import { render } from 'react-dom';
import { Router, Route, IndexRoute, browserHistory } from 'react-router';
import { Meteor } from 'meteor/meteor';
-import App from '/imports/client/layouts/OrgApp';
+
+/**
+ * General Components
+ */
import Index from '/imports/client/views/app/module/Index';
-import Login from '/imports/client/views/org/enter/Login';
+
+/**
+ * Org Components
+ */
+
+import App from '/imports/client/layouts/OrgApp';
+import Login from '/imports/client/views/org/enter/login/LoginView';
import NotFound from '/imports/client/views/org/NotFound';
import RecoverPassword from '/imports/client/views/org/enter/RecoverPassword';
import ResetPassword from '/imports/client/views/org/enter/ResetPassword';
-import Signup from '/imports/client/views/nonOrg/enter/SignupView';
import { Orgs } from '/imports/collections/orgs/index';
+/**
+ * NonOrg Components
+ */
+import Signup from '/imports/client/views/nonOrg/enter/SignupView';
+
+/**
+ * Invalid Org Components
+ */
+
+
const authenticate = (nextState, replace) => {
if (!Meteor.loggingIn() && !Meteor.userId()) {
@@ -24,7 +42,7 @@ const authenticate = (nextState, replace) => {
};
-const detectOrg = (nextState, replace) => {
+const detectOrg = () => {
orgSlug = "";
var hostnameArray = document.location.hostname.split( "." );
if(hostnameArray[1]=='localhost'){
@@ -35,13 +53,13 @@ const detectOrg = (nextState, replace) => {
console.log(res);
if(res){
Session.set('orgId', res._id._str);
- render(getOrgRoutes(),document.getElementById('react-root'));
+ render(getOrgRoutes(),document.getElementById('app'));
}else{
- render(getInvalidOrgRoute(),document.getElementById('react-root'));
+ render(getInvalidOrgRoute(),document.getElementById('app'));
}
});
}else{
- render(getNonOrgRoutes(),document.getElementById('react-root'));
+ render(getNonOrgRoutes(),document.getElementById('app'));
}
}
const checkSlug = (nextState, replace) => {
diff --git a/imports/startup/server/browser-policy.js b/imports/startup/server/browser-policy.js
index 8b97e3b..a519fcf 100644
--- a/imports/startup/server/browser-policy.js
+++ b/imports/startup/server/browser-policy.js
@@ -1,3 +1,14 @@
import { BrowserPolicy } from 'meteor/browser-policy-common';
// e.g., BrowserPolicy.content.allowOriginForAll( 's3.amazonaws.com' );
BrowserPolicy.content.allowFontOrigin("data:");
+
+BrowserPolicy.content.disallowEval();
+
+BrowserPolicy.framing.allowAll();
+BrowserPolicy.content.allowInlineScripts();
+BrowserPolicy.content.allowInlineStyles();
+BrowserPolicy.content.allowSameOriginForAll();
+BrowserPolicy.content.allowDataUrlForAll();
+BrowserPolicy.content.allowOriginForAll('*');
+BrowserPolicy.content.allowOriginForAll('http://*');
+BrowserPolicy.content.allowOriginForAll('https://*');