/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 6 . ĠĊ Ġ* Ċ Ġ* ĠThis Ġfile Ġis Ġpart Ġof ĠProcess Manager . Ċ Ġ* Ċ Ġ* ĠProcess Manager Ġis Ġfree Ġsoftware : Ġyou Ġcan Ġredistribute Ġit Ġand / or Ġmodify Ġit Ġunder Ġthe Ġterms Ġof Ġversion Ġ 3 Ġof Ġthe ĠĊ Ġ* ĠGNU ĠLesser ĠGeneral ĠPublic ĠLicense Ġas Ġpublished Ġby Ġthe ĠFree ĠSoftware ĠFoundation . Ċ Ġ* Ċ Ġ* ĠProcess Manager Ġis Ġdistributed Ġin Ġthe Ġhope Ġthat Ġit Ġwill Ġbe Ġuseful , Ġbut ĠWITHOUT ĠANY ĠWARRANTY ; Ġwithout Ġeven Ċ Ġ* Ġthe Ġimplied Ġwarranty Ġof ĠMERCHANTABILITY Ġor ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . Ġ ĠSee Ġthe ĠĊ Ġ* ĠGNU ĠLesser ĠGeneral ĠPublic ĠLicense Ġfor Ġmore Ġdetails . Ċ Ġ* Ċ Ġ* ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe ĠGNU ĠLesser ĠGeneral ĠPublic ĠLicense Ġalong Ġwith ĠProcess Manager . Ġ ĠIf Ġnot , Ċ Ġ* Ġsee Ġ< http :// www . gnu . org / licenses />. Ċ Ġ*/ Ċ Ċ package Ġio . github . pd v rie ze . kotlin sql . test . helpers Ċ Ċ import Ġio . github . pd v rie ze . jdbc . recorder . actions . String Action Ċ import Ġio . github . pd v rie ze . kotlin sql . ddl . Database Ċ import Ġio . github . pd v rie ze . kotlin sql . ddl . Mutable Table Ċ import Ġio . github . pd v rie ze . kotlin sql . ddl . columns . Length Char Column Ċ import Ġio . github . pd v rie ze . kotlin sql . ddl . columns . Length Char ColumnType ĊĊ Ċ /** Ċ Ġ* ĠCode Ġdefinition Ġof Ġthe Ġweb auth Ġdatabase . Ċ Ġ*/ Ċ Ċ const Ġval ĠEX TR AC ON F Ġ= Ġ" ENGINE = InnoDB ĠCHARSET = utf 8 " Ċ Ċ object ĠWeb Auth DB Ġ: ĠDatabase ( 1 ) Ġ{ ĊĊĠĠĠ Ġobject Ġusers Ġ: ĠMutable Table ( EX TR AC ON F ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġby ĠVARCHAR (" user ", Ġ 3 0 ) Ġ{ ĠNOT _ NULL ; ĠBINARY Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfullname Ġby ĠVARCHAR (" fullname ", Ġ 8 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġalias Ġby ĠVARCHAR (" alias ", Ġ 8 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġby ĠVARCHAR (" password ", Ġ 4 0 ) Ġ{ ĠBINARY Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġreset token Ġby ĠVARCHAR (" reset token ", Ġ 2 0 ) Ġ{ ĠBINARY Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġreset time Ġby ĠDAT ETIME (" reset time ") ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPRIMARY _ KEY ( user ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject Ġroles Ġ: ĠMutable Table ( EX TR AC ON F ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrole Ġby ĠVARCHAR (" role ", Ġ 3 0 ) Ġ{ ĠNOT _ NULL Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdescription Ġby ĠVARCHAR (" description ", Ġ 1 2 0 ) Ġ{ ĠNOT _ NULL Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPRIMARY _ KEY ( role ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject Ġuser _ roles Ġ: ĠMutable Table ( EX TR AC ON F ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġby ĠVARCHAR (" user ", Ġ 3 0 ) Ġ{ ĠNOT _ NULL ; ĠBINARY Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrole Ġby ĠVARCHAR (" role ", Ġ 3 0 ) Ġ{ ĠNOT _ NULL Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPRIMARY _ KEY ( user , Ġrole ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFOREIGN _ KEY ( user ). REFER ENCES ( users . user ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFOREIGN _ KEY ( role ). REFER ENCES ( roles . role ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject Ġtokens Ġ: ĠMutable Table ( EX TR AC ON F ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtoken id Ġby ĠINT (" token id ") Ġ{ ĠNOT _ NULL ; ĠAUTO _ INCREMENT Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġby Ġreference ( users . user ) Ġ{ ĠNOT _ NULL ; ĠBINARY Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġip Ġby ĠVARCHAR (" ip ", Ġ 4 5 ) Ġ{ ĠNOT _ NULL Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġkey id Ġby Ġreference ( pub keys . key id ) ĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġby ĠVARCHAR (" token ", Ġ 4 5 ) Ġ{ ĠNOT _ NULL ; ĠBINARY Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġepoch Ġby ĠBIGINT (" epoch ") Ġ{ ĠNOT _ NULL Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPRIMARY _ KEY ( token id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFOREIGN _ KEY ( user ). REFER ENCES ( users . user ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFOREIGN _ KEY ( key id ). REFER ENCES ( pub keys . key id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject Ġapp _ perms Ġ: ĠMutable Table ( EX TR AC ON F ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġby Ġreference ( users . user ) Ġ{ ĠNOT _ NULL ; ĠBINARY Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġapp Ġby ĠVARCHAR (" app ", Ġ 5 0 ) Ġ{ ĠNOT _ NULL Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPRIMARY _ KEY ( user , Ġapp ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFOREIGN _ KEY ( user ). REFER ENCES ( users . user ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject Ġpub keys Ġ: ĠMutable Table ( EX TR AC ON F ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey id Ġby ĠINT (" key id ") Ġ{ ĠNOT _ NULL ; ĠAUTO _ INCREMENT Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġby Ġreference ( users . user ) Ġ{ ĠNOT _ NULL ; ĠBINARY Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġapp name Ġby ĠVARCHAR (" app name ", Ġ 8 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġpub key Ġby ĠMED IUM TEXT (" pubkey ") Ġ{ ĠBINARY ; ĠNOT _ NULL Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlast Use Ġby ĠBIGINT (" last Use ") ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPRIMARY _ KEY ( key id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFOREIGN _ KEY ( user ). REFER ENCES ( users . user ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject Ġchallenges Ġ: ĠMutable Table ( EX TR AC ON F ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey id Ġby Ġreference ( pub keys . key id ) Ġ{ ĠNOT _ NULL Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġchallenge Ġby ĠVARCHAR (" challenge ", Ġ 1 0 0 ) Ġ{ ĠNOT _ NULL ; ĠBINARY Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġrequest ip Ġby ĠVARCHAR (" request ip ", Ġ 4 5 ) Ġ{ ĠNOT _ NULL Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġepoch Ġby ĠBIGINT (" epoch ") ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPRIMARY _ KEY ( key id , Ġrequest ip ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFOREIGN _ KEY ( key id ). REFER ENCES ( pub keys . key id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ object ĠTest Actions Ġ{ ĊĊĠĠĠ Ġval ĠCREATE _ USERS Ġ= ĠString Action (""" | Recording PreparedStatement (" CREATE ĠTABLE Ġ` users ` Ġ( ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` user ` ĠVARCHAR ( 3 0 ) ĠBINARY ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` fullname ` ĠVARCHAR ( 8 0 ), ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` alias ` ĠVARCHAR ( 8 0 ), ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` password ` ĠVARCHAR ( 4 0 ) ĠBINARY , ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` reset token ` ĠVARCHAR ( 2 0 ) ĠBINARY , ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` reset time ` ĠDAT ETIME , ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠPRIMARY ĠKEY Ġ(` user `) ĊĠĠĠĠĠĠĠ Ġ| ) ĠENGINE = InnoDB ĠCHARSET = utf 8 ; "). execute () Ġ-> Ġtrue """. trim Margin ()) ĊĊĠĠĠ Ġval ĠCREATE _ USER _ RO LES Ġ= ĠString Action (""" | Recording PreparedStatement (" CREATE ĠTABLE Ġ` user _ roles ` Ġ( ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` user ` ĠVARCHAR ( 3 0 ) ĠBINARY ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` role ` ĠVARCHAR ( 3 0 ) ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠPRIMARY ĠKEY Ġ(` user `, Ġ` role `), ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠFOREIGN ĠKEY Ġ(` user `) ĠREFERENCES Ġusers Ġ(` user `), ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠFOREIGN ĠKEY Ġ(` role `) ĠREFERENCES Ġroles Ġ(` role `) ĊĠĠĠĠĠĠĠ Ġ| ) ĠENGINE = InnoDB ĠCHARSET = utf 8 ; "). execute () Ġ-> Ġtrue """. trim Margin ()) ĊĊĠĠĠ Ġval ĠCREATE _ PUB KEYS Ġ= ĠString Action (""" | Recording PreparedStatement (" CREATE ĠTABLE Ġ` pub keys ` Ġ( ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` key id ` ĠINT ĠNOT ĠNULL ĠAUTO _ INCREMENT , ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` user ` ĠVARCHAR ( 3 0 ) ĠBINARY ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` app name ` ĠVARCHAR ( 8 0 ), ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` pubkey ` ĠMED IUM TEXT ĠBINARY ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` last Use ` ĠBIGINT , ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠPRIMARY ĠKEY Ġ(` key id `), ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠFOREIGN ĠKEY Ġ(` user `) ĠREFERENCES Ġusers Ġ(` user `) ĊĠĠĠĠĠĠĠ Ġ| ) ĠENGINE = InnoDB ĠCHARSET = utf 8 ; "). execute () Ġ-> Ġtrue """. trim Margin ()) ĊĊĠĠĠ Ġval ĠCREATE _ TOKEN S Ġ= ĠString Action (""" | Recording PreparedStatement (" CREATE ĠTABLE Ġ` tokens ` Ġ( ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` token id ` ĠINT ĠNOT ĠNULL ĠAUTO _ INCREMENT , ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` user ` ĠVARCHAR ( 3 0 ) ĠBINARY ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` ip ` ĠVARCHAR ( 4 5 ) ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` key id ` ĠINT , ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` token ` ĠVARCHAR ( 4 5 ) ĠBINARY ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` epoch ` ĠBIGINT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠPRIMARY ĠKEY Ġ(` token id `), ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠFOREIGN ĠKEY Ġ(` user `) ĠREFERENCES Ġusers Ġ(` user `), ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠFOREIGN ĠKEY Ġ(` key id `) ĠREFERENCES Ġpub keys Ġ(` key id `) ĊĠĠĠĠĠĠĠ Ġ| ) ĠENGINE = InnoDB ĠCHARSET = utf 8 ; "). execute () Ġ-> Ġtrue """. trim Margin ()) ĊĊĠĠĠ Ġval ĠCREATE _ APP _ PER MS Ġ= ĠString Action (""" | Recording PreparedStatement (" CREATE ĠTABLE Ġ` app _ perms ` Ġ( ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` user ` ĠVARCHAR ( 3 0 ) ĠBINARY ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` app ` ĠVARCHAR ( 5 0 ) ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠPRIMARY ĠKEY Ġ(` user `, Ġ` app `), ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠFOREIGN ĠKEY Ġ(` user `) ĠREFERENCES Ġusers Ġ(` user `) ĊĠĠĠĠĠĠĠ Ġ| ) ĠENGINE = InnoDB ĠCHARSET = utf 8 ; "). execute () Ġ-> Ġtrue """. trim Margin ()) ĊĊĠĠĠ Ġval ĠCREATE _ CH ALL EN GES Ġ= ĠString Action (""" | Recording PreparedStatement (" CREATE ĠTABLE Ġ` challenges ` Ġ( ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` key id ` ĠINT ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` challenge ` ĠVARCHAR ( 1 0 0 ) ĠBINARY ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` request ip ` ĠVARCHAR ( 4 5 ) ĠNOT ĠNULL , ĊĠĠĠĠĠĠĠ Ġ| Ġ Ġ` epoch ` ĠBIGINT , ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠPRIMARY ĠKEY Ġ(` key id `, Ġ` request ip `), ĊĠĠĠĠĠĠĠ Ġ| Ġ ĠFOREIGN ĠKEY Ġ(` key id `) ĠREFERENCES Ġpub keys Ġ(` key id `) ĊĠĠĠĠĠĠĠ Ġ| ) ĠENGINE = InnoDB ĠCHARSET = utf 8 ; "). execute () Ġ-> Ġtrue """. trim Margin ()) Ċ }