Giter VIP home page Giter VIP logo

leya's Introduction

Leya 3.0.0

Formerly "Improv3d API"

Gitter chat

About

Leya is an api that enables the work with MySQL databases in autohotkey, without exposing server credentials to the client. This is done by running the api on a php server, between the client and the database.

In addition to that, you get a powerful authentification & permission system.

You don´t need to write any SQL queries, leya gives you a collection of commands to access and alter the database, and builds the queries for you.

Installation

  • Open config.php, fill in your server data and adjust permissions.
  • Upload the leya.php and config.php files.

Api Response

data

The api responds with an object containing your data and metadata. When requesting an array of rows, with methods like getWhere, the results are put into an array with the name of the database.

error

When the __error value is empty or 0, no error occurred, while executing the function.

affectedRows

The amount of rows, that got affected by the function.

example

Let's say you executed the get method and requested "username" and "role". Your response is going to look like this:

{
  data {
    username
    role
  }
  error
  affectedRows
}
#include leya.ahk

leya.server := "http://my-server.com/leya.php"

req := leya.get("users", "playerA", "first_name, last_name")

player := req.data

if req.error
  msgbox % req.error
else
  msgbox The fullname of playerA is %player.first_name% %player.last_name%.
#include leya.ahk

leya.server := "http://my-server.com/leya.php"

req := leya.getWhere("users", "*", "age", ">=", "18")

if req.error
  msgbox % req.error
else {
  msgbox Found %req.affectedRows% users over 18.
  if req.users {
    ; loop over all users, over the age of 18
    for index, user in req.data.users {
        msgbox % user.first_name " " user.last_name
    }
  }
}

Methods

Database

Basic

Rows

  • createRow(table, row)
  • deleteRow(table, row)
  • listRows(table)
  • countRows(table)
  • rowExist(table, row)

Columns

  • listColumns(table)
  • addColumn(table, column)
  • deleteColumn(table, column)
  • renameColumn(table, column, value)
  • setColumn(table, column, type, length)

Table

  • createTable(table, columns)
  • deleteTable(table)
  • tableExist(table)
  • checkTable(table)
  • exec(query)

File

  • fileWrite(file, content, mode)
  • fileRead(file)
  • fileDelete(file)
  • fileRename(file, name)
  • fileExists(file)
  • fileCopy(file, destination)
  • fileSize(file, unit)

Misc

  • hash(content, algorithm)
  • mail(reciever, message, subject)
  • generateKey()
  • join(array, seperator)

Properties

  • leya.server
  • leya.key
  • leya.debug

Examples

#include leya.ahk

leya.server := "http://my-server.com/leya.php"

player := leya.get("users", "playerA", "level")
msgbox PlayerA is on Level %player.level%
#include leya.ahk

leya.server := "http://my-server.com/leya.php"

; get an array with the names of users, where "level" is greater than 3
pros := leya.getWhere("users", "name", "level", ">", 3)

; turn the array into a comma seperated string
list := leya.join(pros, ", ")

msgbox %list% are over level 3.
#include leya.ahk

leya.server := "http://my-server.com/leya.php"

player := leya.get("users", "improv3d", "*")

msgbox % "Name: " player.name " Level: " player.level

Security

If you share your application with others, they could figure out the url to your server and use the api against you. Depending on your configuration, they could read anything from the database, modify data or even delete all tables.

Don´t worry, the api has functions, to prevent this.

You should always use Authentication-Keys, so someone without a key, can´t access the api. When you´re working with multiple users, assign individual keys for every user, so you could easily block someone, or limit their permissions.

Only give users the permissions they need.

Don't hardcode keys in your application. Import them from a txt file or let users enter them.

FileRead, userkey, %A_ScriptDir%/apikey

leya.key := userkey

leya's People

Contributors

kevgk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

leya's Issues

Installer gute/schlechte Idee?

Hey,

Mir ist so ne Idee in den Kopf gekommen.
Wie wärs mit einer kleinen Installer-Seite(install.php), wo man vor dem Benutzen Rechte, MySQL-Daten etc. angeben muss. Dadurch wäre es für den User einfach. Außerdem könnte man z.B testen ob die MySQL-Daten stimmen.

Die Installer-Seite würde dann nach Abschluss eine config.php generieren und sich selbst löschen.

Wie findest du die Idee?

imp_count Problem

imp_count_rows gibt mir leider kein Wert raus.
Und imp_count_columns ist anscheinend nicht implementiert, ein Statusupdate diesbezüglich wäre super 👍

leya.countrows Fehler beim auslesen ?

Ich bekomme bei dem Befehl leya.countrows("Mitarbeiter") leider nur <!--response=""1""--> zurück...
Habe mir jetzt mit
Anzahl_Rows := leya.listRows("Mitarbeiter")
Anzahl_Rows := Anzahl_Rows.__affectedRows
beholfen. Aber des Rätsels Lösung kann da ja nicht sein ;)

Schreibweise von CreateTable

Hey.

leider bekomme ich (egal wie ich ihn formatiere) beim Befehl leya.createTable entweder ein -4 (was an der rechte-vergabe liegt) nach dem Umstellen bekomme ich aber immer eine 0 als _error und es wird keine Tabelle bestellt.

Kannst du mir sagen, wie ich den Befehl formatieren muss (am besten direkt mit mehreren Spalten beim erstellen ;)

Error mit leya.get

Hey. (grade gelesen, dass man hier deutsch schreiben kann :D Macht das Problem erklären wesentlich einfacher ^^)

Folgender Code läuft leider nicht so rund wie gewollt...
test_ := leya.get("Kunden","test","Firma")
msgbox % test.__error
msgbox % "The fullname of playerA is " . test.__affectedRows
msgbox % test

Raus bekomme ich
__error : 0
__affectedRows : 1
test : (Leer)

#include leya.ahk ist drin und das erstellen von Zeilen und das setzen von Werten funktioniert einwandfrei...
Könntest du dir das mal anschauen ?

lg Michelle
PS: Hast du eventuell noch eine Kopie oder so von dem alten Wiki ? Da könnte man dann ja die Befehle rausziehen ;)

listRows keine Rückmeldung im Debug

