mirror of
https://github.com/casdoor/casdoor.git
synced 2025-05-23 02:35:49 +08:00
Add auth folder.
This commit is contained in:
parent
40587f35e3
commit
001496b90f
@ -41,7 +41,7 @@ var githubOauthConfig = &oauth2.Config{
|
|||||||
Endpoint: githubEndpoint,
|
Endpoint: githubEndpoint,
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ApiController) AuthGithub() {
|
func (c *ApiController) AuthLogin() {
|
||||||
providerName := c.Input().Get("provider")
|
providerName := c.Input().Get("provider")
|
||||||
code := c.Input().Get("code")
|
code := c.Input().Get("code")
|
||||||
state := c.Input().Get("state")
|
state := c.Input().Get("state")
|
@ -37,7 +37,7 @@ func initAPI() {
|
|||||||
beego.Router("/api/login", &controllers.ApiController{}, "POST:Login")
|
beego.Router("/api/login", &controllers.ApiController{}, "POST:Login")
|
||||||
beego.Router("/api/logout", &controllers.ApiController{}, "POST:Logout")
|
beego.Router("/api/logout", &controllers.ApiController{}, "POST:Logout")
|
||||||
beego.Router("/api/get-account", &controllers.ApiController{}, "GET:GetAccount")
|
beego.Router("/api/get-account", &controllers.ApiController{}, "GET:GetAccount")
|
||||||
beego.Router("/api/auth/github", &controllers.ApiController{}, "GET:AuthGithub")
|
beego.Router("/api/auth/login", &controllers.ApiController{}, "GET:AuthLogin")
|
||||||
|
|
||||||
beego.Router("/api/get-organizations", &controllers.ApiController{}, "GET:GetOrganizations")
|
beego.Router("/api/get-organizations", &controllers.ApiController{}, "GET:GetOrganizations")
|
||||||
beego.Router("/api/get-organization", &controllers.ApiController{}, "GET:GetOrganization")
|
beego.Router("/api/get-organization", &controllers.ApiController{}, "GET:GetOrganization")
|
||||||
|
@ -27,12 +27,12 @@ import ProviderListPage from "./ProviderListPage";
|
|||||||
import ProviderEditPage from "./ProviderEditPage";
|
import ProviderEditPage from "./ProviderEditPage";
|
||||||
import ApplicationListPage from "./ApplicationListPage";
|
import ApplicationListPage from "./ApplicationListPage";
|
||||||
import ApplicationEditPage from "./ApplicationEditPage";
|
import ApplicationEditPage from "./ApplicationEditPage";
|
||||||
import Face from "./Face";
|
|
||||||
import AccountPage from "./account/AccountPage";
|
import AccountPage from "./account/AccountPage";
|
||||||
import LoginPage from "./account/LoginPage";
|
import LoginPage from "./account/LoginPage";
|
||||||
import HomePage from "./basic/HomePage";
|
import HomePage from "./basic/HomePage";
|
||||||
import CustomGithubCorner from "./CustomGithubCorner";
|
import CustomGithubCorner from "./CustomGithubCorner";
|
||||||
import AuthCallback from "./common/AuthCallback";
|
import Face from "./auth/Face";
|
||||||
|
import AuthCallback from "./auth/AuthCallback";
|
||||||
|
|
||||||
const { Header, Footer } = Layout;
|
const { Header, Footer } = Layout;
|
||||||
|
|
||||||
@ -46,7 +46,6 @@ class App extends Component {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Setting.initServerUrl();
|
Setting.initServerUrl();
|
||||||
Setting.initClientUrl();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillMount() {
|
componentWillMount() {
|
||||||
|
@ -19,7 +19,7 @@ import * as ApplicationBackend from "./backend/ApplicationBackend";
|
|||||||
import * as Setting from "./Setting";
|
import * as Setting from "./Setting";
|
||||||
import * as ProviderBackend from "./backend/ProviderBackend";
|
import * as ProviderBackend from "./backend/ProviderBackend";
|
||||||
import * as OrganizationBackend from "./backend/OrganizationBackend";
|
import * as OrganizationBackend from "./backend/OrganizationBackend";
|
||||||
import Face from "./Face";
|
import Face from "./auth/Face";
|
||||||
|
|
||||||
const { Option } = Select;
|
const { Option } = Select;
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ import {Button, Col, Popconfirm, Row, Table} from 'antd';
|
|||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
import * as Setting from "./Setting";
|
import * as Setting from "./Setting";
|
||||||
import * as ProviderBackend from "./backend/ProviderBackend";
|
import * as ProviderBackend from "./backend/ProviderBackend";
|
||||||
import * as Auth from "./common/Auth";
|
import * as Auth from "./auth/Auth";
|
||||||
|
|
||||||
class ProviderListPage extends React.Component {
|
class ProviderListPage extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
|
@ -26,15 +26,6 @@ export function initServerUrl() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function initClientUrl() {
|
|
||||||
const hostname = window.location.hostname;
|
|
||||||
if (hostname === "localhost") {
|
|
||||||
ClientUrl = `http://${hostname}:7001`;
|
|
||||||
} else {
|
|
||||||
ClientUrl = `https://${hostname}`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function parseJson(s) {
|
export function parseJson(s) {
|
||||||
if (s === "") {
|
if (s === "") {
|
||||||
return null;
|
return null;
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import Face from "../Face";
|
import Face from "../auth/Face";
|
||||||
|
|
||||||
class LoginPage extends React.Component {
|
class LoginPage extends React.Component {
|
||||||
render() {
|
render() {
|
||||||
|
@ -12,8 +12,6 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
import * as Setting from "../Setting";
|
|
||||||
|
|
||||||
export const GoogleAuthScope = "profile+email"
|
export const GoogleAuthScope = "profile+email"
|
||||||
export const GoogleAuthUri = "https://accounts.google.com/signin/oauth";
|
export const GoogleAuthUri = "https://accounts.google.com/signin/oauth";
|
||||||
export const GoogleAuthLogo = "https://cdn.jsdelivr.net/gh/casbin/static/img/social_google.png";
|
export const GoogleAuthLogo = "https://cdn.jsdelivr.net/gh/casbin/static/img/social_google.png";
|
||||||
@ -41,8 +39,17 @@ export function getAuthLogo(provider) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getClientUrl() {
|
||||||
|
const hostname = window.location.hostname;
|
||||||
|
if (hostname === "localhost") {
|
||||||
|
return `http://${hostname}:7001`;
|
||||||
|
} else {
|
||||||
|
return `https://${hostname}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export function getAuthUrl(provider, method) {
|
export function getAuthUrl(provider, method) {
|
||||||
const redirectUri = `${Setting.ClientUrl}/callback/${provider.type}/${provider.name}/${method}`;
|
const redirectUri = `${getClientUrl()}/callback/${provider.type}/${provider.name}/${method}`;
|
||||||
if (provider.type === "google") {
|
if (provider.type === "google") {
|
||||||
return `${GoogleAuthUri}?client_id=${provider.clientId}&redirect_uri=${redirectUri}&scope=${GoogleAuthScope}&response_type=code&state=${AuthState}`;
|
return `${GoogleAuthUri}?client_id=${provider.clientId}&redirect_uri=${redirectUri}&scope=${GoogleAuthScope}&response_type=code&state=${AuthState}`;
|
||||||
} else if (provider.type === "github") {
|
} else if (provider.type === "github") {
|
@ -13,9 +13,10 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
import {message, Spin} from "antd";
|
||||||
import {withRouter} from "react-router-dom";
|
import {withRouter} from "react-router-dom";
|
||||||
import * as Setting from "../Setting";
|
|
||||||
import * as AccountBackend from "../backend/AccountBackend";
|
import * as AccountBackend from "../backend/AccountBackend";
|
||||||
|
import {getClientUrl} from "./Auth";
|
||||||
|
|
||||||
class AuthCallback extends React.Component {
|
class AuthCallback extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
@ -34,29 +35,35 @@ class AuthCallback extends React.Component {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
getAuthenticatedInfo() {
|
componentWillMount() {
|
||||||
|
this.authLogin();
|
||||||
|
}
|
||||||
|
|
||||||
|
showMessage(type, text) {
|
||||||
|
if (type === "success") {
|
||||||
|
message.success(text);
|
||||||
|
} else if (type === "error") {
|
||||||
|
message.error(text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
authLogin() {
|
||||||
let redirectUrl;
|
let redirectUrl;
|
||||||
redirectUrl = `${Setting.ClientUrl}/callback/${this.state.providerType}/${this.state.providerName}/${this.state.addition}`;
|
redirectUrl = `${getClientUrl()}/callback/${this.state.providerType}/${this.state.providerName}/${this.state.addition}`;
|
||||||
AccountBackend.authLogin(this.state.providerName, this.state.code, this.state.state, redirectUrl, this.state.addition)
|
AccountBackend.authLogin(this.state.providerName, this.state.code, this.state.state, redirectUrl, this.state.addition)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
if (res.status === "ok") {
|
if (res.status === "ok") {
|
||||||
window.location.href = '/';
|
window.location.href = '/';
|
||||||
}else {
|
} else {
|
||||||
Setting.showMessage("error", res?.msg);
|
this.showMessage("error", res?.msg);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
|
||||||
this.getAuthenticatedInfo();
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<div>
|
<div style={{textAlign: "center"}}>
|
||||||
<h3>
|
<Spin size="large" tip="Signing in..." style={{paddingTop: "10%"}} />
|
||||||
Logging in ...
|
|
||||||
</h3>
|
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
@ -15,10 +15,10 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import {Button, Checkbox, Col, Form, Input, Row} from "antd";
|
import {Button, Checkbox, Col, Form, Input, Row} from "antd";
|
||||||
import {LockOutlined, UserOutlined} from "@ant-design/icons";
|
import {LockOutlined, UserOutlined} from "@ant-design/icons";
|
||||||
import * as ApplicationBackend from "./backend/ApplicationBackend";
|
import * as ApplicationBackend from "../backend/ApplicationBackend";
|
||||||
import * as AccountBackend from "./backend/AccountBackend";
|
import * as AccountBackend from "../backend/AccountBackend";
|
||||||
import * as Setting from "./Setting";
|
import * as Setting from "../Setting";
|
||||||
import * as Auth from "./common/Auth";
|
import * as Auth from "./Auth";
|
||||||
|
|
||||||
class Face extends React.Component {
|
class Face extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
@ -14,13 +14,6 @@
|
|||||||
|
|
||||||
import * as Setting from "../Setting";
|
import * as Setting from "../Setting";
|
||||||
|
|
||||||
export function getUser(username) {
|
|
||||||
return fetch(`${Setting.ServerUrl}/api/get-user?username=${username}`, {
|
|
||||||
method: 'GET',
|
|
||||||
credentials: 'include'
|
|
||||||
}).then(res => res.json());
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getAccount() {
|
export function getAccount() {
|
||||||
return fetch(`${Setting.ServerUrl}/api/get-account`, {
|
return fetch(`${Setting.ServerUrl}/api/get-account`, {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
@ -52,8 +45,7 @@ export function logout() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function authLogin(providerName, code, state, redirectUrl, addition) {
|
export function authLogin(providerName, code, state, redirectUrl, addition) {
|
||||||
console.log(redirectUrl)
|
return fetch(`${Setting.ServerUrl}/api/auth/login?provider=${providerName}&code=${code}&state=${state}&redirect_url=${redirectUrl}&addition=${addition}`, {
|
||||||
return fetch(`${Setting.ServerUrl}/api/auth/github?provider=${providerName}&code=${code}&state=${state}&redirect_url=${redirectUrl}&addition=${addition}`, {
|
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
credentials: 'include',
|
credentials: 'include',
|
||||||
}).then(res => res.json());
|
}).then(res => res.json());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user