handler.go 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957
  1. package main
  2. import (
  3. "crypto/sha256"
  4. "crypto/tls"
  5. "database/sql"
  6. "encoding/json"
  7. "fmt"
  8. "io/ioutil"
  9. "net/http"
  10. "net/url"
  11. "strconv"
  12. "strings"
  13. "time"
  14. "github.com/dchest/uniuri"
  15. "github.com/dgrijalva/jwt-go"
  16. "github.com/labstack/echo"
  17. )
  18. type handler struct{}
  19. type userInfo struct {
  20. Result struct {
  21. Result struct {
  22. Sshpubkeyfp []string `json:"sshpubkeyfp"`
  23. HasKeytab bool `json:"has_keytab"`
  24. Ipasshpubkey []string `json:"ipasshpubkey"`
  25. Cn []string `json:"cn"`
  26. Krbcanonicalname []string `json:"krbcanonicalname"`
  27. Krbticketflags []string `json:"krbticketflags"`
  28. MemberofGroup []string `json:"memberof_group"`
  29. HasPassword bool `json:"has_password"`
  30. Homedirectory []string `json:"homedirectory"`
  31. Nsaccountlock bool `json:"nsaccountlock"`
  32. UID []string `json:"uid"`
  33. Title []string `json:"title"`
  34. Loginshell []string `json:"loginshell"`
  35. Uidnumber []string `json:"uidnumber"`
  36. Preserved bool `json:"preserved"`
  37. Krbextradata []struct {
  38. Base64 string `json:"__base64__"`
  39. } `json:"krbextradata"`
  40. Mail []string `json:"mail"`
  41. MemberofindirectHbacrule []string `json:"memberofindirect_hbacrule"`
  42. Dn string `json:"dn"`
  43. Displayname []string `json:"displayname"`
  44. Mepmanagedentry []string `json:"mepmanagedentry"`
  45. Ipauniqueid []string `json:"ipauniqueid"`
  46. Krbloginfailedcount []string `json:"krbloginfailedcount"`
  47. Krbpwdpolicyreference []string `json:"krbpwdpolicyreference"`
  48. Krbprincipalname []string `json:"krbprincipalname"`
  49. Givenname []string `json:"givenname"`
  50. Krblastadminunlock []struct {
  51. Datetime string `json:"__datetime__"`
  52. } `json:"krblastadminunlock"`
  53. Krbpasswordexpiration []struct {
  54. Datetime string `json:"__datetime__"`
  55. } `json:"krbpasswordexpiration"`
  56. Krblastfailedauth []struct {
  57. Datetime string `json:"__datetime__"`
  58. } `json:"krblastfailedauth"`
  59. Objectclass []string `json:"objectclass"`
  60. Gidnumber []string `json:"gidnumber"`
  61. Gecos []string `json:"gecos"`
  62. Sn []string `json:"sn"`
  63. MemberofSudorule []string `json:"memberof_sudorule"`
  64. Krblastpwdchange []struct {
  65. Datetime string `json:"__datetime__"`
  66. } `json:"krblastpwdchange"`
  67. Initials []string `json:"initials"`
  68. } `json:"result"`
  69. Value string `json:"value"`
  70. Summary interface{} `json:"summary"`
  71. } `json:"result"`
  72. Version string `json:"version"`
  73. Error interface{} `json:"error"`
  74. ID int `json:"id"`
  75. Principal string `json:"principal"`
  76. }
  77. type ServiceList struct {
  78. TotalCount string `json:"TotalCount,omitempty"`
  79. ActiveCount string `json:"ActiveCount,omitempty"`
  80. ActiveVMCount string `json:"ActiveVMCount,omitempty"`
  81. TotalVMCount string `json:"TotalVMCount,omitempty"`
  82. }
  83. type user_findResult struct {
  84. Error interface{} `json:"error"`
  85. ID int `json:"id"`
  86. Principal string `json:"principal"`
  87. Result struct {
  88. Count int `json:"count"`
  89. Result []struct {
  90. Dn string `json:"dn"`
  91. Gidnumber []string `json:"gidnumber"`
  92. Givenname []string `json:"givenname"`
  93. Homedirectory []string `json:"homedirectory"`
  94. Krbcanonicalname []string `json:"krbcanonicalname"`
  95. Krbprincipalname []string `json:"krbprincipalname"`
  96. Loginshell []string `json:"loginshell"`
  97. Mail []string `json:"mail"`
  98. Nsaccountlock bool `json:"nsaccountlock"`
  99. Sn []string `json:"sn"`
  100. Telephonenumber []string `json:"telephonenumber"`
  101. UID []string `json:"uid"`
  102. Uidnumber []string `json:"uidnumber"`
  103. } `json:"result"`
  104. Summary string `json:"summary"`
  105. Truncated bool `json:"truncated"`
  106. } `json:"result"`
  107. Version string `json:"version"`
  108. }
  109. var User = userInfo{}
  110. func (h *handler) login(c echo.Context) error {
  111. username := c.FormValue("username")
  112. password := c.FormValue("password")
  113. _url := URL + "/ipa/session/login_password"
  114. method := "POST"
  115. params := url.Values{}
  116. params.Add("user", username)
  117. params.Add("password", password)
  118. payload := strings.NewReader(params.Encode())
  119. tr := &http.Transport{
  120. TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
  121. }
  122. client := &http.Client{Transport: tr}
  123. req, err := http.NewRequest(method, _url, payload)
  124. audit("Recieved Login request from: " + RealIP)
  125. if err != nil {
  126. fmt.Println(err)
  127. }
  128. req.Header.Add("Referer", URL+"/ipa")
  129. req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
  130. req.Header.Add("Accept", "text/plain")
  131. res, err := client.Do(req)
  132. cockie := res.Cookies()
  133. token := cockie[0].Raw
  134. ba := basicAuth(username, password)
  135. token = token + "Basic " + ba + ";"
  136. //fmt.Println("Token:", token)
  137. defer res.Body.Close()
  138. //fmt.Println(res.StatusCode)
  139. if res.StatusCode == 200 {
  140. User = getUserInfo(token, username)
  141. //fmt.Println(user.Result)
  142. tokens, err := generateTokenPair(User, token)
  143. if err != nil {
  144. return err
  145. }
  146. return c.JSON(http.StatusOK, tokens)
  147. }
  148. return echo.ErrUnauthorized
  149. }
  150. func getUserInfo(token string, username string) userInfo {
  151. //fmt.Println("Checking for User: ", username)
  152. url := URL + "/ipa/session/json"
  153. method := "POST"
  154. _json := fmt.Sprintf(`
  155. {
  156. "method": "user_show",
  157. "params": [
  158. [
  159. "%s"
  160. ],
  161. {
  162. "all": true,
  163. "version": "2.215"
  164. }
  165. ],
  166. "id": 0
  167. }
  168. `, username)
  169. payload := strings.NewReader(_json)
  170. tr := &http.Transport{
  171. TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
  172. }
  173. client := &http.Client{Transport: tr}
  174. req, err := http.NewRequest(method, url, payload)
  175. if err != nil {
  176. fmt.Println(err)
  177. }
  178. req.Header.Add("Referer", URL+"/ipa")
  179. req.Header.Add("Content-Type", "application/json")
  180. req.Header.Add("Accept", "text/plain")
  181. req.Header.Add("Cookie", token)
  182. res, err := client.Do(req)
  183. defer res.Body.Close()
  184. body, err := ioutil.ReadAll(res.Body)
  185. //fmt.Println("Getting Data for Response: ", body)
  186. user := userInfo{}
  187. json.Unmarshal(body, &user)
  188. //fmt.Println("Getting Data for User: ", user.Result.Result.Uidnumber)
  189. return user
  190. }
  191. func (h *handler) uuidgen(c echo.Context) error {
  192. resource := c.FormValue("resource")
  193. id, code := uuidgen(resource)
  194. resp := _response{
  195. Origin: "uuidgen",
  196. Message: id,
  197. Code: code,
  198. }
  199. //b, _ := json.MarshalIndent(resp, "", " ")
  200. //return c.String(http.StatusOK, string(b))
  201. return c.JSON(http.StatusOK, resp)
  202. }
  203. func (h *handler) addUser(c echo.Context) error {
  204. type apiErr struct {
  205. Result interface{} `json:"result"`
  206. Error struct {
  207. Code int `json:"code"`
  208. Message string `json:"message"`
  209. Data struct {
  210. } `json:"data"`
  211. Name string `json:"name"`
  212. } `json:"error"`
  213. ID int `json:"id"`
  214. Principal string `json:"principal"`
  215. Version string `json:"version"`
  216. }
  217. type addUser struct {
  218. Result struct {
  219. Result struct {
  220. Displayname []string `json:"displayname"`
  221. UID []string `json:"uid"`
  222. Uidnumber []string `json:"uidnumber"`
  223. Objectclass []string `json:"objectclass"`
  224. Sn []string `json:"sn"`
  225. Telephonenumber []string `json:"telephonenumber"`
  226. Cn []string `json:"cn"`
  227. Krbpasswordexpiration []struct {
  228. Datetime string `json:"__datetime__"`
  229. } `json:"krbpasswordexpiration"`
  230. Mobile []string `json:"mobile"`
  231. Krbprincipalname []string `json:"krbprincipalname"`
  232. Ipauniqueid []string `json:"ipauniqueid"`
  233. Givenname []string `json:"givenname"`
  234. Gidnumber []string `json:"gidnumber"`
  235. Krbcanonicalname []string `json:"krbcanonicalname"`
  236. Mail []string `json:"mail"`
  237. Initials []string `json:"initials"`
  238. Homedirectory []string `json:"homedirectory"`
  239. Loginshell []string `json:"loginshell"`
  240. Gecos []string `json:"gecos"`
  241. Randompassword string `json:"randompassword"`
  242. HasPassword bool `json:"has_password"`
  243. HasKeytab bool `json:"has_keytab"`
  244. MemberofGroup []string `json:"memberof_group"`
  245. Dn string `json:"dn"`
  246. } `json:"result"`
  247. Value string `json:"value"`
  248. Summary string `json:"summary"`
  249. } `json:"result"`
  250. Error string `json:"error"`
  251. ID int `json:"id"`
  252. Principal string `json:"principal"`
  253. Version string `json:"version"`
  254. }
  255. user := c.Get("user").(*jwt.Token)
  256. claims := user.Claims.(jwt.MapClaims)
  257. _sha256 := sha256.Sum256([]byte(string(claims["name"].(string))))
  258. var hashChannel_ = make(chan []byte, 1)
  259. hashChannel_ <- _sha256[:]
  260. token := decrypt(<-hashChannel_, claims["IPAToken"].(string))
  261. b, err := json.Marshal(claims)
  262. if err != nil {
  263. fmt.Println("err:", err)
  264. }
  265. //fmt.Println("AddUser Claims: ", claims)
  266. //fmt.Println("AddUser token: ", token)
  267. username := c.FormValue("Username")
  268. sha256 := sha256.Sum256([]byte(username))
  269. var hashChannel = make(chan []byte, 1)
  270. hashChannel <- sha256[:]
  271. ciphertext := encrypt(<-hashChannel, string(b))
  272. //fmt.Println("B: ", string(b))
  273. //fmt.Println("Ciphere: ", ciphertext)
  274. sn := c.FormValue("Lname")
  275. cn := c.FormValue("FullName")
  276. givenname := c.FormValue("Fname")
  277. displayname := c.FormValue("displayname")
  278. krbpasswordexpiration := c.FormValue("krbpasswordexpiration")
  279. mail := c.FormValue("mail")
  280. telephonenumber := c.FormValue("telephonenumber")
  281. mobile := c.FormValue("mobile")
  282. _url := URL + "/ipa/session/json"
  283. method := "POST"
  284. _json := fmt.Sprintf(`
  285. {
  286. "id": 0,
  287. "method": "user_add/1",
  288. "params": [
  289. [
  290. "%s"
  291. ],
  292. {
  293. "givenname": "%s",
  294. "sn": "%s",
  295. "cn":"%s",
  296. "displayname":"%s",
  297. "loginshell":"/usr/sbin/nologin",
  298. "krbpasswordexpiration":"%s",
  299. "mail":"%s",
  300. "random":"true",
  301. "gidnumber":"599200001",
  302. "telephonenumber":"%s",
  303. "mobile":"%s",
  304. "version": "2.235"
  305. }
  306. ]
  307. }
  308. `, username, givenname, sn, cn, displayname, krbpasswordexpiration, mail, telephonenumber, mobile)
  309. __json := fmt.Sprintf(`
  310. {
  311. "id": 0,
  312. "method": "group_add_member/1",
  313. "params": [
  314. [
  315. "svcaccounts"
  316. ],
  317. {
  318. "user": [
  319. "%s"
  320. ],
  321. "version": "2.235"
  322. }
  323. ]
  324. }
  325. `, username)
  326. payload := strings.NewReader(_json)
  327. _payload := strings.NewReader(__json)
  328. tr := &http.Transport{
  329. TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
  330. }
  331. client := &http.Client{Transport: tr}
  332. req, err := http.NewRequest(method, _url, payload)
  333. if err != nil {
  334. fmt.Println(err)
  335. }
  336. req.Header.Add("Referer", URL+"/ipa")
  337. req.Header.Add("Content-Type", "application/json")
  338. req.Header.Add("Accept", "text/plain")
  339. req.Header.Add("Cookie", token)
  340. res, err := client.Do(req)
  341. _req, _ := http.NewRequest(method, _url, _payload)
  342. _req.Header.Add("Referer", URL+"/ipa")
  343. _req.Header.Add("Content-Type", "application/json")
  344. _req.Header.Add("Accept", "text/plain")
  345. _req.Header.Add("Cookie", token)
  346. client.Do(_req)
  347. defer res.Body.Close()
  348. body, err := ioutil.ReadAll(res.Body)
  349. result := addUser{}
  350. _err := json.Unmarshal(body, &result)
  351. // fmt.Println(result)
  352. if _err != nil {
  353. _apiErr := apiErr{}
  354. __err := json.Unmarshal(body, &_apiErr)
  355. if __err != nil {
  356. return c.String(http.StatusBadRequest, "Error of error!!")
  357. }
  358. //res2B, _ := json.Marshal(_apiErr)
  359. //return c.String(http.StatusBadRequest, string(res2B))
  360. resp := _response{
  361. Origin: "AddUser",
  362. Message: _apiErr.Error.Name + ": " + _apiErr.Error.Message,
  363. Code: _apiErr.Error.Code,
  364. }
  365. return c.JSON(http.StatusNotFound, resp)
  366. //return c.JSON(http.StatusBadRequest, _apiErr)
  367. }
  368. shortLink := setResetKey(ciphertext, username)
  369. go sendMail("Welcome to ZiCloud\r\n Your temporary link is :\r\n http://zi-cloud.ir/reset/"+url.QueryEscape(shortLink), "Welcome to ZiCloud", mail)
  370. //go sendMail("Welcome to ZiCloud\r\n Your temporary link is :\r\n https://zicloud.com/reset/"+url.QueryEscape(ciphertext), "Welcome to ZiCloud", mail)
  371. resp := _response{
  372. Origin: "addUser",
  373. Message: "Done, Reset Link was sent to your email",
  374. Code: 1000,
  375. }
  376. //b, _ = json.MarshalIndent(resp, "", " ")
  377. //return c.String(http.StatusOK, string(b))
  378. return c.JSON(http.StatusOK, resp)
  379. }
  380. func (h *handler) disableUser(c echo.Context) error {
  381. user := c.Get("user").(*jwt.Token)
  382. claims := user.Claims.(jwt.MapClaims)
  383. _sha256 := sha256.Sum256([]byte(string(claims["name"].(string))))
  384. var hashChannel_ = make(chan []byte, 1)
  385. hashChannel_ <- _sha256[:]
  386. token := decrypt(<-hashChannel_, claims["IPAToken"].(string))
  387. username := c.FormValue("Username")
  388. url := URL + "/ipa/session/json"
  389. method := "POST"
  390. _json := fmt.Sprintf(`
  391. {
  392. "id": 0,
  393. "method": "user_disable/1",
  394. "params": [
  395. [
  396. "%s"
  397. ],
  398. {
  399. "version": "2.235"
  400. }
  401. ]
  402. }
  403. `, username)
  404. payload := strings.NewReader(_json)
  405. tr := &http.Transport{
  406. TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
  407. }
  408. client := &http.Client{Transport: tr}
  409. req, err := http.NewRequest(method, url, payload)
  410. if err != nil {
  411. fmt.Println(err)
  412. }
  413. req.Header.Add("Referer", URL+"/ipa")
  414. req.Header.Add("Content-Type", "application/json")
  415. req.Header.Add("Accept", "text/plain")
  416. req.Header.Add("Cookie", token)
  417. res, err := client.Do(req)
  418. if err != nil {
  419. //return c.String(http.StatusBadRequest, "Error"+err.Error())
  420. return c.JSON(http.StatusOK, "Error"+err.Error())
  421. }
  422. defer res.Body.Close()
  423. resp := _response{
  424. Origin: "disableUser",
  425. Message: "Done",
  426. Code: 1000,
  427. }
  428. //b, _ := json.MarshalIndent(resp, "", " ")
  429. return c.JSON(http.StatusOK, resp)
  430. //return c.String(http.StatusOK, string(b))
  431. }
  432. func (h *handler) resetUser(c echo.Context) error {
  433. type keyJson struct {
  434. IPAToken string `json:"IPAToken"`
  435. Admin bool `json:"admin"`
  436. Exp int `json:"exp"`
  437. Memberof []string `json:"memberof"`
  438. Name string `json:"name"`
  439. Sub int `json:"sub"`
  440. }
  441. t := time.Now() //%Y%m%d%H%M%SZ
  442. t = t.Add(time.Hour * 24 * 60)
  443. //username := c.FormValue("Username")
  444. password := c.FormValue("Password")
  445. short := c.FormValue("key")
  446. key, username := getResetKey(short)
  447. if len(key) < 5 {
  448. resp := _response{
  449. Origin: "resetUser",
  450. Message: "Link has been expired",
  451. Code: 1001,
  452. }
  453. //b, _ := json.MarshalIndent(resp, "", " ")
  454. return c.JSON(http.StatusOK, resp)
  455. }
  456. //key, _ = url.QueryUnescape(key)
  457. _sha256 := sha256.Sum256([]byte(username))
  458. var hashChannel = make(chan []byte, 1)
  459. hashChannel <- _sha256[:]
  460. plainkey := decrypt(<-hashChannel, key)
  461. _plainkey := keyJson{}
  462. json.Unmarshal([]byte(plainkey), &_plainkey)
  463. _name := _plainkey.Name
  464. //_sha256 := sha256.Sum256([]byte(string("")))
  465. var hashChannel_ = make(chan []byte, 1)
  466. __sha256 := sha256.Sum256([]byte(_name))
  467. hashChannel_ <- __sha256[:]
  468. token := decrypt(<-hashChannel_, string(_plainkey.IPAToken))
  469. // token := _plainkey.IPAToken
  470. _url := URL + "/ipa/session/json"
  471. method := "POST"
  472. _json := fmt.Sprintf(`
  473. {
  474. "id": 0,
  475. "method": "user_mod/1",
  476. "params": [
  477. [
  478. "%s"
  479. ],
  480. {
  481. "userpassword":"%s",
  482. "version": "2.235"
  483. }
  484. ]
  485. }
  486. `, username, password)
  487. payload := strings.NewReader(_json)
  488. tr := &http.Transport{
  489. TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
  490. }
  491. client := &http.Client{Transport: tr}
  492. req, err := http.NewRequest(method, _url, payload)
  493. if err != nil {
  494. fmt.Println(err)
  495. }
  496. req.Header.Add("Referer", URL+"/ipa")
  497. req.Header.Add("Content-Type", "application/json")
  498. req.Header.Add("Accept", "text/plain")
  499. req.Header.Add("Cookie", token)
  500. res, err := client.Do(req)
  501. //fmt.Println(token)
  502. //fmt.Println(_json)
  503. //fmt.Println(req)
  504. //fmt.Println(res)
  505. _json = fmt.Sprintf(`
  506. {
  507. "id": 0,
  508. "method": "user_mod/1",
  509. "params": [
  510. [
  511. "%s"
  512. ],
  513. {
  514. "krbpasswordexpiration":"%s",
  515. "version": "2.235"
  516. }
  517. ]
  518. }
  519. `, username, t.Format("2006-01-02")+"Z")
  520. payload = strings.NewReader(_json)
  521. req, err = http.NewRequest(method, _url, payload)
  522. if err != nil {
  523. fmt.Println(err)
  524. }
  525. req.Header.Add("Referer", URL+"/ipa")
  526. req.Header.Add("Content-Type", "application/json")
  527. req.Header.Add("Accept", "text/plain")
  528. req.Header.Add("Cookie", token)
  529. err = nil
  530. res, err = client.Do(req)
  531. //fmt.Println(token)
  532. //fmt.Println(_json)
  533. //fmt.Println(req)
  534. //fmt.Println(res)
  535. if err != nil {
  536. //return c.String(http.StatusBadRequest, "Error"+err.Error())
  537. return c.JSON(http.StatusBadRequest, "Error"+err.Error())
  538. }
  539. defer res.Body.Close()
  540. resp := _response{
  541. Origin: "resetUser",
  542. Message: "Done",
  543. Code: 1000,
  544. }
  545. expireResetKey(username)
  546. //b, _ := json.MarshalIndent(resp, "", " ")
  547. return c.JSON(http.StatusOK, resp)
  548. //return c.String(http.StatusOK, string(b))
  549. }
  550. func (h *handler) dnsrecordadd(c echo.Context) error {
  551. user := c.Get("user").(*jwt.Token)
  552. claims := user.Claims.(jwt.MapClaims)
  553. _sha256 := sha256.Sum256([]byte(string(claims["name"].(string))))
  554. var hashChannel_ = make(chan []byte, 1)
  555. hashChannel_ <- _sha256[:]
  556. token := decrypt(<-hashChannel_, claims["IPAToken"].(string))
  557. recordName := c.FormValue("recordName")
  558. record := c.FormValue("record")
  559. url := URL + "/ipa/session/json"
  560. method := "POST"
  561. _json := fmt.Sprintf(`
  562. {
  563. "id": 0,
  564. "method": "dnsrecord_add/1",
  565. "params": [
  566. [
  567. "ZI-TEL.COM",
  568. {
  569. "__dns_name__": "%s"
  570. }
  571. ],
  572. {
  573. "a_part_ip_address": "%s",
  574. "raw": true,
  575. "version": "2.235"
  576. }
  577. ]
  578. }
  579. `, recordName, record)
  580. payload := strings.NewReader(_json)
  581. tr := &http.Transport{
  582. TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
  583. }
  584. client := &http.Client{Transport: tr}
  585. req, err := http.NewRequest(method, url, payload)
  586. if err != nil {
  587. fmt.Println(err)
  588. }
  589. req.Header.Add("Referer", URL+"/ipa")
  590. req.Header.Add("Content-Type", "application/json")
  591. req.Header.Add("Accept", "text/plain")
  592. req.Header.Add("Cookie", token)
  593. res, err := client.Do(req)
  594. if err != nil {
  595. //return c.String(http.StatusBadRequest, "Error"+err.Error())
  596. return c.JSON(http.StatusBadRequest, "Error"+err.Error())
  597. }
  598. //body, err := ioutil.ReadAll(res.Body)
  599. //_res:=result{}
  600. //json.Unmarshal(body, &_res)
  601. //fmt.Println(_res)
  602. defer res.Body.Close()
  603. resp := _response{
  604. Origin: "dnsrecordadd",
  605. Message: "Done",
  606. Code: 1000,
  607. }
  608. //b, _ := json.MarshalIndent(resp, "", " ")
  609. return c.JSON(http.StatusOK, resp)
  610. //return c.String(http.StatusOK, string(b))
  611. }
  612. func (h *handler) token(c echo.Context) error {
  613. user := c.Get("user").(*jwt.Token)
  614. claims := user.Claims.(jwt.MapClaims)
  615. _sha256 := sha256.Sum256([]byte(string(claims["name"].(string))))
  616. var hashChannel_ = make(chan []byte, 1)
  617. hashChannel_ <- _sha256[:]
  618. token := decrypt(<-hashChannel_, claims["IPAToken"].(string))
  619. username := claims["name"].(string)
  620. //fmt.Println("User: ",username)
  621. //fmt.Println("Token : ",token)
  622. _user := getUserInfo(token, username)
  623. //fmt.Println(_user.Result)
  624. newtokens, err := generateTokenPair(_user, token)
  625. if err != nil {
  626. return err
  627. }
  628. return c.JSON(http.StatusOK, newtokens)
  629. }
  630. func (h *handler) verifyUser(c echo.Context) error {
  631. name := c.FormValue("Username")
  632. //fmt.Println("Name: ", name)
  633. if name == "" {
  634. return c.JSON(http.StatusNotFound, "User NOT Found")
  635. }
  636. username := "admin"
  637. password := "h?_QJp5^&9FNc9w="
  638. _url := URL + "/ipa/session/login_password"
  639. method := "POST"
  640. params := url.Values{}
  641. params.Add("user", username)
  642. params.Add("password", password)
  643. payload := strings.NewReader(params.Encode())
  644. tr := &http.Transport{
  645. TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
  646. }
  647. client := &http.Client{Transport: tr}
  648. req, err := http.NewRequest(method, _url, payload)
  649. audit("Recieved Login request from: " + RealIP)
  650. if err != nil {
  651. fmt.Println(err)
  652. }
  653. req.Header.Add("Referer", URL+"/ipa")
  654. req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
  655. req.Header.Add("Accept", "text/plain")
  656. res, err := client.Do(req)
  657. cockie := res.Cookies()
  658. token := cockie[0].Raw
  659. defer res.Body.Close()
  660. //fmt.Println(token)
  661. if res.StatusCode == 200 {
  662. user := getUserInfo(token, name)
  663. if user.Result.Value != name {
  664. resp := _response{
  665. Origin: "VerifyUser",
  666. Message: "User Not Found",
  667. Code: 1000,
  668. }
  669. //b, _errr := json.MarshalIndent(resp, "", " ")
  670. //b, _= json.Marshal(resp)
  671. //if _errr != nil {
  672. // fmt.Println(_errr)
  673. //}
  674. //fmt.Print(string(b))
  675. return c.JSON(http.StatusOK, resp)
  676. }
  677. }
  678. resp := _response{
  679. Origin: "VerifyUser",
  680. Message: "User Found",
  681. Code: 1001,
  682. }
  683. //b, _ := json.MarshalIndent(resp, "", " ")
  684. return c.JSON(http.StatusNotFound, resp)
  685. }
  686. func (h *handler) forgetpassword(c echo.Context) error {
  687. user := c.Get("user").(*jwt.Token)
  688. claims := user.Claims.(jwt.MapClaims)
  689. _sha256 := sha256.Sum256([]byte(string(claims["name"].(string))))
  690. var hashChannel_ = make(chan []byte, 1)
  691. hashChannel_ <- _sha256[:]
  692. token := decrypt(<-hashChannel_, claims["IPAToken"].(string))
  693. _type := c.FormValue("type")
  694. _data := c.FormValue("data")
  695. url := URL + "/ipa/session/json"
  696. method := "POST"
  697. __type, _ := strconv.Atoi(_type)
  698. _json := ""
  699. if __type == 1 {
  700. // email
  701. _json = fmt.Sprintf(`
  702. {
  703. "id": 0,
  704. "method": "user_find/1",
  705. "params": [
  706. [],
  707. {
  708. "mail": [
  709. "%s"
  710. ],
  711. "version": "2.235"
  712. }
  713. ]
  714. }
  715. `, _data)
  716. } else if __type == 2 {
  717. // username
  718. _json = fmt.Sprintf(`
  719. {
  720. "id": 0,
  721. "method": "user_find/1",
  722. "params": [
  723. [
  724. "%s"
  725. ],
  726. {
  727. "version": "2.235"
  728. }
  729. ]
  730. }
  731. `, _data)
  732. } else if __type == 3 {
  733. //mobile
  734. _json = fmt.Sprintf(`
  735. {
  736. "id": 0,
  737. "method": "user_find/1",
  738. "params": [
  739. [],
  740. {
  741. "mobile": [
  742. "%s"
  743. ],
  744. "version": "2.235"
  745. }
  746. ]
  747. }
  748. `, _data)
  749. } else {
  750. resp := _response{
  751. Origin: "forgetpassword",
  752. Message: "unknown requested type",
  753. Code: 1001,
  754. }
  755. return c.JSON(http.StatusNotFound, resp)
  756. }
  757. //fmt.Println(_json)
  758. payload := strings.NewReader(_json)
  759. tr := &http.Transport{
  760. TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
  761. }
  762. client := &http.Client{Transport: tr}
  763. req, err := http.NewRequest(method, url, payload)
  764. if err != nil {
  765. fmt.Println(err)
  766. }
  767. req.Header.Add("Referer", URL+"/ipa")
  768. req.Header.Add("Content-Type", "application/json")
  769. req.Header.Add("Accept", "text/plain")
  770. req.Header.Add("Cookie", token)
  771. res, err := client.Do(req)
  772. defer res.Body.Close()
  773. body, err := ioutil.ReadAll(res.Body)
  774. //fmt.Println("Getting Data for Response: ", body)
  775. _user := user_findResult{}
  776. json.Unmarshal(body, &_user)
  777. fmt.Println("find in forgetpass : ", _user.Result.Count)
  778. if _user.Result.Count != 1 {
  779. resp := _response{
  780. Origin: "forgetpassword",
  781. Message: "Something goes wrong",
  782. Code: 1001,
  783. }
  784. return c.JSON(http.StatusNotFound, resp)
  785. }
  786. b, err := json.Marshal(claims)
  787. if err != nil {
  788. fmt.Println("err:", err)
  789. }
  790. //fmt.Println("AddUser Claims: ", claims)
  791. //fmt.Println("AddUser token: ", token)
  792. username := _user.Result.Result[0].UID[0]
  793. sha256 := sha256.Sum256([]byte(username))
  794. var hashChannel = make(chan []byte, 1)
  795. hashChannel <- sha256[:]
  796. ciphertext := encrypt(<-hashChannel, string(b))
  797. shortLink := setResetKey(ciphertext, username)
  798. key, _ := getResetKey(username)
  799. if len(key) > 5 {
  800. resp := _response{
  801. Origin: "forgetpassword",
  802. Message: "A resetLink request with this email already exists",
  803. Code: 1003,
  804. }
  805. return c.JSON(http.StatusNotFound, resp)
  806. }
  807. go sendMail("Your temporary link is :\r\n https://zicloud.com/reset/"+shortLink, "ResetPassword Link", _user.Result.Result[0].Mail[0])
  808. resp := _response{
  809. Origin: "forgetpassword",
  810. Message: "You will receive an email with a link to reset your password",
  811. Code: 1000,
  812. }
  813. return c.JSON(http.StatusNotFound, resp)
  814. }
  815. func setResetKey(key string, username string) string {
  816. short := uniuri.NewLen(32)
  817. db, err := sql.Open("mysql", MySQLUSER+":"+MySQLPASS+"@tcp(127.0.0.1:3306)/zicloud")
  818. if err != nil {
  819. return ""
  820. }
  821. defer db.Close()
  822. insert, err := db.Query("INSERT INTO url_shortener VALUES ( '" + short + "'," +
  823. "'" + key + "'," +
  824. "NOW() + INTERVAL 1 HOUR" + "," +
  825. "'" + "setResetKey" + "'," +
  826. "'" + username + "'," +
  827. "1" +
  828. " )")
  829. defer insert.Close()
  830. return short
  831. }
  832. func getResetKey(short string) (string, string) {
  833. db, _ := sql.Open("mysql", MySQLUSER+":"+MySQLPASS+"@tcp(127.0.0.1:3306)/zicloud")
  834. results, _ := db.Query("SELECT `long` as `long`, related_obj as username FROM url_shortener where active=1 and short='" + short + "' and expiration > NOW()")
  835. var key, username string
  836. for results.Next() {
  837. err := results.Scan(&key, &username)
  838. if err != nil {
  839. return "ERR", "ERR"
  840. }
  841. }
  842. return key, username
  843. }
  844. func expireResetKey(username string) {
  845. db, err := sql.Open("mysql", MySQLUSER+":"+MySQLPASS+"@tcp(127.0.0.1:3306)/zicloud")
  846. if err != nil {
  847. return
  848. }
  849. update, err := db.Query("update url_shortener set active='0' where related_obj='" + username + "'")
  850. defer db.Close()
  851. defer update.Close()
  852. }
  853. func (h *handler) ListServices(c echo.Context) error {
  854. user := c.Get("user").(*jwt.Token)
  855. claims := user.Claims.(jwt.MapClaims)
  856. //IPAUid:=claims["IPAUid"]
  857. _sha256 := sha256.Sum256([]byte(string(claims["name"].(string))))
  858. var hashChannel_ = make(chan []byte, 1)
  859. hashChannel_ <- _sha256[:]
  860. token := decrypt(<-hashChannel_, claims["IPAToken"].(string))
  861. _BA := strings.Split(token, ";")
  862. BA := _BA[len(_BA)-2]
  863. db, _ := sql.Open("mysql", MySQLUSER+":"+MySQLPASS+"@tcp(127.0.0.1:3306)/zicloud")
  864. results, _ := db.Query("SELECT `type` as `type`, uuid as Service_uuid , active , objectName FROM service_profile where uid=" + claims["IPAUid"].(string))
  865. activeCount := 0
  866. totalCount := 0
  867. activeVMCount := 0
  868. totalVMCount := 0
  869. var cpu, mem float64
  870. var _type, service_uuid, active, objectName string
  871. for results.Next() {
  872. err := results.Scan(&_type, &service_uuid, &active, &objectName)
  873. if err != nil {
  874. resp := _response{
  875. Origin: "ListServices",
  876. Message: "Listing Error",
  877. Code: 1001,
  878. }
  879. //b, _ := json.MarshalIndent(resp, "", " ")
  880. return c.JSON(http.StatusOK, resp)
  881. }
  882. if _type == "VM" {
  883. if active == "1" {
  884. activeCount++
  885. activeVMCount++
  886. //fmt.Println(vmStatistics(BA,service_uuid))
  887. _, _cpu, _mem := vmStatistics(BA, service_uuid)
  888. cpu += _cpu
  889. mem += _mem
  890. }
  891. totalCount++
  892. totalVMCount++
  893. }
  894. }
  895. //fmt.Println(activeVMCount)
  896. //fmt.Println(activeCount)
  897. //fmt.Println(totalCount)
  898. //fmt.Println(totalVMCount)
  899. //SL := ServiceList{
  900. // TotalCount: string(totalCount),
  901. // ActiveCount: string(activeCount),
  902. // ActiveVMCount: string(activeVMCount),
  903. // TotalVMCount: string(totalVMCount),
  904. //}
  905. type AutoGenerated struct {
  906. Message struct {
  907. TotalCount string `json:"TotalCount"`
  908. ActiveCount string `json:"ActiveCount"`
  909. ActiveVMCount string `json:"ActiveVMCount"`
  910. TotalVMCount string `json:"TotalVMCount"`
  911. TotalCPUUsage string `json:"TotalCPUUsage"`
  912. TotalMemUsage string `json:"TotalMemUsage"`
  913. } `json:"message"`
  914. Origin string `json:"origin"`
  915. Code int `json:"code"`
  916. }
  917. resp := AutoGenerated{
  918. Message: struct {
  919. TotalCount string `json:"TotalCount"`
  920. ActiveCount string `json:"ActiveCount"`
  921. ActiveVMCount string `json:"ActiveVMCount"`
  922. TotalVMCount string `json:"TotalVMCount"`
  923. TotalCPUUsage string `json:"TotalCPUUsage"`
  924. TotalMemUsage string `json:"TotalMemUsage"`
  925. }{
  926. TotalCount: strconv.Itoa(totalCount),
  927. ActiveCount: strconv.Itoa(activeCount),
  928. ActiveVMCount: strconv.Itoa(activeVMCount),
  929. TotalVMCount: strconv.Itoa(totalVMCount),
  930. TotalCPUUsage: fmt.Sprintf("%f", 100*cpu/float64(activeVMCount)),
  931. TotalMemUsage: fmt.Sprintf("%f", 100*mem/float64(activeVMCount)),
  932. },
  933. Origin: "ListServices",
  934. Code: 1000,
  935. }
  936. return c.JSON(http.StatusOK, resp)
  937. }