Beim Command leya.listRows bekomme ich nur  im Debug als Rückmeldung. Daten wurden beim V3 Update nicht verändert. (Andere MYSQL Einträge können ausgelesen werden.

leya.get Result Abfrage

huhu,

ist es gewollt, dass man bei der leya.get abfrage immernoch den Wert der Zeile hinzufügen muss?
also z.B.
Readout := leya.get("Mitarbeiter","Max.Mustermann","Vorname")
Mitarbeitervorname_Readout := Readout.Vorname

Wäre es nicht sinnvoller, dass man den Wert direkt unter der angegebenen Variable (in diesem Fall Readout) abspeichert ? (Am besten dann natürlich direkt die Endvar (Mitarbeitervorname_Readout)

lg (PS: Hoffe es ist okey, wenn ich bei Fragen immer ein neues Issue aufmache ^^ oder soll ich das woanders posten ?)

Update hash Algorithmus

Hey.

MD5 ist leider nicht mehr so wirklich sicher... Wäre es Möglich, den Algorithmus zu einem moderneren upzugraden ? :)
lg Michelle

RowExistUser Problem beim Auslesen

Benutzername_Eingabe = Max.Mustermann
RowExistUser := leya.rowExist("Mitarbeiter", Benutzername_Eingabe)
RowExistUser1 := RowExistUser.Data
msgbox % RoxExistUser

Bekomme hier die Rückmeldung im Debug <!--response="{"data":1,"error":0,"affectedRows":1}"-->
Mache ich beim auslesen irgendwas falsch ?

getwhere (Value) nur mit Zahlen ?

Offenbar kann das Befehl getwhere nur mit Zahlen arbeiten.
Ich habe versucht, das ganze mit Wörtern zu verwenden, bekomme aber immer nur die Rückmeldung <!--response="{"__error":-2,"__affectedRows":-1}"--> im Debug.
Bei Zahlen bekomme ich eine Rückmeldung. Aber der Parameter "=" kann ja auch einfach nur den Wert vergleichen oder ?

andere Spalte als Index auslesen?

Gibt es die Möglichkeit, eine andere Spalte als die Index auszulesen ?
z.B. readout := leya.getwhere("Tabelle1","Firma","Wertx","=","*")
Readout := Readout.Data.Firma

um z.b. alle Firmen in der Tabelle aufgelistet zu bekommen?
Danach kann man dann ja
readout := leya.getwhere("Tabelle1","Nummer","Firma","=",Readout)

Frage zu "getwhere"

Das Schreiben vom Befehl bekomme ich so hin. Probleme macht mir aktuell nur das Auslesen..
Script: Kunden_Liste_Readout := leya.listRows(TabelleReadout) ; Reads out of MYSQL
Rückmeldung Debug: <!--response="{"data":["Wert1","Wert2","Wert3"],"error":0,"affectedRows":3}"-->
Da ist ja klar, dass man dann Kunden_Liste_Readout.Data[1] den entsprechenden Wert bekommt.

Aber wie ist das bei getwhere ?
leya.getwhere("Help","HelpPunkt","Helpkategorie","=",BenutzerWahlHelpDDL) (BenutzerWahlHelpDDL ist z.B. Login oder Programm)
Rückmeldung Debug: <!--response="{"data":[{"HelpPunkt":"test"},{"HelpPunkt":"test2"}],"error":0,"affectedRows":2}"-->

Leider bekomme ich mit Readout.Data.HelpPunkt[1] noch ohne das HelpPunkt (Readout.Data[1]) die Werte ausgelesen... wo liegt mein Fehler ?

Fehler Auslesen MYSQL

Hi. Der Fehler mit dem auslesen der MYSQL ist wieder aufgetreten. ich versuche das ganze mal so gut es geht zu rekonstruieren:
ListHelpKategorie1 := leya.listrows("HelpKategorien") (Meine letzte Scriptzeile)

062: query := "?action=list_rows&table=" table
063: Return,this._queryJSON(query)
162: response := this._URLDownloadToVar(this.server a "&key=" this.key)
182: obj := ComObjCreate("WinHttp.WinHttpRequest.5.1")
183: obj.Option(4) := 0x0100 + 0x0200 + 0x1000 + 0x2000
184: obj.Open("GET", url)
185: obj.Send() (6.95)

GnYWvj9myn
SciTE_aM8Dp1hCZS
Zwischen den beiden Fehlermeldungen kam keine neue Script-Zeile hinzu.

Wenn man beide Meldnungen mit "Ja" bestätigt, bekommt man eine leere (in diesem Fall) DDL und im Debug: <!--response="{"data":null,"error":0,"affectedRows":0}"-->
Sobald man das Fenster neu öffnet und quasi den MYSQL Befehl nochmal ausführt, bekommt man das gewünschte Ergebnis.

GetWhere mit einem Eintrag

moin,
ist ja schon was her seit meinem letzten Issue-Report. Nutze das System immer noch super aktiv :)
Mir ist grade was aufgefallen (könnte vll an dem alter des Systems liegen :D)

Mit der Funktion leya.getwhere bekommt man keine Ausgabe wenn die ID nur einmal vorkommt.

Meine Tabelle ist so formatiert
Number,ID,Name
wobei Number eine fortlaufende Nummer ist da es vorkommen kann, dass ID's doppelt vorkommen.

Wenn ich jetzt mit Readout_number := leya.get("ID","Number","ID","=","5060337500401") versuche die ID auszulesen bekomme ich im Debug die Rückmeldung  und wenn ich die ID nochmal manuell einfüge <!--response="{"data":[{"Number":"1"},{"Number":"3"}],"error":0,"affectedRows":2}"-->

lg Michelle :)

leya.Mail mit Leerzeile

Hi.
( ~ = ´ da github es sonst nicht zulässt :D )
Früher (imp.mail) konnte man ein ~n einfügen und dadurch eine Leerzeile einfügen.
Mit einem "test" . ~n . "test" gehts leider nicht. Mit "test ~n test" leider auch nicht...
Ist das Feature noch implementiert ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.