From a07bf0abe96f6753f50892c3aa16a0b19162dc4d Mon Sep 17 00:00:00 2001 From: dhanushrajendra Date: Sat, 15 Feb 2020 22:35:16 +0530 Subject: [PATCH 1/2] formatting and removed unused imports --- src/user/dashboard/navigation/navigation.js | 88 ++++++++++++++------- 1 file changed, 60 insertions(+), 28 deletions(-) diff --git a/src/user/dashboard/navigation/navigation.js b/src/user/dashboard/navigation/navigation.js index b8fdc546..88275d9b 100644 --- a/src/user/dashboard/navigation/navigation.js +++ b/src/user/dashboard/navigation/navigation.js @@ -1,12 +1,9 @@ import React, { Component } from "react"; -import { ListGroup , Nav} from "react-bootstrap"; -import {Link, NavLink, Route} from 'react-router-dom'; +import { ListGroup } from "react-bootstrap"; +import { NavLink } from "react-router-dom"; import "./navigation.scss"; - import logo from "../../../svgs/donut.svg"; -import dashboard from "../../../svgs/dashboard.svg"; - class Navigation extends Component { render() { @@ -19,21 +16,32 @@ class Navigation extends Component {
- logo + + logo + - - + + -Dashboard + + Dashboard + - Pinned Posts + + Pinned Posts + - Organization + + Organization + - - + + - Account + + Account + - - + + + -Settings + Settings +
); From ddd7afe3f136c3dce9c972ce0974fce0bc651dae Mon Sep 17 00:00:00 2001 From: dhanushrajendra Date: Mon, 17 Feb 2020 09:55:55 +0530 Subject: [PATCH 2/2] adds login functionality login login --- src/auth/auth-service.js | 47 +++++++++++++ src/auth/login-form/login-form.js | 74 +++++++++++++++++++-- src/user/dashboard/navigation/navigation.js | 67 +++++++++---------- 3 files changed, 146 insertions(+), 42 deletions(-) create mode 100644 src/auth/auth-service.js diff --git a/src/auth/auth-service.js b/src/auth/auth-service.js new file mode 100644 index 00000000..011f633e --- /dev/null +++ b/src/auth/auth-service.js @@ -0,0 +1,47 @@ +import axios from "axios"; + +export const loginIn = body => { + return axios.post("http://donut-api-prod.codeuino.org/auth/login", { + email: body.email, + password: body.password + }); +}; + +export const decodeResponse = response => { + const parts = response.split("."); + if (parts.length !== 3) { + throw new Error( + "Auth token must have 3 parts; " + parts.length + " provided." + ); + } + return { + header: JSON.parse(_base64UrlDecode(parts[0])), + payload: JSON.parse(_base64UrlDecode(parts[1])), + signature: _base64UrlDecode(parts[2]) + }; +}; + +function _base64UrlDecode(base64UrlString) { + var base64String = base64UrlString + .replace(/-/g, "+") // replace character 62 + .replace(/_/g, "/"); // replace character 63 + + switch (base64String.length % 4) { + case 0: { + break; + } + case 2: { + base64String += "=="; + break; + } + case 3: { + base64String += "="; + break; + } + default: { + throw new Error("Illegal base64url string."); + } + } + + return window.atob(base64String); +} diff --git a/src/auth/login-form/login-form.js b/src/auth/login-form/login-form.js index 127299c1..21b6178b 100644 --- a/src/auth/login-form/login-form.js +++ b/src/auth/login-form/login-form.js @@ -1,15 +1,68 @@ import React, { Component } from "react"; import { Form, Button } from "react-bootstrap"; import "./login-form.scss"; +import cookie from "react-cookies"; +import { withRouter } from "react-router-dom"; +import * as auth from "../auth-service"; class LoginForm extends Component { + constructor(props) { + super(props); + this.state = { + email: "", + password: "" + }; + } + + handleChange = (event, params) => { + event.preventDefault(); + params === "email" + ? this.setState({ email: event.target.value }) + : this.setState({ password: event.target.value }); + }; + + checkValidation = () => { + if (this.state.email.includes("@") && this.state.email.includes(".")) { + return true; + } + return false; + }; + + authorizeUser = event => { + event.preventDefault(); + const isValidated = this.checkValidation(); + if (isValidated) { + auth + .loginIn(this.state) + .then(response => { + const decodedToken = auth.decodeResponse(response.data.token); + this.setSession(decodedToken); + }) + .catch(error => { + console.log(error); + }); + } + }; + + setSession = token => { + const id = token.payload._id; + cookie.save("userId", id, { path: "/" }); + this.props.history.push("/dashboard"); + }; + render() { return (
Email address - + this.handleChange(event, "email")} + /> We'll never share your email with anyone else. @@ -17,13 +70,20 @@ class LoginForm extends Component { Password - + this.handleChange(event, "password")} + /> - {/* - - */}
-
@@ -33,4 +93,4 @@ class LoginForm extends Component { } } -export default LoginForm; +export default withRouter(LoginForm); diff --git a/src/user/dashboard/navigation/navigation.js b/src/user/dashboard/navigation/navigation.js index b946f087..54803a52 100644 --- a/src/user/dashboard/navigation/navigation.js +++ b/src/user/dashboard/navigation/navigation.js @@ -6,15 +6,6 @@ import "./navigation.scss"; import logo from "../../../svgs/donut.svg"; class Navigation extends Component { - // onClick(params) { - // this.state.Link("/" + params); - // console.log(params); - // } - constructor(props) { - super(props) - } - - render() { const divStyle = { position: "absolute", @@ -31,7 +22,6 @@ class Navigation extends Component { this.onClick("dashboard")} > Dashboard - this.onClick("posts")} - > - - + + + Pinned Posts - this.onClick("orginization")} - > - - + + + @@ -91,7 +89,6 @@ class Navigation extends Component { this.onClick("profile")} >