web-interface.assets.1255d548-5831.f80a057b291c0327f16a.js.map Maven / Gradle / Ivy
{"version":3,"file":"1255d548-5831.f80a057b291c0327f16a.js","mappings":"wQA2BA,MAAMA,KAAY,WAAO,eAAa;AAAA;AAAA,EAIhCC,KAAe,WAAO,QAAM,EAAE,CAAC,CAAE,MAAAC,CAAM,OAAM;AAAA,iBAClCA,EAAM,MAAM,OAAO,UAAU;AAAA,eAC/BA,EAAM,MAAM,KAAK,UAAU;AAAA;AAAA;AAAA,aAG7BA,EAAM,OAAO,QAAQ,OAAO,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAU/BA,EAAM,OAAO,QAAQ,OAAO,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,WAK5C,MAAqBA,CAAK,CAAC;AAAA;AAAA;AAAA;AAAA,eAIpBA,EAAM,OAAO,OAAO,WAAW;AAAA;AAAA,WAEtC,MAAsBA,CAAK,CAAC;AAAA;AAAA;AAAA;AAAA,aAI1B,MAAsBA,CAAK,CAAC;AAAA;AAAA;AAAA;AAAA,CAIrC,EAEDD,EAAa,YAAc,SAyC3B,QAtBuB,CAAC,CAAE,MAAAE,CAAM,IAC9B,gBAACH,EAAA,KACEG,EAAM,IAAI,CAAC,CAAE,KAAAC,EAAM,MAAAC,EAAO,YAAAC,EAAa,eAAAC,CAAe,IAChDH,EAKH,gBAAC,KAAW,CAAC,YAAaE,GAAA,KAAAA,EAAe,CAAC,EAAG,IAAKF,CAAA,EAChD,gBAAC,IAAa,CAAC,GAAIA,EAAM,eAAgB,CAACG,CAAA,EACxC,gBAACN,EAAA,CAAa,QAAQ,QACpB,gBAAC,KAAqB,KACnBI,CACH,CACF,CACF,CACF,EAZO,IAcV,CACH,C,4FCnFF,MAAMG,EAAK,UAAO;AAAA;AAAA,EAIZC,KAAO,WAAO,OAAK;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBzB,EAVkB,CAAC,CAAE,MAAAC,CAAM,IACzB,gBAACF,EAAA,KACEE,EAAM,IAAKC,GACV,gBAACF,EAAA,CAAK,IAAKE,EAAM,QAASA,IAAS,QAAU,OAAS,WACnDA,CACH,CACD,EAAE,QAAQ,CACb,C,4FCvBF,MAAMC,EACJ,gBAAC,WAAQ,GAAG,yBACH,MAAM,sBACb,gBAAC,SAAE,gBAAC,cAAO,yBAAuB,CAAS,EAC3C,gBAAC,QAAK,CAAC,UAAS,IACd,gBAAC,aACC,gBAAC,UACC,gBAAC,UAAG,OAAK,EACT,gBAAC,UAAG,aAAW,CACjB,CACF,EACA,gBAAC,aACC,gBAAC,UACC,gBAAC,UAAG,WAAS,EACb,gBAAC,UAAG,yBAAuB,CAC7B,EACA,gBAAC,UACC,gBAAC,UAAG,UAAQ,EACZ,gBAAC,UAAG,2BAAyB,CAC/B,EACA,gBAAC,UACC,gBAAC,UAAG,OAAK,EACT,gBAAC,UAAG,kBAAgB,CACtB,CACF,CACF,EACA,gBAAC,SAAE,gBAAC,cAAO,UAAQ,CAAS,EAC5B,gBAAC,SAAE,kDAC8C,gBAAC,SAAG,EACnD,gBAAC,WAAI,mBAAiB,EAAM,gBAAC,SAAG,CAClC,CACF,EASF,EANwB,IACtB,gBAAC,KAAc,CAAC,QAAQ,QAAQ,UAAS,GAAC,UAAU,QAAQ,QAASA,CAAA,EACnE,gBAAC,SAAM,CAAC,QAAQ,QAAO,gBAAC,KAAI,CAAC,KAAK,iBAAkB,EAAE,CACxD,C,0GCvBF,QAb4B,IAAM,CAChC,MAAMC,EAAY,CAChB,CAAE,MAAO,iBAAkB,KAAM,KAAO,OAAO,MAAM,SAAU,YAAa,YAAa,EACzF,CAAE,MAAO,iBAAkB,KAAM,KAAO,eAAe,cAAc,EAAG,YAAa,YAAa,CACpG,EAEA,OACE,gBAAC,MAAG,KACF,gBAAC,IAAc,CAAC,MAAOA,CAAA,CAAW,CACpC,CAEJ,C,4ECbA,MAAMC,KAAS,KAAgB,CAC7B,OAAQ,IAAa,OACrB,QAAUC,IAAU,CAClB,QAAS,SAASA,GAAA,YAAAA,EAAM,UAAU,IAAIA,GAAA,YAAAA,EAAM,SAAS,4BACvD,GACA,MAAO,CAACC,EAAOD,KAAU,CACvB,QAAS,kBAAkBA,GAAA,YAAAA,EAAM,UAAU,IAAIA,GAAA,YAAAA,EAAM,SAAS,yBAAyBC,CAAK,EAC9F,EACF,CAAC,EAEKC,KAAO,KAAgB,CAC3B,OAAQ,IAAa,KACrB,MAAO,CAACD,EAAOE,KAAY,CACzB,QAAS,yBAAyBA,CAAM,yBAAyBF,CAAK,EACxE,GACA,iBAAkB,EACpB,CAAC,EAEKG,KAAiB,KAAgB,CACrC,OAAQ,IAAa,eACrB,MAAO,CAACH,EAAOI,KAAc,CAC3B,QAAS,+BAA+BA,CAAQ,yBAAyBJ,CAAK,EAChF,GACA,iBAAkB,EACpB,CAAC,EAEKK,KAAS,KAAgB,CAC7B,OAAQ,IAAa,OACrB,QAAS,CAACC,EAASC,EAAUC,KAAc,CACzC,QAAS,SAASA,CAAQ,4BAC5B,GACA,MAAO,CAACR,EAAOM,EAASC,EAAUC,KAAc,CAC9C,QAAS,kBAAkBA,CAAQ,yBAAyBR,CAAK,EACnE,EACF,CAAC,EAEKS,KAAe,KAAgB,CACnC,OAAQ,IAAa,OACrB,QAAS,CAACH,EAASE,KAAc,CAC/B,QAAS,SAASA,CAAQ,4BAC5B,GACA,MAAO,CAACR,EAAOM,EAASE,KAAc,CACpC,QAAS,kBAAkBA,CAAQ,yBAAyBR,CAAK,EACnE,EACF,CAAC,EAEKU,KAAiB,KAAgB,CACrC,OAAQ,IAAa,eACrB,QAAS,KAAO,CACd,QAAS,oCACX,GACA,MAAO,CAACV,EAAOE,KAAY,CACzB,QAAS,uCAAuCA,CAAM,yBAAyBF,CAAK,EACtF,EACF,CAAC,EAEKW,KAAc,KAAgB,CAClC,OAAQ,IAAa,YACrB,QAAS,CAACL,EAASM,KAAe,CAChC,QAAS,UAAUA,CAAS,wBAC9B,GACA,MAAO,CAACZ,EAAOE,EAAQU,KAAe,CACpC,QAAS,mBAAmBA,CAAS,uBAAuBV,CAAM,yBAAyBF,CAAK,EAClG,EACF,CAAC,EAEKa,KAAa,KAAgB,CACjC,OAAQ,IAAa,WACrB,MAAO,CAACb,EAAOE,KAAY,CACzB,QAAS,oCAAoCA,CAAM,yBAAyBF,CAAK,EACnF,EACF,CAAC,EAEKc,KAAc,KAAgB,CAClC,OAAQ,IAAa,YACrB,QAAS,CAACR,EAASS,EAAUH,KAAe,CAC1C,QAAS,UAAUA,CAAS,wBAC9B,GACA,MAAO,CAACZ,EAAOE,EAAQa,EAAUH,KAAe,CAC9C,QAAS,mBAAmBA,CAAS,uBAAuBV,CAAM,yBAAyBF,CAAK,EAClG,EACF,CAAC,EAEKgB,KAAY,KAAgB,CAChC,OAAQ,IAAa,UACrB,MAAQhB,IAAW,CACjB,QAAS,qCAAqCA,CAAK,EACrD,EACF,CAAC,EAEKiB,KAAqB,KAAgB,CACzC,OAAQ,IAAa,mBACrB,MAAQjB,IAAW,CACjB,QAAS,qCAAqCA,CAAK,EACrD,EACF,CAAC,EAEKkB,KAAY,KAAgB,CAChC,OAAQ,IAAa,UACrB,QAAS,CAAChB,EAAQiB,KAAmB,CACnC,QAAS,SAASjB,CAAM,gBAAgBiB,CAAa,EACvD,GACA,MAAO,CAACnB,EAAOE,EAAQiB,KAAmB,CACxC,QAAS,mBAAmBjB,CAAM,SAASiB,CAAa,wBAAwBnB,CAAK,EACvF,EACF,CAAC,EAED,EAAe,CACb,OAAAF,EACA,KAAAG,EACA,eAAAE,EACA,OAAAE,EACA,OAAQI,EACR,eAAAC,EACA,YAAAC,EACA,WAAAE,EACA,YAAAC,EACA,UAAAE,EACA,mBAAAC,EACA,UAAAC,CACF,C,qECnFe,MAAME,CAAa,CAGhC,YACEC,EACAjB,EACAI,EACAc,EACA5B,EACA6B,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAZ,EACA,CACA,KAAK,OAAS,CACZ,GAAAE,EACA,SAAAjB,EACA,SAAAI,EACA,MAAAc,EACA,MAAA5B,EACA,SAAA6B,EACA,SAAAC,EACA,cAAAC,EACA,cAAAC,EACA,aAAAC,EACA,QAAAC,EACA,cAAAC,EACA,eAAAC,EACA,mBAAAC,EACA,cAAAZ,CACF,CACF,CAEA,IAAI,IAAK,CACP,OAAO,KAAK,OAAO,EACrB,CAEA,IAAI,UAAW,CACb,OAAO,KAAK,OAAO,QACrB,CAEA,IAAI,MAAO,CACT,OAAO,KAAK,OAAO,QACrB,CAEA,IAAI,UAAW,CACb,OAAO,KAAK,OAAO,QACrB,CAEA,IAAI,aAAc,CAChB,OAAO,KAAK,OAAO,QACrB,CAEA,IAAI,OAAQ,CACV,OAAO,KAAK,OAAO,KACrB,CAEA,IAAI,OAAQ,CACV,OAAO,KAAK,OAAO,KACrB,CAEA,IAAI,UAAW,CACb,OAAO,KAAK,OAAO,QACrB,CAEA,IAAI,UAAW,CACb,OAAO,KAAK,OAAO,QACrB,CAEA,IAAI,eAAgB,CAClB,OAAO,KAAK,OAAO,aACrB,CAEA,IAAI,eAAgB,CAClB,OAAO,KAAK,OAAO,aACrB,CAEA,IAAI,cAAe,CACjB,OAAO,KAAK,OAAO,YACrB,CAEA,IAAI,SAAU,CACZ,OAAO,KAAK,OAAO,OACrB,CAEA,IAAI,eAAgB,CAClB,OAAO,KAAK,OAAO,aACrB,CAEA,IAAI,gBAAiB,CACnB,OAAO,KAAK,OAAO,cACrB,CAEA,IAAI,oBAAqB,CACvB,OAAO,KAAK,OAAO,kBACrB,CAEA,IAAI,eAAgB,CAClB,OAAO,KAAK,OAAO,aACrB,CAEA,WAAY,CACV,KAAM,CACJ,GAAAE,EACA,SAAAjB,EACA,SAAAI,EACA,MAAAc,EACA,MAAA5B,EACA,SAAA6B,EACA,SAAAC,EACA,cAAAC,EACA,cAAAC,EACA,aAAAC,EACA,QAAAC,EACA,cAAAC,EACA,eAAAC,EACA,mBAAAC,EACA,cAAAZ,CACF,EAAI,KAAK,OAGT,OAAO,IAAIa,EAAQ,MAAc,CAC/B,GAAAX,EACA,SAAAjB,EACA,SAAAI,EACA,MAAAc,EACA,MAAA5B,EACA,SAAA6B,EACA,SAAAC,EACA,cAAAC,EACA,cAAAC,EACA,aAAAC,EACA,QAAAC,EACA,cAAAC,EACA,eAAAC,EACA,mBAAAC,EACA,cAAAZ,CACF,CAAC,CAAC,CACJ,CAEA,OAAO,OACLE,EACAjB,EACAI,EACAc,EACA5B,EACA6B,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAZ,EACA,CACA,OAAO,IAAIC,EACTC,EACAjB,EACAI,EACAc,EACA5B,EACA6B,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAZ,CACF,CACF,CAEA,QAA2B,CACzB,KAAM,CACJ,GAAAE,EACA,SAAAjB,EACA,SAAAI,EACA,MAAAc,EACA,MAAA5B,EACA,SAAA6B,EACA,SAAAC,EACA,cAAAC,EACA,cAAAC,EACA,aAAAC,EACA,QAAAC,EACA,cAAAC,EACA,eAAAC,EACA,mBAAAC,EACA,cAAAZ,CACF,EAAI,KAAK,OAET,MAAO,CACL,GAAAE,EACA,SAAAjB,EACA,UAAWI,EACX,MAAAc,EACA,MAAO5B,EAAM,QAAQ,EACrB,UAAW6B,EACX,cAAeC,EACf,eAAgBC,EAChB,eAAgBC,EAChB,cAAeC,EACf,QAAAC,EACA,gBAAiBC,EACjB,iBAAkBC,EAClB,qBAAsBC,EACtB,eAAgBZ,CAClB,CACF,CAEA,OAAO,SAASc,EAAyB,CACvC,KAAM,CACJ,GAAAZ,EACA,SAAAjB,EACA,UAAWI,EACX,MAAAc,EACA,MAAA5B,EACA,UAAW6B,EACX,cAAeC,EACf,eAAgBC,EAChB,eAAgBC,EAChB,cAAeC,EACf,QAAAC,EACA,gBAAiBC,EACjB,iBAAkBC,EAClB,qBAAsBC,EACtB,eAAgBZ,CAClB,EAAIc,EAEJ,OAAOb,EAAa,OAAOC,EACzBjB,EACAI,EACAc,EACA,MAAc5B,CAAK,EACnB6B,GAAA,KAAAA,EAAY,GACZC,GAAA,KAAAA,EAAY,GACZC,GAAA,KAAAA,EAAiB,GACjBC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAZ,CAAa,CACjB,CAEA,OAAO,SAAmB,CAExB,OAAO,IAAIa,CACb,CACF,CAIA,MAAMA,CAAQ,CAGZ,YAAYC,EAAsB,MAAc,EAAG,CACjD,KAAK,MAAQA,CACf,CAEA,GAAGA,EAA2C,CAC5C,OAAO,IAAID,EAAQ,KAAK,MAAM,IAAI,KAAMC,CAAK,CAAC,CAChD,CAEA,SAASA,EAAiD,CACxD,OAAO,IAAID,EAAQ,KAAK,MAAM,IAAI,WAAYC,CAAK,CAAC,CACtD,CAEA,SAASA,EAAiD,CACxD,OAAO,IAAID,EAAQ,KAAK,MAAM,IAAI,WAAYC,CAAK,CAAC,CACtD,CAEA,MAAMA,EAA8C,CAClD,OAAO,IAAID,EAAQ,KAAK,MAAM,IAAI,QAASC,CAAK,CAAC,CACnD,CAEA,MAAMA,EAA8C,CAClD,OAAO,IAAID,EAAQ,KAAK,MAAM,IAAI,QAASC,CAAK,CAAC,CACnD,CAEA,SAASA,EAAiD,CACxD,OAAO,IAAID,EAAQ,KAAK,MAAM,IAAI,WAAYC,CAAK,CAAC,CACtD,CAEA,SAASA,EAAiD,CACxD,OAAO,IAAID,EAAQ,KAAK,MAAM,IAAI,WAAYC,CAAK,CAAC,CACtD,CAEA,cAAcA,EAAsD,CAClE,OAAO,IAAID,EAAQ,KAAK,MAAM,IAAI,gBAAiBC,CAAK,CAAC,CAC3D,CAEA,cAAcA,EAAsD,CAClE,OAAO,IAAID,EAAQ,KAAK,MAAM,IAAI,gBAAiBC,CAAK,CAAC,CAC3D,CAEA,aAAaA,EAAqD,CAChE,OAAO,IAAID,EAAQ,KAAK,MAAM,IAAI,eAAgBC,CAAK,CAAC,CAC1D,CAEA,QAAQA,EAAgD,CACtD,OAAO,IAAID,EAAQ,KAAK,MAAM,IAAI,UAAWC,CAAK,CAAC,CACrD,CAEA,cAAcA,EAAsD,CAClE,OAAO,IAAID,EAAQ,KAAK,MAAM,IAAI,gBAAiBC,CAAK,CAAC,CAC3D,CAEA,eAAeA,EAAuD,CACpE,OAAO,IAAID,EAAQ,KAAK,MAAM,IAAI,iBAAkBC,CAAK,CAAC,CAC5D,CAEA,mBAAmBA,EAA2D,CAC5E,OAAO,IAAID,EAAQ,KAAK,MAAM,IAAI,qBAAsBC,CAAK,CAAC,CAChE,CAEA,cAAcA,EAAsD,CAClE,OAAO,IAAID,EAAQ,KAAK,MAAM,IAAI,gBAAiBC,CAAK,CAAC,CAC3D,CAEA,OAAQ,CACN,KAAM,CACJ,GAAAZ,EACA,SAAAjB,EACA,SAAAI,EACA,MAAAc,EACA,MAAA5B,EACA,SAAA6B,EACA,SAAAC,EACA,cAAAC,EACA,cAAAC,EACA,aAAAC,EACA,QAAAC,EACA,cAAAC,EACA,eAAAC,EACA,mBAAAC,EACA,cAAAZ,CACF,EAAI,KAAK,MAAM,SAAS,EAExB,OAAO,IAAIC,EACTC,EACAjB,EACAI,EACAc,EACA5B,EACA6B,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAZ,CACF,CACF,CACF,C,0TCtYA,MAAMe,KAAiB,WAAO,eAAa;AAAA;AAAA;AAAA,EAKrCC,EAAmB,CAAC,CACxB,KAAM,CAAE,SAAA3B,EAAU,GAAAa,CAAG,EACrB,iBAAkBe,CACpB,IAIE,gBAAC,IAAa,CAAC,GAAIC,EAAA,GAAO,OAAO,MAAM,OAAO,KAAKhB,CAAE,GACnD,gBAACe,EAAA,CAAiB,GAAI,eAAef,CAAE,GACrB,OAAO,KACP,MAAO,uBAAuBb,CAAQ,IAAI,aAE5D,CACF,EAGI8B,EAAkB,CAAC,CAAE,KAAAvC,CAAK,IAA8B,CAC5D,MAAMwC,EACJ,gBAAC,UAAO,CAAC,GAAG,eAAc,sEAE1B,EAGF,OACE,gCACE,gBAAC,KAAc,CAAC,UAAU,OAAO,QAASA,CAAA,EACxC,gBAAC,SAAM,CAAC,OAAO,KAAK,QAAQ,OAAO,SAAQ,IAAC,aAAW,CACzD,EACA,gBAACJ,EAAA,CAAiB,KAAApC,EAAY,iBAAkB,QAAM,CAAE,CAC1D,CAEJ,EAEMyC,EAAc,CAAC,CAAE,KAAAzC,EAAM,KAAM,CAAE,SAAAK,EAAU,GAAAiB,EAAI,SAAAb,EAAU,cAAAW,EAAe,SAAAK,EAAU,SAAAD,CAAS,CAAE,IAE3F,CACJ,MAAMkB,KAAcC,EAAA,GAAe,EAC7BC,KAAgBC,EAAA,GAAiB,EACjC,CAAE,SAAAC,CAAS,KAAIC,EAAA,GAAY,EAE3BC,EAAgB,IAAM,CAC1B,GAAI5B,IAAkB,UAAW,CAC/BwB,EAAc,IAAqB,MAAM,cAAe,CACtD,gBAAc,MAAqBE,CAAQ,EAC3C,iBAAkB,mBACpB,CAAC,EAGG,OAAO,QAAQ,sCAAsCrC,CAAQ,4CAA4C,GAC3GwC,EAAA,EAAY,UAAU3B,EAAI,UAAU,EAGtC,MACF,CAEA2B,EAAA,EAAY,UAAU3B,EAAI,SAAS,EAEnCsB,EAAc,IAAqB,MAAM,aAAc,CACrD,gBAAc,MAAqBE,CAAQ,EAC3C,iBAAkB,kBACpB,CAAC,CACH,EAEMI,EAAc,IAAM,CACxBN,EAAc,IAAqB,MAAM,aAAc,CACrD,gBAAc,MAAqBE,CAAQ,EAC3C,iBAAkB,kBACpB,CAAC,EAGG,OAAO,QAAQ,qCAAqCrC,CAAQ,GAAG,GACjEwC,EAAA,EAAY,OAAO3B,EAAIb,CAAQ,CAEnC,EAEM0C,EAAoB,CAAC1B,GAAY,CAACD,IAAYkB,GAAA,YAAAA,EAAa,MAAOpB,EAExE,OACE,gCACE,gBAAC,KAAW,CAAC,YAAa,CAAC,cAAcjB,CAAQ,EAAE,GACjD,gBAAC,IAAa,CAAC,GAAIiC,EAAA,GAAO,OAAO,MAAM,KAAKhB,CAAE,GAC5C,gBAAC,SAAM,CAAC,GAAI,aAAaA,CAAE,GAAI,OAAO,KAAK,MAAO,aAAab,CAAQ,IAAI,MAE3E,CACF,CACF,EACA,gBAAC,iBAAc,CAAC,OAAO,KAAK,MAAM,eAAe,UAAS,GAAC,GAAI,eAAea,CAAE,IAC9E,gBAACc,EAAA,CAAiB,KAAApC,EAAY,iBAAkB,UAAQ,CAAE,EAC1D,gBAAC,KAAW,CAAC,YAAa,CAAC,cAAcK,CAAQ,EAAE,GAChD8C,GACC,gBAAC,YAAS,GAAI,mBAAmB7B,CAAE,GACzB,QAAS0B,EACT,MAAO,8BAA8BvC,CAAQ,IACpDW,IAAkB,UAAY,UAAY,QAC7C,EAEF,gBAAC,YAAS,GAAI,eAAeE,CAAE,GACrB,QAAQ,UACR,OAAO,KACP,MAAO,eAAeb,CAAQ,GAC9B,QAASyC,CAAA,EAAa,QAEhC,CACF,CACF,CACF,CAEJ,EAcA,EAZoB,CAAC,CAAE,KAAAlD,CAAK,IAC1B,gBAAC,UACC,gBAACmC,EAAA,KACEnC,EAAK,SACJ,gBAACuC,EAAA,CAAgB,KAAAvC,CAAA,CAAY,EAE7B,gBAACyC,EAAA,CAAY,KAAAzC,CAAA,CAAY,CAE7B,CACF,ECzIIoD,EAAU,UAAO,IAA0B,CAAC,CAAE,MAAAjE,EAAO,QAAAkE,CAAQ,OAAM;AAAA,WAC9DA,EAAUlE,EAAM,OAAO,QAAQ,QAAUA,EAAM,OAAO,QAAQ,OAAO;AAAA,CAC/E,EAQD,EANqB,CAAC,CAAE,OAAAmE,EAAQ,GAAGC,CAAK,IACtC,gBAACH,EAAA,CAAQ,QAASE,CAAA,EAChB,gBAAC,KAAI,CAAE,GAAGC,EAAM,KAAMD,EAAS,eAAiB,eAAgB,CAClE,ECII7D,EAAK,UAAO;AAAA;AAAA;AAAA;AAAA,EA6BlB,EAvBqB,CAAC,CAAE,aAAAmC,EAAc,cAAAF,EAAe,cAAAC,CAAc,IACjE,gBAAClC,EAAA,KACC,gBAAC,MAAe,QAAS,CAAC,QAAS,OAAO,EAC1B,UAAU,QACV,QACE,gBAAC,WAAQ,GAAG,wBACH,MAAOiC,EAAgB,YAAc,IAC3CA,EACC,gCACE,gBAAC,WAAI,kBAAgBE,EACjB,gBAAC,KAAY,CAAC,SAAUA,CAAA,CAAc,EAAK,GAC/C,EACA,gBAAC,WAAI,mBAAiBD,GAAA,KAAAA,EAAiB,GAAI,CAC7C,EACE,eACN,EAEF,UAAS,IACvB,gBAAC,EAAY,CAAC,OAAQD,CAAA,CAAe,CACvC,CACF,EC7BI,EAAU,UAAO,IAA2B,CAAC,CAAE,MAAAvC,EAAO,SAAAqE,CAAS,OAAM;AAAA,WAChEA,EAAWrE,EAAM,OAAO,QAAQ,QAAUA,EAAM,OAAO,QAAQ,OAAO;AAAA,CAChF,EAEK,EAAK,UAAO;AAAA;AAAA;AAAA,EAsBlB,EAjBmB,CAAC,CAAE,cAAAiC,EAAe,mBAAAY,CAAmB,IACtD,gBAAC,EAAE,KACD,gBAAC,MAAe,QAAS,CAAC,QAAS,OAAO,EAC1B,UAAU,QACV,QACE,gBAAC,UAAO,CAAC,GAAG,yBACT,WAAWZ,CAAa,GAAKY,EAA+D,GAA1C,uCACrD,EAEF,UAAS,IACvB,gBAAC,EAAO,CAAC,SAAUA,GAAsBZ,IAAkB,WACzD,gBAAC,KAAI,CAAC,KAAMA,IAAkB,UAAY,eAAiB,eAAgB,CAC7E,CACF,CACF,EClCF,ECc0B,CAAC,CACzB,KAAApB,EACA,KAAM,CACJ,GAAAsB,EACA,cAAAK,EACA,MAAAJ,EACA,SAAAd,EACA,aAAAmB,EACA,cAAAF,EACA,SAAArB,EACA,MAAAV,EACA,cAAAyB,EACA,mBAAAY,CACF,EACA,SAAAyB,CACF,IACE,gBAAC,MAAG,IAAKpD,EAAU,UAAWoD,EAAW,SAAW,IAClD,gBAAC,GAAa,aAAA7B,EACA,cAAAF,EACA,cAAAC,CAAA,CAA8B,EAC5C,gBAAC,MAAG,UAAU,WACZ,gBAAC,IAAI,CAAC,GAAIW,EAAA,GAAO,OAAO,MAAM,KAAKhB,CAAE,GAClCb,CACH,CACF,EACA,gBAAC,MAAG,UAAU,WAAWJ,CAAS,EAClC,gBAAC,MAAG,UAAU,WAAWkB,CAAM,EAC/B,gBAAC,MAAG,UAAU,WAAWI,CAAc,EACvC,gBAAC,EAAU,CAAC,cAAAP,EAA8B,mBAAAY,CAAA,CAAwC,EAClF,gBAAC0B,EAAA,EAAS,CAAC,MAAA/D,CAAA,CAAc,EACzB,gBAAC,EAAW,CAAC,KAAAK,CAAA,CAAY,CAC3B,E,oBC7BF,QARoB,CAAC,CAAE,SAAA2D,CAAS,IAC9B,gBAAC,MAAW,SAAAA,EACA,aAAa,SACb,QAAS,IAAMA,EAAS,EAAE,EAC1B,mBAAoB,gBAAC,IAAe,IAAC,EACrC,UAAW,EAAG,ECLtBC,KAAgB,WAAO,QAAM;AAAA;AAAA;AAAA;AAAA,EA2BnC,EArB0B,CAAC,CAAE,MAAAtE,CAAM,IAAa,CAC9C,MAAMuE,EACJ,gBAAC,UAAO,CAAC,GAAG,uBACV,gBAAC,SAAE,yGAEH,CACF,EAGF,OACE,gBAAC,UACEvE,EACD,gBAAC,KAAc,CAAC,QAAQ,QAAQ,UAAS,GAAC,UAAU,MAAM,QAASuE,CAAA,EACjE,gBAACD,EAAA,CAAc,QAAQ,QACrB,gBAAC,KAAI,CAAC,KAAK,kBAAkB,WAAU,GAAC,CAC1C,CACF,CACF,CAEJ,ECHA,GAnBoC,CAAC,CAAE,UAAAE,EAAW,iBAAAC,EAAkB,QAAAC,EAAS,oBAAAC,CAAoB,IAC/F,gBAAC,MAAG,CAAC,UAAU,WACb,gBAAC,MAAG,CAAC,GAAI,IACP,gBAAC,UAAG,sBAAoB,EACxB,gBAAC,KAAE,UAAU,eAAc,gFAE3B,EACA,gBAAC,MAAU,GAAG,iBACH,UAAU,cACV,QAAAD,EACA,oBAAAC,EACA,UAAU,WACV,KAAM,CAACH,CAAS,EAChB,iBAAAC,EACA,WAAY,CAAC,EAAG,CAC7B,CACF,ECXIG,EAAgB,CAAC,GAAI,YAAa,WAAY,iBAAkB,iBAAkB,UAAW,OAAQ,SAAS,EAE9GjF,GAAY,UAAO;AAAA;AAAA;AAAA;AAAA,EAMnBkF,GAAS,UAAO;AAAA;AAAA;AAAA,EAKhBC,MAAiB,WAAO,IAAO,EAAE,CAAC,CAAE,MAAAjF,CAAM,OAAM;AAAA;AAAA,eAEvCA,EAAM,MAAM,KAAK,EAAE;AAAA,CACjC,EAEKkF,MAAsB,WAAO,IAAa;AAAA;AAAA;AAAA;AAAA,EAM1CC,EAAwBC,GAAW,CACvC,OAAQA,EAAO,YAAY,EAAG,CAC5B,IAAK,iBACH,OAAO,gBAAC,EAAiB,CAAC,MAAOA,CAAA,CAAQ,EAC3C,IAAK,UACH,OAAO,gBAAC,MAAG,UAAU,sBAAsBA,CAAO,EACpD,QACE,OAAO,gBAAC,UAAIA,CAAO,CACvB,CACF,EAEMC,EAAa,CAACC,EAAYC,EAAYC,IAAsB,CAChED,EAAW,EAAI,EAEfzB,EAAA,EAAY,mBAAmBwB,CAAU,EAAE,KAAMG,GAAmB,CAClED,EAAkBC,CAAc,EAChCF,EAAW,EAAK,CAClB,CAAC,CACH,EAEMG,GAA0B,CAACJ,EAAYC,EAAYC,EAAmBG,IAAyB,IAAa,OAAO,UAAU,OAAO,IAAM,CAC9IN,EAAWC,EAAYC,EAAYC,CAAiB,EACpDG,EAAS,CACX,CAAC,EACKC,GAA6B,CAACN,EAAYC,EAAYC,IAAsB,IAAa,UAAU,UAAU,OAAO,IAAMH,EAAWC,EAAYC,EAAYC,CAAiB,CAAC,EAE/KK,EAA0BtC,GAAsB1C,GAAuB,CAC3E,KAAM,CAAE,GAAIG,CAAO,EAAIH,EAEvB,OAAO,gBAACiF,EAAgB,CAAC,KAAAjF,EAAY,UAAW0C,GAAA,YAAAA,EAAa,MAAOvC,CAAA,CAAS,CAC/E,ECtEA,GDwEsB,IAAM,CAC1B,KAAM,CAAE,KAAA+E,EAAM,SAAUC,EAAS,UAAAC,CAAU,KAAIC,EAAA,IAA4B,EACrE3C,KAAcC,EAAA,GAAe,EAC7B,CAACiC,EAAgBD,CAAiB,KAAI,YAAqC,EAC3E,CAACW,EAASZ,CAAU,KAAI,YAAS,EAAK,EACtC,CAACa,EAAOC,CAAQ,KAAI,YAAS,EAAE,EAC/B,CAAE,KAAMC,EAAO,UAAA3B,EAAW,WAAY,CAAE,MAAA4B,EAAQ,CAAE,EAAI,CAAC,CAAE,EAAId,GAAkB,CAAC,EAMtF,MAJA,aAAU,IAAMJ,EAAW,CAAE,KAAAU,EAAM,QAAAC,EAAS,MAAAI,CAAM,EAAGb,EAAYC,CAAiB,EAAG,CAACO,EAAMC,EAASI,CAAK,CAAC,KAC3G,aAAU,IAAMV,GAAwB,CAAE,KAAAK,EAAM,QAAAC,EAAS,MAAAI,CAAM,EAAGb,EAAYC,EAAmBS,CAAS,EAAG,CAACF,EAAMC,EAASI,EAAOH,CAAS,CAAC,KAC9I,aAAU,IAAML,GAA2B,CAAE,KAAAG,EAAM,QAAAC,EAAS,MAAAI,CAAM,EAAGb,EAAYC,CAAiB,EAAG,CAACO,EAAMC,EAASI,CAAK,CAAC,EAEvH,CAACE,EACH,OAAO,gBAAC,KAAO,IAAC,EAGlB,MAAME,GAAgBC,IAAqB,CACzCR,EAAU,EACVI,EAASI,EAAQ,CACnB,EAEMC,GAAe,gBAAC,EAAW,CAAC,SAAUF,EAAA,CAAc,EAE1D,OACE,gBAAC1G,GAAA,KACE6E,GACC,gBAAC,IAAoB,UAAAA,EACA,iBAAkBkB,EAAuBtC,CAAW,EACpD,oBAAqB4B,EACrB,QAASJ,CAAA,CAAe,EAE/C,gBAAC,MAAG,CAAC,UAAU,WACb,gBAAC,MAAG,CAAC,GAAI,IACP,gBAACC,GAAA,KACC,gBAAC,UAAG,OAAK,EACRmB,GAAW,gBAAClB,GAAA,CAAe,KAAK,GAAG,MAAO,EAAG,CAChD,EACA,gBAAC,KAAE,UAAU,eAAc,SAClBsB,EAAM,kCACf,EACA,gBAACrB,GAAA,CAAoB,WAAYqB,CAAA,EAC/B,gBAAC,MAAU,GAAG,iBACH,UAAU,cACV,aAAa,QACb,QAASxB,EACT,oBAAqBI,EACrB,UAAU,WACV,WAAY,gBAAC,KAAc,KAAC,2BAAyB,EACrD,KAAMmB,EAAM,KAAK,EACjB,aAAcI,GACd,iBAAkBb,EAAuBtC,CAAW,EACpD,WAAY,CAAC,EACb,YAAY,eAAe,CACxC,CACF,CACF,CACF,CAEJ,E,qBEtGA,SApB0B,IACxB,gBAAC,KAAa,CAAC,MAAM,kBACnB,gBAACoD,GAAA,EAAmB,IAAC,EACrB,gBAAC,MAAW,MAAM,iBACN,QACE,gBAAC,IAAa,CAAC,GAAIxD,EAAA,GAAO,OAAO,MAAM,QACrC,gBAAC,SAAM,CAAC,QAAQ,WAAU,aAAW,CACvC,EAEF,kBAAmB,CACjB,MAAO,4BACP,KAAMyD,EAAA,EAAW,MAAM,WACzB,GACV,gBAAC,YAAK,yCAA4C,CACpD,EAEA,gBAAC,GAAa,IAAC,CACjB,C,qOCsDF,MAAMC,EAAW,CAAC,CAAE,IAAAC,EAAM,GAAI,MAAAV,EAAQ,CAAC,CAAE,IAAM,CAC7C,MAAMW,EAAM,IAAI,KAAID,CAAG,EAEvB,OAAAC,EAAI,MAAMX,CAAK,KAER,MAAWW,EAAI,SAAS,CAAC,CAClC,EAEaC,KAAe,MAC1B,aACA,IAAM,kBAAkC,CACtC,OAAQ,CAAE,YAAa,EAAK,EAC5B,KAAM,CAAE,YAAa,EAAK,EAC1B,eAAgB,CAAE,YAAa,EAAK,EACpC,OAAQ,CAAE,YAAa,EAAK,EAC5B,OAAQ,CAAE,YAAa,EAAK,EAC5B,eAAgB,CAAE,YAAa,EAAK,EACpC,YAAa,CAAE,YAAa,EAAK,EACjC,WAAY,CAAE,YAAa,EAAK,EAChC,YAAa,CAAE,YAAa,EAAK,EACjC,mBAAoB,CAAE,YAAa,EAAK,EACxC,UAAW,CAAE,YAAa,EAAK,EAC/B,UAAW,CAAE,YAAa,EAAK,CACjC,CAAC,CACH,EAEaC,KAAa,MAAe,aAAc,IAAM,gBAAmB,CAC9E,YAAa,CAACD,CAAY,EAE1B,OAAOnG,EAAiC,CACtC,MAAMiG,KAAM,MAAW,IAAU,mBAAmB,OAAO,EAAE,GAAG,EAC1DI,KAAU,MAAM,OAAQJ,EAAKjG,CAAI,EACvC,OAAAmG,EAAa,OAAO,QAAQE,CAAO,EAE5BA,CACT,EAEA,KAAK/E,EAA2B,CAC9B,MAAM2E,KAAM,MAAW,IAAU,mBAAmB,KAAK,mBAAmB3E,CAAE,CAAC,EAAE,GAAG,EAC9E+E,KAAU,MAAM,MAAOJ,CAAG,EAAE,KAAK,IAAK,QAAQ,EAEpD,OAAAE,EAAa,KAAK,QAAQE,CAAO,EAE1BA,CACT,EAEA,eAAelG,EAA+B,CAC5C,MAAM8F,KAAM,MAAW,IAAU,mBAAmB,eAAe,mBAAmB9F,CAAM,CAAC,EAAE,GAAG,EAC5FkG,KAAU,MAAM,MAAOJ,CAAG,EAAE,KAAK,IAAK,QAAQ,EAEpD,OAAAE,EAAa,eAAe,QAAQE,CAAO,EAEpCA,CACT,EAEA,OAAOlG,EAAgBH,EAAiC,CACtD,MAAMiG,KAAM,MAAW,IAAU,mBAAmB,OAAO,mBAAmB9F,CAAM,CAAC,EAAE,GAAG,EACpFkG,KAAU,MAAM,MAAOJ,EAAKjG,CAAI,EACtC,OAAAmG,EAAa,OAAO,QAAQE,CAAO,EAE5BA,CACT,EAEA,OAAOlG,EAA+B,CACpC,MAAM8F,KAAM,MAAW,IAAU,mBAAmB,OAAO,mBAAmB9F,CAAM,CAAC,EAAE,GAAG,EACpFkG,KAAU,MAAM,SAAUJ,CAAG,EAEnC,OAAAE,EAAa,OAAO,QAAQE,CAAO,EAE5BA,CACT,EAEA,eAAelG,EAAgBmG,EAA+C,CAC5E,MAAML,KAAM,MAAW,IAAU,mBAAmB,eAAe,mBAAmB9F,CAAM,CAAC,EAAE,GAAG,EAC5FkG,KAAU,MAAM,MAAOJ,EAAKK,CAAO,EACzC,OAAAH,EAAa,eAAe,QAAQE,CAAO,EAEpCA,CACT,EAEA,YAAYlG,EAAgBU,EAAmC,CAC7D,MAAMoF,KAAM,MAAW,IAAU,mBAAmB,aAAa,mBAAmB9F,CAAM,EAAG,mBAAmBU,CAAS,CAAC,EAAE,GAAG,EACzHwF,KAAU,MAAM,OAAQJ,CAAG,EACjC,OAAAE,EAAa,YAAY,QAAQE,CAAO,EAEjCA,CACT,EAEA,WAAWlG,EAAkC,CAC3C,MAAM8F,KAAM,MAAW,IAAU,mBAAmB,YAAY,mBAAmB9F,CAAM,CAAC,EAAE,GAAG,EACzFkG,KAAU,MAAM,MAAOJ,CAAG,EAAE,KAAMM,GAAaA,EAAS,MAAM,EACpE,OAAAJ,EAAa,WAAW,QAAQE,CAAO,EAEhCA,CACT,EAEA,YAAYlG,EAAgBqG,EAAoC,CAC9D,MAAMP,KAAM,MAAW,IAAU,mBAAmB,aAAa,mBAAmB9F,CAAM,EAAG,mBAAmBqG,CAAO,CAAC,EAAE,GAAG,EACvHH,KAAU,MAAM,SAAUJ,CAAG,EACnC,OAAAE,EAAa,YAAY,QAAQE,CAAO,EAEjCA,CACT,EAEA,UAAUd,EAAe,CAAC,EAAkC,CAC1D,MAAMU,EAAMD,EAAS,CAAE,IAAK,IAAU,mBAAmB,KAAK,EAAE,IAAK,MAAAT,CAAM,CAAC,EACtEc,KAAU,MAAM,MAAOJ,CAAG,EAAE,KAAK,CAAC,CACtC,MAAAR,CACF,IAAM,OAAqBA,EAAM,IAAKzF,GAAS,IAAa,SAASA,CAAI,CAAC,CAAC,CAAC,EAC5E,OAAAmG,EAAa,UAAU,QAAQE,CAAO,EAE/BA,CACT,EAEA,mBAAmB,CACjB,KAAAnB,EACA,QAAAC,EACA,MAAAI,CACF,EAAwC,CACtC,MAAMU,KAAM,KAAc,IAAU,mBAAmB,UAAU,EAAE,IAAKf,EAAMC,EAASI,CAAK,EAEtFc,KAAU,MAAM,SAAO,MAAWJ,CAAG,CAAC,EAAE,KAAMM,IAAsC,CACxF,UAAWA,EAAS,QAAQ,WAAa,IAAa,SAASA,EAAS,QAAQ,UAAU,EAAI,OAC9F,KAAM,OAAeA,EAAS,MAAM,IAAKvG,GAAS,IAAa,SAASA,CAAI,CAAC,CAAC,EAC9E,WAAY,CACV,KAAMuG,EAAS,KACf,QAASA,EAAS,SAClB,MAAOA,EAAS,MAChB,MAAOA,EAAS,MAChB,MAAOA,EAAS,KAClB,CACF,EAAE,EAEF,OAAAJ,EAAa,mBAAmB,QAAQE,CAAO,EAExCA,CACT,EAEA,UAAUlG,EAAgBiB,EAA6C,CACrE,MAAM6E,KAAM,MAAW,IAAU,mBAAmB,UAAU9F,EAAQiB,CAAa,EAAE,GAAG,EAClFiF,KAAU,MAAM,MAAOJ,CAAG,EAChC,OAAAE,EAAa,UAAU,QAAQE,CAAO,EAE/BA,CACT,CACF,CAAC,CAAC,C","sources":["webpack://graylog-web-interface/./src/components/common/PageNavigation.tsx","webpack://graylog-web-interface/./src/components/permissions/RolesCell.tsx","webpack://graylog-web-interface/./src/components/users/UsersQueryHelper.tsx","webpack://graylog-web-interface/./src/components/users/navigation/UsersPageNavigation.tsx","webpack://graylog-web-interface/./src/domainActions/users/UsersDomain.ts","webpack://graylog-web-interface/./src/logic/users/UserOverview.ts","webpack://graylog-web-interface/./src/components/users/UsersOverview/UserOverviewItem/ActionsCell.tsx","webpack://graylog-web-interface/./src/components/users/LoggedInIcon.tsx","webpack://graylog-web-interface/./src/components/users/UsersOverview/UserOverviewItem/LoggedInCell.tsx","webpack://graylog-web-interface/./src/components/users/UsersOverview/UserOverviewItem/StatusCell.tsx","webpack://graylog-web-interface/./src/components/users/UsersOverview/UserOverviewItem/index.ts","webpack://graylog-web-interface/./src/components/users/UsersOverview/UserOverviewItem/UsersOverviewItem.tsx","webpack://graylog-web-interface/./src/components/users/UsersOverview/UsersFilter.tsx","webpack://graylog-web-interface/./src/components/users/UsersOverview/ClientAddressHead.tsx","webpack://graylog-web-interface/./src/components/users/UsersOverview/SystemAdministratorOverview.tsx","webpack://graylog-web-interface/./src/components/users/UsersOverview/UsersOverview.tsx","webpack://graylog-web-interface/./src/components/users/UsersOverview/index.ts","webpack://graylog-web-interface/./src/pages/UsersOverviewPage.tsx","webpack://graylog-web-interface/./src/stores/users/UsersStore.ts"],"sourcesContent":["/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Button, ButtonToolbar } from 'components/bootstrap';\nimport { LinkContainer } from 'components/common/router';\nimport { IfPermitted } from 'components/common';\nimport NavItemStateIndicator, {\n hoverIndicatorStyles,\n activeIndicatorStyles,\n} from 'components/common/NavItemStateIndicator';\n\nconst Container = styled(ButtonToolbar)`\n margin-bottom: 10px;\n`;\n\nconst StyledButton = styled(Button)(({ theme }) => css`\n font-family: ${theme.fonts.family.navigation};\n font-size: ${theme.fonts.size.navigation};\n\n &&&& {\n color: ${theme.colors.variant.darker.default};\n \n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n > div {\n &:hover,\n &:focus {\n color: ${theme.colors.variant.darker.default};\n }\n }\n\n &:hover {\n ${hoverIndicatorStyles(theme)}\n }\n\n &.active {\n color: ${theme.colors.global.textDefault};\n\n ${activeIndicatorStyles(theme)}\n\n &:hover,\n &:focus {\n ${activeIndicatorStyles(theme)}\n }\n }\n }\n`);\n\nStyledButton.displayName = 'Button';\n\ntype Props = {\n /**\n * List of nav items. Define permissions, if the item should only be displayed for users with specific permissions.\n * By default, an item is active if the current URL starts with the item URL.\n * If you only want to display an item as active only when its path matches exactly, set `exactPathMatch` to true.\n */\n items: Array<{\n title: string,\n path: string,\n permissions?: string | Array\n exactPathMatch?: boolean,\n }>\n}\n\n/**\n * Simple tab navigation to allow navigating to subareas of a page.\n */\nconst PageNavigation = ({ items }: Props) => (\n \n {items.map(({ path, title, permissions, exactPathMatch }) => {\n if (!path) {\n return null;\n }\n\n return (\n \n \n \n \n {title}\n \n \n \n \n );\n })}\n \n);\n\nexport default PageNavigation;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport styled from 'styled-components';\nimport type * as Immutable from 'immutable';\n\nimport { Label } from 'components/bootstrap';\n\nconst Td = styled.td`\n max-width: 300px;\n`;\n\nconst Role = styled(Label)`\n margin-right: 5px;\n margin-bottom: 5px;\n display: inline-block;\n padding: 4px 6px;\n`;\n\ntype Props = {\n roles: Immutable.Set,\n};\n\nconst RolesCell = ({ roles }: Props) => (\n \n {roles.map((role) => (\n \n {role}\n \n )).toArray()}\n \n);\n\nexport default RolesCell;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\n\nimport { Popover, Table, Button } from 'components/bootstrap';\nimport { OverlayTrigger, Icon } from 'components/common';\n\nconst userQueryHelperPopover = (\n \n Available search fields
\n \n \n \n Field \n Description \n \n \n \n \n full_name \n The full name of a user \n \n \n username \n The users login username. \n \n \n email \n The users email. \n \n \n
\n Examples
\n \n Find users with a email containing example.com:
\n email:example.com
\n
\n \n);\n\nconst UserQueryHelper = () => (\n \n \n \n);\n\nexport default UserQueryHelper;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\n\nimport Routes from 'routing/Routes';\nimport PageNavigation from 'components/common/PageNavigation';\nimport { Row } from 'components/bootstrap';\n\nconst UsersPageNavigation = () => {\n const NAV_ITEMS = [\n { title: 'Users Overview', path: Routes.SYSTEM.USERS.OVERVIEW, permissions: 'users:list' },\n { title: 'Teams Overview', path: Routes.getPluginRoute('SYSTEM_TEAMS'), permissions: 'teams:list' },\n ];\n\n return (\n \n \n
\n );\n};\n\nexport default UsersPageNavigation;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport { UsersActions } from 'stores/users/UsersStore';\n\nimport notifyingAction from '../notifyingAction';\n\nconst create = notifyingAction({\n action: UsersActions.create,\n success: (user) => ({\n message: `User \"${user?.first_name} ${user?.last_name}\" was created successfully`,\n }),\n error: (error, user) => ({\n message: `Creating user \"${user?.first_name} ${user?.last_name}\" failed with status: ${error}`,\n }),\n});\n\nconst load = notifyingAction({\n action: UsersActions.load,\n error: (error, userId) => ({\n message: `Loading user with id \"${userId}\" failed with status: ${error}`,\n }),\n notFoundRedirect: true,\n});\n\nconst loadByUsername = notifyingAction({\n action: UsersActions.loadByUsername,\n error: (error, username) => ({\n message: `Loading user with username \"${username}\" failed with status: ${error}`,\n }),\n notFoundRedirect: true,\n});\n\nconst update = notifyingAction({\n action: UsersActions.update,\n success: (_userId, _payload, fullName) => ({\n message: `User \"${fullName}\" was updated successfully`,\n }),\n error: (error, _userId, _payload, fullName) => ({\n message: `Updating user \"${fullName}\" failed with status: ${error}`,\n }),\n});\n\nconst deleteAction = notifyingAction({\n action: UsersActions.delete,\n success: (_userId, fullName) => ({\n message: `User \"${fullName}\" was deleted successfully`,\n }),\n error: (error, _userId, fullName) => ({\n message: `Deleting user \"${fullName}\" failed with status: ${error}`,\n }),\n});\n\nconst changePassword = notifyingAction({\n action: UsersActions.changePassword,\n success: () => ({\n message: 'Password was changed successfully ',\n }),\n error: (error, userId) => ({\n message: `Changing password for user with id \"${userId}\" failed with status: ${error}`,\n }),\n});\n\nconst createToken = notifyingAction({\n action: UsersActions.createToken,\n success: (_userId, tokenName) => ({\n message: `Token \"${tokenName}\" created successfully`,\n }),\n error: (error, userId, tokenName) => ({\n message: `Creating token \"${tokenName}\" for user with id \"${userId}\" failed with status: ${error}`,\n }),\n});\n\nconst loadTokens = notifyingAction({\n action: UsersActions.loadTokens,\n error: (error, userId) => ({\n message: `Loading tokens for user with id \"${userId}\" failed with status: ${error}`,\n }),\n});\n\nconst deleteToken = notifyingAction({\n action: UsersActions.deleteToken,\n success: (_userId, _tokenId, tokenName) => ({\n message: `Token \"${tokenName}\" deleted successfully`,\n }),\n error: (error, userId, _tokenId, tokenName) => ({\n message: `Deleting token \"${tokenName}\" for user with id \"${userId}\" failed with status: ${error}`,\n }),\n});\n\nconst loadUsers = notifyingAction({\n action: UsersActions.loadUsers,\n error: (error) => ({\n message: `Loading users failed with status: ${error}`,\n }),\n});\n\nconst loadUsersPaginated = notifyingAction({\n action: UsersActions.loadUsersPaginated,\n error: (error) => ({\n message: `Loading users failed with status: ${error}`,\n }),\n});\n\nconst setStatus = notifyingAction({\n action: UsersActions.setStatus,\n success: (userId, accountStatus) => ({\n message: `User \"${userId}\" was set to ${accountStatus}`,\n }),\n error: (error, userId, accountStatus) => ({\n message: `Updating user (\"${userId}\") to ${accountStatus} failed with status: ${error}`,\n }),\n});\n\nexport default {\n create,\n load,\n loadByUsername,\n update,\n delete: deleteAction,\n changePassword,\n createToken,\n loadTokens,\n deleteToken,\n loadUsers,\n loadUsersPaginated,\n setStatus,\n};\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport type { $PropertyType } from 'utility-types';\nimport * as Immutable from 'immutable';\n\nexport type AccountStatus = 'enabled' | 'disabled' | 'deleted';\n\nexport type UserOverviewJSON = {\n id: string;\n username: string;\n full_name: string;\n email: string;\n external_user: boolean | null | undefined;\n roles: Array;\n read_only: boolean | null | undefined;\n session_active: boolean | null | undefined;\n client_address: string;\n last_activity: string | null | undefined;\n enabled: boolean;\n auth_service_id: string;\n auth_service_uid: string;\n auth_service_enabled: boolean;\n account_status: AccountStatus;\n};\n\ntype InternalState = {\n id: string;\n username: string;\n fullName: string;\n email: string;\n roles: Immutable.Set;\n readOnly: boolean;\n external: boolean;\n sessionActive: boolean;\n clientAddress: string;\n lastActivity: string | null | undefined;\n enabled: boolean;\n authServiceId: string;\n authServiceUid: string;\n authServiceEnabled: boolean;\n accountStatus: AccountStatus;\n};\n\nexport default class UserOverview {\n _value: InternalState;\n\n constructor(\n id: $PropertyType,\n username: $PropertyType,\n fullName: $PropertyType,\n email: $PropertyType,\n roles: $PropertyType,\n readOnly: $PropertyType,\n external: $PropertyType,\n sessionActive: $PropertyType,\n clientAddress: $PropertyType,\n lastActivity: $PropertyType,\n enabled: $PropertyType,\n authServiceId: $PropertyType,\n authServiceUid: $PropertyType,\n authServiceEnabled: $PropertyType,\n accountStatus: $PropertyType,\n ) {\n this._value = {\n id,\n username,\n fullName,\n email,\n roles,\n readOnly,\n external,\n sessionActive,\n clientAddress,\n lastActivity,\n enabled,\n authServiceId,\n authServiceUid,\n authServiceEnabled,\n accountStatus,\n };\n }\n\n get id() {\n return this._value.id;\n }\n\n get username() {\n return this._value.username;\n }\n\n get name() {\n return this._value.username;\n }\n\n get fullName() {\n return this._value.fullName;\n }\n\n get description() {\n return this._value.fullName;\n }\n\n get email() {\n return this._value.email;\n }\n\n get roles() {\n return this._value.roles;\n }\n\n get readOnly() {\n return this._value.readOnly;\n }\n\n get external() {\n return this._value.external;\n }\n\n get sessionActive() {\n return this._value.sessionActive;\n }\n\n get clientAddress() {\n return this._value.clientAddress;\n }\n\n get lastActivity() {\n return this._value.lastActivity;\n }\n\n get enabled() {\n return this._value.enabled;\n }\n\n get authServiceId() {\n return this._value.authServiceId;\n }\n\n get authServiceUid() {\n return this._value.authServiceUid;\n }\n\n get authServiceEnabled() {\n return this._value.authServiceEnabled;\n }\n\n get accountStatus() {\n return this._value.accountStatus;\n }\n\n toBuilder() {\n const {\n id,\n username,\n fullName,\n email,\n roles,\n readOnly,\n external,\n sessionActive,\n clientAddress,\n lastActivity,\n enabled,\n authServiceId,\n authServiceUid,\n authServiceEnabled,\n accountStatus,\n } = this._value;\n\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return new Builder(Immutable.Map({\n id,\n username,\n fullName,\n email,\n roles,\n readOnly,\n external,\n sessionActive,\n clientAddress,\n lastActivity,\n enabled,\n authServiceId,\n authServiceUid,\n authServiceEnabled,\n accountStatus,\n }));\n }\n\n static create(\n id: $PropertyType,\n username: $PropertyType,\n fullName: $PropertyType,\n email: $PropertyType,\n roles: $PropertyType,\n readOnly: $PropertyType,\n external: $PropertyType,\n sessionActive: $PropertyType,\n clientAddress: $PropertyType,\n lastActivity: $PropertyType,\n enabled: $PropertyType,\n authServiceId: $PropertyType,\n authServiceUid: $PropertyType,\n authServiceEnabled: $PropertyType,\n accountStatus: $PropertyType,\n ) {\n return new UserOverview(\n id,\n username,\n fullName,\n email,\n roles,\n readOnly,\n external,\n sessionActive,\n clientAddress,\n lastActivity,\n enabled,\n authServiceId,\n authServiceUid,\n authServiceEnabled,\n accountStatus,\n );\n }\n\n toJSON(): UserOverviewJSON {\n const {\n id,\n username,\n fullName,\n email,\n roles,\n readOnly,\n external,\n sessionActive,\n clientAddress,\n lastActivity,\n enabled,\n authServiceId,\n authServiceUid,\n authServiceEnabled,\n accountStatus,\n } = this._value;\n\n return {\n id,\n username,\n full_name: fullName,\n email,\n roles: roles.toArray(),\n read_only: readOnly,\n external_user: external,\n session_active: sessionActive,\n client_address: clientAddress,\n last_activity: lastActivity,\n enabled,\n auth_service_id: authServiceId,\n auth_service_uid: authServiceUid,\n auth_service_enabled: authServiceEnabled,\n account_status: accountStatus,\n };\n }\n\n static fromJSON(value: UserOverviewJSON) {\n const {\n id,\n username,\n full_name: fullName,\n email,\n roles,\n read_only: readOnly,\n external_user: external,\n session_active: sessionActive,\n client_address: clientAddress,\n last_activity: lastActivity,\n enabled,\n auth_service_id: authServiceId,\n auth_service_uid: authServiceUid,\n auth_service_enabled: authServiceEnabled,\n account_status: accountStatus,\n } = value;\n\n return UserOverview.create(id,\n username,\n fullName,\n email,\n Immutable.Set(roles),\n readOnly ?? false,\n external ?? false,\n sessionActive ?? false,\n clientAddress,\n lastActivity,\n enabled,\n authServiceId,\n authServiceUid,\n authServiceEnabled,\n accountStatus);\n }\n\n static builder(): Builder {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return new Builder();\n }\n}\n\ntype BuilderState = Immutable.Map;\n\nclass Builder {\n value: BuilderState;\n\n constructor(value: BuilderState = Immutable.Map()) {\n this.value = value;\n }\n\n id(value: $PropertyType) {\n return new Builder(this.value.set('id', value));\n }\n\n username(value: $PropertyType) {\n return new Builder(this.value.set('username', value));\n }\n\n fullName(value: $PropertyType) {\n return new Builder(this.value.set('fullName', value));\n }\n\n email(value: $PropertyType) {\n return new Builder(this.value.set('email', value));\n }\n\n roles(value: $PropertyType) {\n return new Builder(this.value.set('roles', value));\n }\n\n readOnly(value: $PropertyType) {\n return new Builder(this.value.set('readOnly', value));\n }\n\n external(value: $PropertyType) {\n return new Builder(this.value.set('external', value));\n }\n\n sessionActive(value: $PropertyType) {\n return new Builder(this.value.set('sessionActive', value));\n }\n\n clientAddress(value: $PropertyType) {\n return new Builder(this.value.set('clientAddress', value));\n }\n\n lastActivity(value: $PropertyType) {\n return new Builder(this.value.set('lastActivity', value));\n }\n\n enabled(value: $PropertyType) {\n return new Builder(this.value.set('enabled', value));\n }\n\n authServiceId(value: $PropertyType) {\n return new Builder(this.value.set('authServiceId', value));\n }\n\n authServiceUid(value: $PropertyType) {\n return new Builder(this.value.set('authServiceUid', value));\n }\n\n authServiceEnabled(value: $PropertyType) {\n return new Builder(this.value.set('authServiceEnabled', value));\n }\n\n accountStatus(value: $PropertyType) {\n return new Builder(this.value.set('accountStatus', value));\n }\n\n build() {\n const {\n id,\n username,\n fullName,\n email,\n roles,\n readOnly,\n external,\n sessionActive,\n clientAddress,\n lastActivity,\n enabled,\n authServiceId,\n authServiceUid,\n authServiceEnabled,\n accountStatus,\n } = this.value.toObject();\n\n return new UserOverview(\n id,\n username,\n fullName,\n email,\n roles,\n readOnly,\n external,\n sessionActive,\n clientAddress,\n lastActivity,\n enabled,\n authServiceId,\n authServiceUid,\n authServiceEnabled,\n accountStatus,\n );\n }\n}\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport styled from 'styled-components';\n\nimport useCurrentUser from 'hooks/useCurrentUser';\nimport { LinkContainer } from 'components/common/router';\nimport type UserOverview from 'logic/users/UserOverview';\nimport UsersDomain from 'domainActions/users/UsersDomain';\nimport Routes from 'routing/Routes';\nimport { Button, Tooltip, DropdownButton, MenuItem, ButtonToolbar } from 'components/bootstrap';\nimport { OverlayTrigger, IfPermitted } from 'components/common';\nimport { getPathnameWithoutId } from 'util/URLUtils';\nimport useSendTelemetry from 'logic/telemetry/useSendTelemetry';\nimport useLocation from 'routing/useLocation';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\n\ntype Props = {\n user: UserOverview,\n};\n\nconst ActionsWrapper = styled(ButtonToolbar)`\n display: flex;\n justify-content: flex-end;\n`;\n\nconst EditTokensAction = ({\n user: { fullName, id },\n wrapperComponent: WrapperComponent,\n}: {\n user: UserOverview,\n wrapperComponent: Button | MenuItem,\n}) => (\n \n \n Edit tokens\n \n \n);\n\nconst ReadOnlyActions = ({ user }: { user: UserOverview }) => {\n const tooltip = (\n System users can only be modified in the Graylog configuration\n file.\n \n );\n\n return (\n <>\n \n \n \n \n >\n );\n};\n\nconst EditActions = ({ user, user: { username, id, fullName, accountStatus, external, readOnly } }: {\n user: UserOverview\n}) => {\n const currentUser = useCurrentUser();\n const sendTelemetry = useSendTelemetry();\n const { pathname } = useLocation();\n\n const _toggleStatus = () => {\n if (accountStatus === 'enabled') {\n sendTelemetry(TELEMETRY_EVENT_TYPE.USERS.USER_DISABLED, {\n app_pathname: getPathnameWithoutId(pathname),\n app_action_value: 'user-item-disable',\n });\n\n // eslint-disable-next-line no-alert\n if (window.confirm(`Do you really want to disable user ${fullName}? All current sessions will be terminated.`)) {\n UsersDomain.setStatus(id, 'disabled');\n }\n\n return;\n }\n\n UsersDomain.setStatus(id, 'enabled');\n\n sendTelemetry(TELEMETRY_EVENT_TYPE.USERS.USER_ENABLED, {\n app_pathname: getPathnameWithoutId(pathname),\n app_action_value: 'user-item-enable',\n });\n };\n\n const _deleteUser = () => {\n sendTelemetry(TELEMETRY_EVENT_TYPE.USERS.USER_DELETED, {\n app_pathname: getPathnameWithoutId(pathname),\n app_action_value: 'user-item-delete',\n });\n\n // eslint-disable-next-line no-alert\n if (window.confirm(`Do you really want to delete user ${fullName}?`)) {\n UsersDomain.delete(id, fullName);\n }\n };\n\n const showEnableDisable = !external && !readOnly && currentUser?.id !== id;\n\n return (\n <>\n \n \n \n \n \n \n \n \n {showEnableDisable && (\n \n )}\n \n \n \n >\n );\n};\n\nconst ActionsCell = ({ user }: Props) => (\n \n \n {user.readOnly ? (\n \n ) : (\n \n )}\n \n \n);\n\nexport default ActionsCell;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Icon } from 'components/common';\n\nconst Wrapper = styled.div<{ $active: boolean }>(({ theme, $active }) => css`\n color: ${$active ? theme.colors.variant.success : theme.colors.variant.default};\n`);\n\nconst LoggedInIcon = ({ active, ...rest }: { active: boolean }) => (\n \n \n \n);\n\nexport default LoggedInIcon;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport styled from 'styled-components';\nimport type { $PropertyType } from 'utility-types';\n\nimport type UserOverview from 'logic/users/UserOverview';\nimport { OverlayTrigger, RelativeTime } from 'components/common';\nimport { Popover } from 'components/bootstrap';\n\nimport LoggedInIcon from '../../LoggedInIcon';\n\ntype Props = {\n lastActivity: $PropertyType,\n clientAddress: $PropertyType,\n sessionActive: $PropertyType,\n};\n\nconst Td = styled.td`\n width: 35px;\n text-align: right;\n position: relative;\n`;\n\nconst LoggedInCell = ({ lastActivity, sessionActive, clientAddress }: Props) => (\n \n \n {sessionActive ? (\n <>\n Last activity: {lastActivity\n ? : '-'}\n \n Client address: {clientAddress ?? '-'}\n >\n ) : 'Not logged in'}\n \n )}\n rootClose>\n \n \n \n);\n\nexport default LoggedInCell;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport styled, { css } from 'styled-components';\nimport type { $PropertyType } from 'utility-types';\n\nimport type UserOverview from 'logic/users/UserOverview';\nimport { OverlayTrigger, Icon } from 'components/common';\nimport { Popover } from 'components/bootstrap';\n\ntype Props = {\n authServiceEnabled: $PropertyType,\n accountStatus: $PropertyType,\n};\n\nconst Wrapper = styled.div<{ $enabled: boolean }>(({ theme, $enabled }) => css`\n color: ${$enabled ? theme.colors.variant.success : theme.colors.variant.default};\n`);\n\nconst Td = styled.td`\n width: 35px;\n text-align: center;\n`;\n\nconst StatusCell = ({ accountStatus, authServiceEnabled }: Props) => (\n \n \n {`User is ${accountStatus}`}{!authServiceEnabled ? ' (authentication service is disabled)' : ''}\n \n )}\n rootClose>\n \n \n \n \n \n);\n\nexport default StatusCell;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport UsersOverviewItem from './UsersOverviewItem';\n\nexport default UsersOverviewItem;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\n\nimport { Link } from 'components/common/router';\nimport Routes from 'routing/Routes';\nimport type UserOverview from 'logic/users/UserOverview';\nimport RolesCell from 'components/permissions/RolesCell';\n\nimport ActionsCell from './ActionsCell';\nimport LoggedInCell from './LoggedInCell';\nimport StatusCell from './StatusCell';\n\ntype Props = {\n user: UserOverview,\n isActive: boolean,\n};\n\nconst UsersOverviewItem = ({\n user,\n user: {\n id,\n clientAddress,\n email,\n fullName,\n lastActivity,\n sessionActive,\n username,\n roles,\n accountStatus,\n authServiceEnabled,\n },\n isActive,\n}: Props) => (\n \n \n \n \n {fullName}\n \n \n {username} \n {email} \n {clientAddress} \n \n \n \n \n);\n\nexport default UsersOverviewItem;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\n\nimport { SearchForm } from 'components/common';\n\nimport UserQueryHelper from '../UsersQueryHelper';\n\ntype Props = {\n onSearch: (query: string) => void,\n};\n\nconst UsersFilter = ({ onSearch }: Props) => (\n onSearch('')}\n queryHelpComponent={ }\n topMargin={0} />\n);\n\nexport default UsersFilter;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport styled from 'styled-components';\n\nimport { OverlayTrigger, Icon } from 'components/common';\nimport { Popover, Button } from 'components/bootstrap';\n\ntype Props = {\n title: string,\n};\n\nconst TooltipButton = styled(Button)`\n cursor: help;\n padding: 0 0 0 2px;\n display: inline-flex;\n`;\n\nconst ClientAddressHead = ({ title }: Props) => {\n const popover = (\n \n \n The address of the client used to initially establish the session, not necessarily its current address.\n
\n \n );\n\n return (\n \n {title}\n \n \n \n \n \n \n );\n};\n\nexport default ClientAddressHead;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\n\nimport type UserOverview from 'logic/users/UserOverview';\nimport { DataTable } from 'components/common';\nimport { Col, Row } from 'components/bootstrap';\n\ntype Props = {\n adminUser: UserOverview,\n dataRowFormatter: (user: UserOverview) => React.ReactElement,\n headerCellFormatter: (header: string) => React.ReactElement,\n headers: Array,\n};\n\nconst SystemAdministratorOverview = ({ adminUser, dataRowFormatter, headers, headerCellFormatter }: Props) => (\n \n \n System Administrator
\n \n The system administrator can only be edited in the Graylog configuration file.\n
\n \n \n
\n);\n\nexport default SystemAdministratorOverview;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport { useEffect, useState } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport type { PaginatedUsers } from 'stores/users/UsersStore';\nimport UsersDomain from 'domainActions/users/UsersDomain';\nimport { UsersActions } from 'stores/users/UsersStore';\nimport useCurrentUser from 'hooks/useCurrentUser';\nimport { DataTable, Spinner, PaginatedList, NoSearchResult } from 'components/common';\nimport { Col, Row } from 'components/bootstrap';\nimport type UserOverview from 'logic/users/UserOverview';\nimport usePaginationQueryParameter from 'hooks/usePaginationQueryParameter';\n\nimport UserOverviewItem from './UserOverviewItem';\nimport UsersFilter from './UsersFilter';\nimport ClientAddressHead from './ClientAddressHead';\nimport SystemAdministrator from './SystemAdministratorOverview';\n\nconst TABLE_HEADERS = ['', 'Full name', 'Username', 'E-Mail Address', 'Client Address', 'Enabled', 'Role', 'Actions'];\n\nconst Container = styled.div`\n .data-table {\n overflow-x: visible;\n }\n`;\n\nconst Header = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst LoadingSpinner = styled(Spinner)(({ theme }) => css`\n margin-left: 10px;\n font-size: ${theme.fonts.size.h3};\n`);\n\nconst StyledPaginatedList = styled(PaginatedList)`\n .pagination {\n margin: 0;\n }\n`;\n\nconst _headerCellFormatter = (header) => {\n switch (header.toLowerCase()) {\n case 'client address':\n return ;\n case 'actions':\n return {header} ;\n default:\n return {header} ;\n }\n};\n\nconst _loadUsers = (pagination, setLoading, setPaginatedUsers) => {\n setLoading(true);\n\n UsersDomain.loadUsersPaginated(pagination).then((paginatedUsers) => {\n setPaginatedUsers(paginatedUsers);\n setLoading(false);\n });\n};\n\nconst _updateListOnUserDelete = (pagination, setLoading, setPaginatedUsers, callback: () => void) => UsersActions.delete.completed.listen(() => {\n _loadUsers(pagination, setLoading, setPaginatedUsers);\n callback();\n});\nconst _updateListOnUserSetStatus = (pagination, setLoading, setPaginatedUsers) => UsersActions.setStatus.completed.listen(() => _loadUsers(pagination, setLoading, setPaginatedUsers));\n\nconst buildUsersOverviewItem = (currentUser: any) => (user: UserOverview) => {\n const { id: userId } = user;\n\n return ;\n};\n\nconst UsersOverview = () => {\n const { page, pageSize: perPage, resetPage } = usePaginationQueryParameter();\n const currentUser = useCurrentUser();\n const [paginatedUsers, setPaginatedUsers] = useState();\n const [loading, setLoading] = useState(false);\n const [query, setQuery] = useState('');\n const { list: users, adminUser, pagination: { total = 0 } = {} } = paginatedUsers || {};\n\n useEffect(() => _loadUsers({ page, perPage, query }, setLoading, setPaginatedUsers), [page, perPage, query]);\n useEffect(() => _updateListOnUserDelete({ page, perPage, query }, setLoading, setPaginatedUsers, resetPage), [page, perPage, query, resetPage]);\n useEffect(() => _updateListOnUserSetStatus({ page, perPage, query }, setLoading, setPaginatedUsers), [page, perPage, query]);\n\n if (!users) {\n return ;\n }\n\n const handleSearch = (newQuery: string) => {\n resetPage();\n setQuery(newQuery);\n };\n\n const searchFilter = ;\n\n return (\n \n {adminUser && (\n \n )}\n \n \n \n Users
\n {loading && }\n \n \n Found {total} registered users on the system.\n
\n \n No users have been found.}\n rows={users.toJS()}\n customFilter={searchFilter}\n dataRowFormatter={buildUsersOverviewItem(currentUser)}\n filterKeys={[]}\n filterLabel=\"Filter Users\" />\n \n \n
\n \n );\n};\n\nexport default UsersOverview;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport UsersOverview from './UsersOverview';\n\nexport default UsersOverview;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\n\nimport { LinkContainer } from 'components/common/router';\nimport Routes from 'routing/Routes';\nimport DocsHelper from 'util/DocsHelper';\nimport { Button } from 'components/bootstrap';\nimport { PageHeader, DocumentTitle } from 'components/common';\nimport UsersOverview from 'components/users/UsersOverview';\nimport UsersPageNavigation from 'components/users/navigation/UsersPageNavigation';\n\nconst UsersOverviewPage = () => (\n \n \n \n \n \n )}\n documentationLink={{\n title: 'Permissions documentation',\n path: DocsHelper.PAGES.USERS_ROLES,\n }}>\n Overview of Graylog's registered users.\n \n\n \n \n);\n\nexport default UsersOverviewPage;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport Reflux from 'reflux';\nimport * as Immutable from 'immutable';\nimport URI from 'urijs';\n\nimport type { UserOverviewJSON, AccountStatus } from 'logic/users/UserOverview';\nimport UserOverview from 'logic/users/UserOverview';\nimport fetch from 'logic/rest/FetchProvider';\nimport ApiRoutes from 'routing/ApiRoutes';\nimport { singletonStore, singletonActions } from 'logic/singleton';\nimport { qualifyUrl } from 'util/URLUtils';\nimport PaginationURL from 'util/PaginationURL';\nimport type { UserJSON } from 'logic/users/User';\nimport User from 'logic/users/User';\nimport type { PaginatedListJSON, Pagination, PaginatedList } from 'stores/PaginationTypes';\n\nexport type PaginatedUsersResponse = PaginatedListJSON & {\n users: Array;\n context: {\n admin_user: UserOverviewJSON;\n };\n};\n\nexport type UserCreate = {\n email: UserJSON['email'];\n full_name: UserJSON['full_name'];\n first_name: UserJSON['first_name'];\n last_name: UserJSON['last_name'];\n password: string;\n permissions: UserJSON['permissions'];\n roles: UserJSON['roles'];\n session_timeout_ms: UserJSON['session_timeout_ms'];\n timezone: UserJSON['timezone'];\n username: UserJSON['username'];\n};\n\nexport type UserUpdate = Partial;\n\nexport type Token = {\n id: string;\n name: string;\n token: string;\n last_access: string;\n};\n\nexport type TokenSummary = {\n id: string,\n name: string,\n last_access: string,\n};\n\nexport type ChangePasswordRequest = {\n old_password: string;\n password: string;\n};\n\nexport type PaginatedUsers = PaginatedList & {\n adminUser: UserOverview | null | undefined,\n};\n\nexport type Query = {\n include_permissions?: boolean;\n include_sessions?: boolean;\n};\n\nexport type ActionsType = {\n create: (user: UserCreate) => Promise;\n load: (userId: string) => Promise;\n loadByUsername: (username: string) => Promise;\n update: (userId: string, request: UserUpdate, fullName: string) => Promise;\n delete: (userId: string, fullName: string) => Promise;\n changePassword: (userId: string, request: ChangePasswordRequest) => Promise;\n createToken: (userId: string, tokenName: string) => Promise;\n loadTokens: (userId: string) => Promise;\n deleteToken: (userId: string, tokenId: string, tokenName: string) => Promise;\n loadUsers: (query?: Query) => Promise>;\n loadUsersPaginated: (pagination: Pagination) => Promise;\n setStatus: (userId: string, newStatus: AccountStatus) => Promise;\n};\n\nconst usersUrl = ({ url = '', query = {} }) => {\n const uri = new URI(url);\n\n uri.query(query);\n\n return qualifyUrl(uri.resource());\n};\n\nexport const UsersActions = singletonActions(\n 'core.Users',\n () => Reflux.createActions({\n create: { asyncResult: true },\n load: { asyncResult: true },\n loadByUsername: { asyncResult: true },\n update: { asyncResult: true },\n delete: { asyncResult: true },\n changePassword: { asyncResult: true },\n createToken: { asyncResult: true },\n loadTokens: { asyncResult: true },\n deleteToken: { asyncResult: true },\n loadUsersPaginated: { asyncResult: true },\n loadUsers: { asyncResult: true },\n setStatus: { asyncResult: true },\n }),\n);\n\nexport const UsersStore = singletonStore('core.Users', () => Reflux.createStore({\n listenables: [UsersActions],\n\n create(user: UserCreate): Promise {\n const url = qualifyUrl(ApiRoutes.UsersApiController.create().url);\n const promise = fetch('POST', url, user);\n UsersActions.create.promise(promise);\n\n return promise;\n },\n\n load(id: string): Promise {\n const url = qualifyUrl(ApiRoutes.UsersApiController.load(encodeURIComponent(id)).url);\n const promise = fetch('GET', url).then(User.fromJSON);\n\n UsersActions.load.promise(promise);\n\n return promise;\n },\n\n loadByUsername(userId: string): Promise {\n const url = qualifyUrl(ApiRoutes.UsersApiController.loadByUsername(encodeURIComponent(userId)).url);\n const promise = fetch('GET', url).then(User.fromJSON);\n\n UsersActions.loadByUsername.promise(promise);\n\n return promise;\n },\n\n update(userId: string, user: UserUpdate): Promise {\n const url = qualifyUrl(ApiRoutes.UsersApiController.update(encodeURIComponent(userId)).url);\n const promise = fetch('PUT', url, user);\n UsersActions.update.promise(promise);\n\n return promise;\n },\n\n delete(userId: string): Promise {\n const url = qualifyUrl(ApiRoutes.UsersApiController.delete(encodeURIComponent(userId)).url);\n const promise = fetch('DELETE', url);\n\n UsersActions.delete.promise(promise);\n\n return promise;\n },\n\n changePassword(userId: string, request: ChangePasswordRequest): Promise {\n const url = qualifyUrl(ApiRoutes.UsersApiController.changePassword(encodeURIComponent(userId)).url);\n const promise = fetch('PUT', url, request);\n UsersActions.changePassword.promise(promise);\n\n return promise;\n },\n\n createToken(userId: string, tokenName: string): Promise {\n const url = qualifyUrl(ApiRoutes.UsersApiController.create_token(encodeURIComponent(userId), encodeURIComponent(tokenName)).url);\n const promise = fetch('POST', url);\n UsersActions.createToken.promise(promise);\n\n return promise;\n },\n\n loadTokens(userId: string): Promise {\n const url = qualifyUrl(ApiRoutes.UsersApiController.list_tokens(encodeURIComponent(userId)).url);\n const promise = fetch('GET', url).then((response) => response.tokens);\n UsersActions.loadTokens.promise(promise);\n\n return promise;\n },\n\n deleteToken(userId: string, tokenId: string): Promise {\n const url = qualifyUrl(ApiRoutes.UsersApiController.delete_token(encodeURIComponent(userId), encodeURIComponent(tokenId)).url);\n const promise = fetch('DELETE', url);\n UsersActions.deleteToken.promise(promise);\n\n return promise;\n },\n\n loadUsers(query: Query = {}): Promise> {\n const url = usersUrl({ url: ApiRoutes.UsersApiController.list().url, query });\n const promise = fetch('GET', url).then(({\n users,\n }) => Immutable.List(users.map((user) => UserOverview.fromJSON(user))));\n UsersActions.loadUsers.promise(promise);\n\n return promise;\n },\n\n loadUsersPaginated({\n page,\n perPage,\n query,\n }: Pagination): Promise {\n const url = PaginationURL(ApiRoutes.UsersApiController.paginated().url, page, perPage, query);\n\n const promise = fetch('GET', qualifyUrl(url)).then((response: PaginatedUsersResponse) => ({\n adminUser: response.context.admin_user ? UserOverview.fromJSON(response.context.admin_user) : undefined,\n list: Immutable.List(response.users.map((user) => UserOverview.fromJSON(user))),\n pagination: {\n page: response.page,\n perPage: response.per_page,\n query: response.query,\n count: response.count,\n total: response.total,\n },\n }));\n\n UsersActions.loadUsersPaginated.promise(promise);\n\n return promise;\n },\n\n setStatus(userId: string, accountStatus: AccountStatus): Promise {\n const url = qualifyUrl(ApiRoutes.UsersApiController.setStatus(userId, accountStatus).url);\n const promise = fetch('PUT', url);\n UsersActions.setStatus.promise(promise);\n\n return promise;\n },\n}));\n"],"names":["Container","StyledButton","theme","items","path","title","permissions","exactPathMatch","Td","Role","roles","role","userQueryHelperPopover","NAV_ITEMS","create","user","error","load","userId","loadByUsername","username","update","_userId","_payload","fullName","deleteAction","changePassword","createToken","tokenName","loadTokens","deleteToken","_tokenId","loadUsers","loadUsersPaginated","setStatus","accountStatus","UserOverview","id","email","readOnly","external","sessionActive","clientAddress","lastActivity","enabled","authServiceId","authServiceUid","authServiceEnabled","Builder","value","ActionsWrapper","EditTokensAction","WrapperComponent","Routes","ReadOnlyActions","tooltip","EditActions","currentUser","useCurrentUser","sendTelemetry","useSendTelemetry","pathname","useLocation","_toggleStatus","UsersDomain","_deleteUser","showEnableDisable","Wrapper","$active","active","rest","$enabled","isActive","RolesCell","onSearch","TooltipButton","popover","adminUser","dataRowFormatter","headers","headerCellFormatter","TABLE_HEADERS","Header","LoadingSpinner","StyledPaginatedList","_headerCellFormatter","header","_loadUsers","pagination","setLoading","setPaginatedUsers","paginatedUsers","_updateListOnUserDelete","callback","_updateListOnUserSetStatus","buildUsersOverviewItem","UserOverviewItem","page","perPage","resetPage","usePaginationQueryParameter","loading","query","setQuery","users","total","handleSearch","newQuery","searchFilter","UsersPageNavigation","DocsHelper","usersUrl","url","uri","UsersActions","UsersStore","promise","request","response","tokenId"],"sourceRoot":""}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy