/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 ĠDev J ake Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġme . salt . entities . permissions Ċ Ċ import Ġcom . fasterxml . jackson . annotation . JsonIgnore Ċ import Ġme . salt . entities . objects . Interaction Ċ Ċ /* Ċ Allow s Ġfor Ġa Ġpermission Ġto Ġstate Ġwhat Ġlevels Ġit Ġcan Ġonly Ġbe Ġused Ġon , Ċ and Ġtherefore Ġwhat Ġpermissions Ġwill Ġbe Ġrequired Ġto Ġwrite Ġit . Ċ Ċ For Ġexample , Ġa Ġpermission Ġmight Ġbe Ġdeclared Ġas Ġbeing Ġat Ġa Ġbot Ġlevel . Ċ This Ġmeans Ġthat Ġthose Ġlack ing Ġauthority Ġperms Ġat Ġthis Ġlevel Ġcannot Ġhave Ċ this Ġpermission . Ċ Ġ*/ Ċ object ĠAuthor ity Ġ{ ĊĠĠĠ Ġfun Ġbot ( interaction : ĠInteraction ) Ġ= ĠNode Authority ( Level . BOT , Ġinteraction ) ĊĠĠĠ Ġfun Ġguild ( interaction : ĠInteraction ) Ġ= ĠNode Authority ( Level . GU ILD , Ġinteraction ) ĊĠĠĠ Ġfun Ġchannel ( interaction : ĠInteraction ) Ġ= ĠNode Authority ( Level . CHANNEL , Ġinteraction ) ĊĠĠĠ Ġfun Ġnone () Ġ= ĠNode Authority ( Level . NONE , ĠInteraction . ALL ) ĊĊĠĠĠ Ġenum Ġclass ĠLevel Ġ{ ĊĠĠĠĠĠĠĠ ĠBOT , ĊĠĠĠĠĠĠĠ ĠGU ILD , ĊĠĠĠĠĠĠĠ ĠCHAN NEL , ĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ ĠUs able Ġat Ġall Ġlevels , Ġi . e ., Ġno Ġexplicit Ġlevel ; Ġno Ġperms Ġare Ġrequired Ġfor Ġthis Ġlevel , Ġbut Ġit Ġprovides Ġauthority Ġon ĠALL Ġlevels ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ ĠNONE ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠ ĠNot Ġpossible Ġto Ġensure Ġan Ġauthority Ġisn 't Ġdirectly Ġadded Ġstraight Ġto Ġthe Ġtext Ġfile , ĊĠĠĠ Ġbut , Ġthe Ġfile Ġcan Ġonly Ġbe Ġdirectly Ġedited Ġby Ġthose Ġwith Ġaccess Ġto Ġit . ĊĠĠĠ ĠIn Ġadmin Ġhosting , Ġonly Ġan Ġadmin Ġhas Ġaccess . ĊĊĠĠĠ ĠThis Ġalso Ġprovides Ġmore Ġflexibility Ġfor Ġself - host ers . ĊĊĠĠĠ ĠAs Ġa Ġresult Ġof Ġthis , Ġwe Ġcan Ġallow Ġgroups Ġto Ġalso Ġprovide ĠNode Authority Ġpermissions , Ġdue Ġto Ġbeing Ġa Ġsecure Ġfeature . ĊĠĠĠ Ġ*/ ĊĠĠĠ Ġ// TODO ĠAny Ġplans Ġto Ġallow Ġusers Ġto Ġdownload Ġand Ġupload Ġconfigs Ġshould Ġnote Ġdown ĠNode Author ities Ġbefore hand , ĊĠĠĠ Ġ// TODO Ġand Ġfail Ġchanges Ġwhere Ġthe ĠNode Author ities Ġchange . ĠThis Ġensures Ġthat ĠAuthor ity 's Ġare Ġonly Ġedited Ġthrough Ġcommands . ĊĊĠĠĠ Ġ// TODO Ġadd Ġthorough Ġunit Ġtesting Ġto Ġensure Ġsecurity Ġcannot Ġbe Ġbre ached ĊĊĠĠĠ Ġdata Ġclass ĠNode Authority ( val Ġlevels : ĠMutable List < Level >, Ġval Ġinteractions : ĠMutable List < Interaction >) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġadd Levels ( var arg Ġlevels : ĠLevel ) Ġ= Ġapply Ġ{ Ġthis . levels . addAll ( levels ) Ġ} ĊĠĠĠĠĠĠĠ Ġfun Ġadd Interactions ( var arg Ġinteractions : ĠInteraction ) Ġ= Ġapply Ġ{ Ġthis . inter actions . addAll ( inter actions ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġconstructor ( level : ĠLevel , Ġinteraction : ĠInteraction ) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis ( mutable ListOf ( level ), Ġmutable ListOf ( interaction )) ĊĊĠĠĠĠĠĠĠ Ġ@ JsonIgnore ĊĠĠĠĠĠĠĠ Ġfun Ġget Authority Nodes (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnodes Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . levels . forEach Ġ{ Ġlevel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . inter actions . forEach Ġ{ Ġinter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnodes . add (" salt . authority .${ level . name . toLowerCase ()}. ${ inter . name . toLowerCase () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnodes ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Node Authority ( levels =$ levels , Ġinteractions =$ inter actions ), Ġauthority Nodes =${ get Authority Nodes () }" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ }