Skip to content

Commit

Permalink
Merge pull request #87 from wu-jj/dev
Browse files Browse the repository at this point in the history
[feat] Optimize token and midea related operations
  • Loading branch information
IRONICBo authored Feb 1, 2024
2 parents 5c32532 + 5ebad19 commit fc9fab2
Show file tree
Hide file tree
Showing 3 changed files with 110 additions and 90 deletions.
104 changes: 14 additions & 90 deletions cmd/gopcomm/community_yap.gox
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ get "/p/:id", ctx => {
// todo middleware
// Get User Info
var user *core.User
token, err := ctx.Request.Cookie("token")
token, err := core.GetToken(ctx)
if err == nil {
user, err = community.getUser(token.Value)
if err != nil {
Expand Down Expand Up @@ -99,7 +99,7 @@ get "/user/:id", ctx => {
// todo middleware
// get user by token
var user *core.User
token, err := ctx.Request.Cookie("token")
token, err := core.GetToken(ctx)
if err == nil {
user, err = community.getUser(token.Value)
if err != nil {
Expand All @@ -124,7 +124,7 @@ get "/add", ctx => {

get "/delete", ctx => {
id := ctx.param("id")
token, err := ctx.Request.Cookie("token")
token, err := core.GetToken(ctx)
uid, err := community.ParseJwtToken(token.Value)
if err != nil {
xLog.Error("token parse error")
Expand All @@ -150,7 +150,7 @@ get "/delete", ctx => {
get "/", ctx => {
// Get User Info
var user *core.User
token, err := ctx.Request.Cookie("token")
token, err := core.GetToken(ctx)
if err == nil {
user, err = community.getUser(token.Value)
if err != nil {
Expand Down Expand Up @@ -198,7 +198,7 @@ get "/search", ctx => {

// todo middleware
var user *core.User
token, err := ctx.Request.Cookie("token")
token, err := core.GetToken(ctx)
if err == nil {
user, err = community.getUser(token.Value)
if err != nil {
Expand All @@ -217,7 +217,7 @@ get "/search", ctx => {
}

get "/edit/:id", ctx => {
token, err := ctx.Request.Cookie("token")
token, err := core.GetToken(ctx)
if err != nil {
ctx.json {
"code": 500,
Expand Down Expand Up @@ -267,7 +267,7 @@ post "/commit", ctx => {
mdData := ctx.param("content")
htmlData := ctx.param("html")
// get user id
token, err := ctx.Request.Cookie("token")
token, err := core.GetToken(ctx)
if err != nil {
ctx.json {
"code": 500,
Expand Down Expand Up @@ -306,7 +306,7 @@ post "/commit", ctx => {
// click "translate button"
post "/translate", ctx => {
// get user id
token, err := ctx.Request.Cookie("token")
token, err := core.GetToken(ctx)
if err != nil {
ctx.json {
"code": 500,
Expand Down Expand Up @@ -365,68 +365,7 @@ get "/getMediaUrl/:id", ctx => {
}

post "/upload", ctx => {
file, header, err := ctx.FormFile("file")
filename := header.Filename

ctx.ParseMultipartForm(10 << 20)

if err != nil {
xLog.Error("upload file error:", filename)
ctx.JSON(500, err.Error())
return
}

dst, err := os.Create(filename)
if err != nil {
xLog.Error("create file error:", file)
ctx.JSON(500, err.Error())
return
}
defer func() {
file.Close()
dst.Close()
err = os.Remove(filename)
if err != nil {
xLog.Error("delete file error:", filename)
return
}
}()

_, err = io.Copy(dst, file)
if err != nil {
xLog.Error("copy file errer:", filename)
ctx.JSON(500, err.Error())
return
}
bytes, err := os.ReadFile(filename)
if err != nil {
xLog.Error("read file errer:", filename)
ctx.JSON(500, err.Error())
return
}
token, err := ctx.Request.Cookie("token")
if err != nil {
ctx.json {
"code": 500,
"err": "no token",
}
}
uid, err := community.ParseJwtToken(token.Value)
if err != nil {
ctx.json {
"code": 500,
"err": err.Error(),
}
}
id,err:=community.SaveMedia(context.Background(), uid, bytes)
if err!=nil {
xLog.Error("save file",err.Error())
ctx.JSON(500, err.Error())
return
}
// todo append current project ip and getMedia
// sample: 127.0.0.1:8080/getMedia/ + id
ctx.JSON(200, id)
core.UploadFile(ctx, community)
}

get "/login", ctx => {
Expand All @@ -442,35 +381,20 @@ get "/login", ctx => {


get "/logout", ctx => {
tokenCookie, err := ctx.Request.Cookie("token")
err := core.RemoveToken(ctx)
if err != nil {
xLog.Error("get token error:", err)
xLog.Error("remove token error:", err)
}

// Delete token
tokenCookie.MaxAge = -1
http.SetCookie(ctx.ResponseWriter, tokenCookie)

// Redirect to home page
http.Redirect(ctx.ResponseWriter, ctx.Request, fmt.Sprintf("/"), http.StatusFound)
}

get "/callback", ctx => {
code := ctx.URL.Query().Get("code")
state := ctx.URL.Query().Get("state")

token, error := community.GetAccessToken(code, state)
if error != nil {
xLog.Error("err",error) // Redirect to login
}

cookie := http.Cookie{
Name: "token",
Value: token.AccessToken,
Path: "/",
MaxAge: 3600,
err := core.SetToken(ctx)
if err != nil {
xLog.Error("set token error:", err)
}
http.SetCookie(ctx.ResponseWriter, &cookie)

// Redirect to home page
// TODO: Get redirect URL from state
Expand Down
58 changes: 58 additions & 0 deletions internal/core/media.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ package core

import (
"context"
"github.com/goplus/yap"
"github.com/qiniu/x/xlog"
"io"
"os"
"strconv"
"strings"
"time"
Expand Down Expand Up @@ -140,3 +144,57 @@ func (c *Community) uploadMedia(fileKey string, data []byte) error {
}
return nil
}

func UploadFile(ctx *yap.Context, community *Community) {
xLog := xlog.New("")
file, header, err := ctx.FormFile("file")
filename := header.Filename
ctx.ParseMultipartForm(10 << 20)
if err != nil {
xLog.Error("upload file error:", filename)
ctx.JSON(500, err.Error())
return
}
dst, err := os.Create(filename)
if err != nil {
xLog.Error("create file error:", file)
ctx.JSON(500, err.Error())
return
}
defer func() {
file.Close()
dst.Close()
err = os.Remove(filename)
if err != nil {
xLog.Error("delete file error:", filename)
return
}
}()
_, err = io.Copy(dst, file)
if err != nil {
xLog.Error("copy file errer:", filename)
ctx.JSON(500, err.Error())
return
}
bytes, err := os.ReadFile(filename)
if err != nil {
xLog.Error("read file errer:", filename)
ctx.JSON(500, err.Error())
return
}
token, err := GetToken(ctx)
if err != nil {
ctx.JSON(500, err.Error())
}
uid, err := community.ParseJwtToken(token.Value)
if err != nil {
ctx.JSON(500, err.Error())
}
id, err := community.SaveMedia(context.Background(), uid, bytes)
if err != nil {
xLog.Error("save file", err.Error())
ctx.JSON(500, err.Error())
return
}
ctx.JSON(200, id)
}
38 changes: 38 additions & 0 deletions internal/core/user.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package core

import (
"github.com/goplus/yap"
"net/http"
"os"

"github.com/casdoor/casdoor-go-sdk/casdoorsdk"
Expand Down Expand Up @@ -84,3 +86,39 @@ func (p *Community) UpdateUserById(uid string, user *casdoorsdk.User) (res bool,
res, err = casdoorsdk.UpdateUserById(uid, user)
return
}

func SetToken(ctx *yap.Context) (err error) {
code := ctx.URL.Query().Get("code")
state := ctx.URL.Query().Get("state")
token, err := casdoorsdk.GetOAuthToken(code, state)
if err != nil {
return err
}
cookie := http.Cookie{
Name: "token",
Value: token.AccessToken,
Path: "/",
MaxAge: 3600,
}
http.SetCookie(ctx.ResponseWriter, &cookie)
return err
}

func GetToken(ctx *yap.Context) (token *http.Cookie, err error) {
tokenCookie, err := ctx.Request.Cookie("token")
if err != nil {
return tokenCookie, err
}
return tokenCookie, err
}

func RemoveToken(ctx *yap.Context) (err error) {
tokenCookie, err := ctx.Request.Cookie("token")
if err != nil {
return err
}
// Delete token
tokenCookie.MaxAge = -1
http.SetCookie(ctx.ResponseWriter, tokenCookie)
return err
}

0 comments on commit fc9fab2

Please sign in to comment.