diff --git a/file/public.go b/file/public.go new file mode 100644 index 0000000..5b9a546 --- /dev/null +++ b/file/public.go @@ -0,0 +1,54 @@ +package file + +import ( + "github.com/veypi/OneAuth/cfg" + "github.com/veypi/OneAuth/libs/auth" + "github.com/veypi/OneAuth/libs/oerr" + "github.com/veypi/OneAuth/oalib" + "github.com/veypi/OneBD" + "github.com/veypi/OneBD/rfc" + "github.com/veypi/utils/log" + "net/http" + "strconv" +) + +/** +* @name: user +* @author: veypi +* @date: 2021-12-04 11:49 +* @description:user +**/ +func appFileChecker(w http.ResponseWriter, r *http.Request) (prefix string, mountPoint string, ownerID string, actorID string, err error) { + m := w.(OneBD.Meta) + uuid := m.Params("uuid") + p := &oalib.PayLoad{} + h := r.Header.Get("auth_token") + if h == "" { + h = m.Query("auth_token") + } + log.Warn().Msgf("|%s|%s|", r.Header.Get("auth_token"), m.Query("auth_token")) + var ok bool + ok, err = p.ParseToken(h, cfg.CFG.APPKey) + if !ok { + err = oerr.NoAuth + return + } + l := p.GetAuth(auth.APP, uuid) + if !l.CanRead() { + err = oerr.NoAuth + } + if !l.CanDelete() && r.Method == rfc.MethodDelete { + err = oerr.NoAuth + } + if !l.CanUpdate() && (r.Method == "PUT" || r.Method == "MKCOL" || r.Method == "COPY" || r.Method == "MOVE") { + err = oerr.NoAuth + } + if err != nil { + return + } + actorID = strconv.Itoa(int(p.ID)) + ownerID = uuid + mountPoint = uuid + prefix = cfg.CFG.FileUrlPrefix + "/app/" + uuid + "/" + return +} diff --git a/oaf/package.json b/oaf/package.json index 7c71964..f80cc90 100644 --- a/oaf/package.json +++ b/oaf/package.json @@ -30,6 +30,7 @@ "path-posix": "^1.0.0" }, "devDependencies": { + "@veypi/oaer": "file:src/oaer", "@types/node": "^16.11.12", "@vitejs/plugin-vue": "^1.9.3", "less": "^4.1.2", diff --git a/oaf/src/api/ajax.ts b/oaf/src/api/ajax.ts index 5d7dd08..d8e1c74 100644 --- a/oaf/src/api/ajax.ts +++ b/oaf/src/api/ajax.ts @@ -2,19 +2,39 @@ import axios from 'axios' import {store} from '@/store' -function baseRequests(url: string, method: any = 'GET', query: any, data: any, success: any, fail?: Function) { +function getQueryVariable(variable: string) { + let query = window.location.search.substring(1) + let vars = query.split('&') + for (let i = 0; i < vars.length; i++) { + let pair = vars[i].split('=') + if (pair[0] == variable) { + return pair[1] + } + } + return '' +} + +function baseRequests(url: string, method: any = 'GET', query: any, data: any, success: any, fail?: Function, header?: any) { + let headers = { + auth_token: localStorage.auth_token || decodeURIComponent(getQueryVariable('token') as string), + } + if (header) { + headers = Object.assign(headers, header) + } return axios({ url: url, params: query, data: data, method: method, - headers: { - auth_token: localStorage.auth_token - } + headers: headers, }).then((res: any) => { if ('auth_token' in res.headers) { localStorage.auth_token = res.headers.auth_token } + if ('redirect_url' in res.headers) { + window.location.href = res.headers.redirect_url + return + } if (method === 'HEAD') { success(res.headers) } else { @@ -42,24 +62,24 @@ function baseRequests(url: string, method: any = 'GET', query: any, data: any, s } const ajax = { - get(url: '', data = {}, success = {}, fail?: Function) { - return baseRequests(url, 'GET', data, {}, success, fail) + get(url: '', data = {}, success = {}, fail?: Function, header?: any) { + return baseRequests(url, 'GET', data, {}, success, fail, header) }, - head(url: '', data = {}, success = {}, fail?: Function) { - return baseRequests(url, 'HEAD', data, {}, success, fail) + head(url: '', data = {}, success = {}, fail?: Function, header?: any) { + return baseRequests(url, 'HEAD', data, {}, success, fail, header) }, - delete(url: '', data = {}, success = {}, fail?: Function) { - return baseRequests(url, 'DELETE', data, {}, success, fail) + delete(url: '', data = {}, success = {}, fail?: Function, header?: any) { + return baseRequests(url, 'DELETE', data, {}, success, fail, header) }, - post(url: '', data = {}, success = {}, fail?: Function) { - return baseRequests(url, 'POST', {}, data, success, fail) + post(url: '', data = {}, success = {}, fail?: Function, header?: any) { + return baseRequests(url, 'POST', {}, data, success, fail, header) }, - put(url: '', data = {}, success = {}, fail?: Function) { - return baseRequests(url, 'PUT', {}, data, success, fail) + put(url: '', data = {}, success = {}, fail?: Function, header?: any) { + return baseRequests(url, 'PUT', {}, data, success, fail, header) + }, + patch(url: '', data = {}, success = {}, fail?: Function, header?: any) { + return baseRequests(url, 'PATCH', {}, data, success, fail, header) }, - patch(url: '', data = {}, success = {}, fail?: Function) { - return baseRequests(url, 'PATCH', {}, data, success, fail) - } } export default ajax diff --git a/oaf/src/api/interface.ts b/oaf/src/api/interface.ts index 5a0fae1..babc42a 100644 --- a/oaf/src/api/interface.ts +++ b/oaf/src/api/interface.ts @@ -1,4 +1,4 @@ -import {store} from "@/store"; +import {store} from "@/store" export type SuccessFunction = (e: any) => void; export type FailedFunction = (e: any) => void; @@ -12,11 +12,13 @@ export class Interface { private readonly method: Function private readonly api: string private readonly data: any + private readonly header: any - constructor(method: Function, api: string, data?: any) { + constructor(method: Function, api: string, data?: any, headers?: any) { this.method = method this.api = api this.data = data + this.header = headers } Start(success?: SuccessFunction, fail?: FailedFunction) { @@ -56,6 +58,6 @@ export class Interface { newFail(data) } } - this.method(this.api, this.data, newSuccess, newFail) + this.method(this.api, this.data, newSuccess, newFail, this.header) } } diff --git a/oaf/src/components/app.vue b/oaf/src/components/app.vue index 72ff081..b0bde0c 100644 --- a/oaf/src/components/app.vue +++ b/oaf/src/components/app.vue @@ -2,7 +2,7 @@
- +
diff --git a/oaf/src/components/avatar/avatar.vue b/oaf/src/components/avatar/avatar.vue index 773be09..e9578f9 100644 --- a/oaf/src/components/avatar/avatar.vue +++ b/oaf/src/components/avatar/avatar.vue @@ -1,7 +1,7 @@