amount from xlsx
This commit is contained in:
16
README.md
16
README.md
@@ -1,5 +1,14 @@
|
|||||||
# How to:
|
# How to:
|
||||||
## Start
|
## Start
|
||||||
|
- ```
|
||||||
|
docker run --name keycloak \
|
||||||
|
-e KEYCLOAK_ADMIN=admin \
|
||||||
|
-e KEYCLOAK_ADMIN_PASSWORD=admin \
|
||||||
|
--network=host \
|
||||||
|
quay.io/keycloak/keycloak:24.0.0 \
|
||||||
|
start-dev \
|
||||||
|
--http-port=8180
|
||||||
|
```
|
||||||
- `docker-compose up`
|
- `docker-compose up`
|
||||||
- `docker-compose up -d` | Modo demonio
|
- `docker-compose up -d` | Modo demonio
|
||||||
- Keycloak: http://localhost:8180/ user/pass admin:admin
|
- Keycloak: http://localhost:8180/ user/pass admin:admin
|
||||||
@@ -28,4 +37,9 @@ KEYCLOAK_ISSUER=http://localhost:8180/realms/master
|
|||||||
|
|
||||||
|
|
||||||
### OpenId info
|
### OpenId info
|
||||||
- http://localhost:8180/realms/master/.well-known/openid-configuration
|
- http://localhost:8180/realms/master/.well-known/openid-configuration
|
||||||
|
|
||||||
|
|
||||||
|
# ToDo:
|
||||||
|
- Service: saldo from mail | read csv,xlsx
|
||||||
|
- I+D: host astro server
|
||||||
@@ -12,6 +12,8 @@ export default defineConfig({
|
|||||||
clientId: import.meta.env.KEYCLOAK_CLIENT_ID,
|
clientId: import.meta.env.KEYCLOAK_CLIENT_ID,
|
||||||
clientSecret: import.meta.env.KEYCLOAK_CLIENT_SECRET,
|
clientSecret: import.meta.env.KEYCLOAK_CLIENT_SECRET,
|
||||||
issuer: import.meta.env.KEYCLOAK_ISSUER,
|
issuer: import.meta.env.KEYCLOAK_ISSUER,
|
||||||
|
|
||||||
|
|
||||||
}),
|
}),
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|||||||
1
example-data/.~lock.saldos.xlsx#
Normal file
1
example-data/.~lock.saldos.xlsx#
Normal file
@@ -0,0 +1 @@
|
|||||||
|
,oier,XPS24,09.06.2025 18:50,file:///home/oier/.config/libreoffice/4;
|
||||||
BIN
example-data/saldos.xlsx
Normal file
BIN
example-data/saldos.xlsx
Normal file
Binary file not shown.
356
package-lock.json
generated
356
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -9,9 +9,10 @@
|
|||||||
"astro": "astro"
|
"astro": "astro"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/node": "^9.2.1",
|
"@astrojs/node": "^9.2.2",
|
||||||
"@auth/core": "^0.39.0",
|
"@auth/core": "^0.37.3",
|
||||||
"astro": "^5.7.12",
|
"astro": "^5.9.2",
|
||||||
"auth-astro": "^4.2.0"
|
"auth-astro": "^4.2.0",
|
||||||
|
"xlsx": "^0.18.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
62
src/api/index.ts
Normal file
62
src/api/index.ts
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
import { Auth } from '@auth/core'
|
||||||
|
import type { AuthAction, Session } from '@auth/core/types'
|
||||||
|
import authConfig from 'auth:config'
|
||||||
|
import * as fs from 'fs';
|
||||||
|
//import { read, readFile } from "xlsx";
|
||||||
|
|
||||||
|
import pkg from 'xlsx';
|
||||||
|
const {readFile, utils} = pkg;
|
||||||
|
|
||||||
|
export interface KarKarCarSession extends Session {
|
||||||
|
userData?: UserAmount | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetches the current session.
|
||||||
|
* @param req The request object.
|
||||||
|
* @returns The current session, or `null` if there is no session.
|
||||||
|
*/
|
||||||
|
export async function getUser(req: Request, options = authConfig): Promise<KarKarCarSession | null> {
|
||||||
|
// @ts-ignore
|
||||||
|
options.secret ??= import.meta.env.AUTH_SECRET
|
||||||
|
options.trustHost ??= true
|
||||||
|
|
||||||
|
const url = new URL(`${options.prefix}/session`, req.url)
|
||||||
|
const response = await Auth(new Request(url, { headers: req.headers }), options)
|
||||||
|
const { status = 200 } = response
|
||||||
|
|
||||||
|
const data = await response.json()
|
||||||
|
console.log("data", data)
|
||||||
|
if(data != null)
|
||||||
|
data.userData = await getUserAmount(data.user.email)
|
||||||
|
|
||||||
|
if (!data || !Object.keys(data).length) return null
|
||||||
|
if (status === 200) return data
|
||||||
|
throw new Error(data.message)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export interface UserAmount {
|
||||||
|
amount?: String | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getUserAmount(email: String | null | undefined): Promise<UserAmount | null> {
|
||||||
|
|
||||||
|
const file = readFile("./example-data/saldos.xlsx");
|
||||||
|
let data = []
|
||||||
|
|
||||||
|
const sheets = file.SheetNames
|
||||||
|
|
||||||
|
for(let i = 0; i < sheets.length; i++)
|
||||||
|
{
|
||||||
|
const temp = utils.sheet_to_json(
|
||||||
|
file.Sheets[file.SheetNames[i]])
|
||||||
|
temp.forEach((res) => {
|
||||||
|
data.push(res)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
let userData = data.filter(data => data.Email == email)
|
||||||
|
console.log(userData)
|
||||||
|
|
||||||
|
return {amount:userData[0]['Saldo Actual']};
|
||||||
|
}
|
||||||
19
src/components/KarKarCarAuth.astro
Normal file
19
src/components/KarKarCarAuth.astro
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
import type { KarKarCarSession } from "../api/index.ts"
|
||||||
|
import { getUser } from "../api/index"
|
||||||
|
|
||||||
|
import type FullAuthConfig from 'auth-astro'
|
||||||
|
import config from 'auth:config'
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
authConfig?: typeof config
|
||||||
|
}
|
||||||
|
|
||||||
|
const { authConfig = config } = Astro.props as Props
|
||||||
|
|
||||||
|
let session = await getUser(Astro.request, authConfig)
|
||||||
|
---
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<Fragment set:html={Astro.slots.render('default', [session])} />
|
||||||
|
</div>
|
||||||
@@ -4,13 +4,18 @@ import type { Session } from '@auth/core/types';
|
|||||||
|
|
||||||
import { getSession } from 'auth-astro/server';
|
import { getSession } from 'auth-astro/server';
|
||||||
import { Auth, SignIn, SignOut } from 'auth-astro/components';
|
import { Auth, SignIn, SignOut } from 'auth-astro/components';
|
||||||
|
import KarKarCarAuth from "../components/KarKarCarAuth.astro"
|
||||||
|
// 1. Import any dependencies (Full support for JavaScript/TypeScript)
|
||||||
|
|
||||||
|
import type { KarKarCarSession } from "../api/index.ts"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const session = await getSession(Astro.request);
|
|
||||||
console.log(session);
|
|
||||||
---
|
---
|
||||||
<Auth>
|
<KarKarCarAuth>
|
||||||
{(session: Session) => (
|
{(session: KarKarCarSession) => (
|
||||||
console.log(session),
|
|
||||||
<>
|
<>
|
||||||
{session ?
|
{session ?
|
||||||
<SignOut>Logout</SignOut>
|
<SignOut>Logout</SignOut>
|
||||||
@@ -18,8 +23,11 @@ console.log(session);
|
|||||||
<SignIn provider="keycloak">Login</SignIn>
|
<SignIn provider="keycloak">Login</SignIn>
|
||||||
}
|
}
|
||||||
<p>
|
<p>
|
||||||
|
|
||||||
{session ? `Logged in as ${session.user?.name}` : 'Not logged in'}
|
{session ? `Logged in as ${session.user?.name}` : 'Not logged in'}
|
||||||
|
{session ? `Amount ${session.userData.amount}` : 'Not logged in'}
|
||||||
|
|
||||||
</p>
|
</p>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</Auth>
|
</KarKarCarAuth>
|
||||||
Reference in New Issue
Block a user