From b174d74018f2af54fe430f5b7aa8d4d93ed3b85b Mon Sep 17 00:00:00 2001 From: App Generator <51070104+app-generator@users.noreply.github.com> Date: Thu, 13 Oct 2022 16:59:47 +0300 Subject: [PATCH] Initial commit --- .dockerignore | 5 + .env | 13 + .gitignore | 33 + CHANGELOG.md | 58 + Dockerfile | 16 + LICENSE.md | 32 + README.md | 204 + apps/__init__.py | 44 + apps/authentication/__init__.py | 12 + apps/authentication/forms.py | 31 + apps/authentication/models.py | 48 + apps/authentication/routes.py | 123 + apps/authentication/util.py | 34 + apps/config.py | 49 + apps/home/__init__.py | 12 + apps/home/routes.py | 54 + apps/static/assets/.gitkeep | 0 apps/static/assets/css/atlantis.css | 7849 +++++++++++++++++ apps/static/assets/css/atlantis.css.map | 1 + apps/static/assets/css/atlantis.min.css | 85 + apps/static/assets/css/bootstrap.min.css | 6 + apps/static/assets/css/demo.css | 305 + apps/static/assets/css/fonts.css | 6479 ++++++++++++++ apps/static/assets/css/fonts.min.css | 4 + .../static/assets/fonts/flaticon/Flaticon.eot | Bin 0 -> 60186 bytes .../static/assets/fonts/flaticon/Flaticon.svg | 2100 +++++ .../static/assets/fonts/flaticon/Flaticon.ttf | Bin 0 -> 60008 bytes .../assets/fonts/flaticon/Flaticon.woff | Bin 0 -> 34720 bytes .../assets/fonts/flaticon/_flaticon.scss | 437 + .../static/assets/fonts/flaticon/flaticon.css | 230 + .../assets/fonts/flaticon/flaticon.html | 1450 +++ .../fonts/fontawesome/fa-brands-400.eot | Bin 0 -> 116516 bytes .../fonts/fontawesome/fa-brands-400.svg | 1148 +++ .../fonts/fontawesome/fa-brands-400.ttf | Bin 0 -> 116280 bytes .../fonts/fontawesome/fa-brands-400.woff | Bin 0 -> 74928 bytes .../fonts/fontawesome/fa-brands-400.woff2 | Bin 0 -> 64144 bytes .../fonts/fontawesome/fa-regular-400.eot | Bin 0 -> 40644 bytes .../fonts/fontawesome/fa-regular-400.svg | 467 + .../fonts/fontawesome/fa-regular-400.ttf | Bin 0 -> 40416 bytes .../fonts/fontawesome/fa-regular-400.woff | Bin 0 -> 18156 bytes .../fonts/fontawesome/fa-regular-400.woff2 | Bin 0 -> 14888 bytes .../assets/fonts/fontawesome/fa-solid-900.eot | Bin 0 -> 168396 bytes .../assets/fonts/fontawesome/fa-solid-900.svg | 2312 +++++ .../assets/fonts/fontawesome/fa-solid-900.ttf | Bin 0 -> 168176 bytes .../fonts/fontawesome/fa-solid-900.woff | Bin 0 -> 80484 bytes .../fonts/fontawesome/fa-solid-900.woff2 | Bin 0 -> 62472 bytes .../simple-line-icons/Simple-Line-Icons.eot | Bin 0 -> 54266 bytes .../simple-line-icons/Simple-Line-Icons.svg | 200 + .../simple-line-icons/Simple-Line-Icons.ttf | Bin 0 -> 54056 bytes .../simple-line-icons/Simple-Line-Icons.woff | Bin 0 -> 81332 bytes .../simple-line-icons/Simple-Line-Icons.woff2 | Bin 0 -> 30064 bytes .../assets/fonts/summernote/summernote.eot | Bin 0 -> 16570 bytes .../assets/fonts/summernote/summernote.ttf | Bin 0 -> 16384 bytes .../assets/fonts/summernote/summernote.woff | Bin 0 -> 10184 bytes apps/static/assets/gulpfile.js | 59 + apps/static/assets/img/arashmil.jpg | Bin 0 -> 5223 bytes apps/static/assets/img/bg-404.jpeg | Bin 0 -> 836122 bytes apps/static/assets/img/bg-abstract.png | Bin 0 -> 1232718 bytes apps/static/assets/img/bg-abstract2.png | Bin 0 -> 622962 bytes apps/static/assets/img/blogpost.jpg | Bin 0 -> 64728 bytes apps/static/assets/img/chadengle.jpg | Bin 0 -> 3849 bytes .../assets/img/examples/example1-300x300.jpg | Bin 0 -> 28014 bytes apps/static/assets/img/examples/example1.jpeg | Bin 0 -> 55484 bytes .../assets/img/examples/example10-300x300.jpg | Bin 0 -> 30770 bytes .../static/assets/img/examples/example10.jpeg | Bin 0 -> 77907 bytes .../assets/img/examples/example11-300x300.jpg | Bin 0 -> 37774 bytes .../static/assets/img/examples/example11.jpeg | Bin 0 -> 91881 bytes .../assets/img/examples/example12-300x300.jpg | Bin 0 -> 40450 bytes .../static/assets/img/examples/example12.jpeg | Bin 0 -> 84041 bytes .../assets/img/examples/example2-300x300.jpg | Bin 0 -> 57129 bytes apps/static/assets/img/examples/example2.jpeg | Bin 0 -> 141153 bytes .../assets/img/examples/example3-300x300.jpg | Bin 0 -> 47299 bytes apps/static/assets/img/examples/example3.jpeg | Bin 0 -> 136345 bytes .../assets/img/examples/example4-300x300.jpg | Bin 0 -> 41519 bytes apps/static/assets/img/examples/example4.jpeg | Bin 0 -> 90344 bytes .../assets/img/examples/example5-300x300.jpg | Bin 0 -> 60051 bytes apps/static/assets/img/examples/example5.jpeg | Bin 0 -> 153185 bytes .../assets/img/examples/example6-300x300.jpg | Bin 0 -> 44738 bytes apps/static/assets/img/examples/example6.jpeg | Bin 0 -> 126385 bytes .../assets/img/examples/example7-300x300.jpg | Bin 0 -> 35330 bytes apps/static/assets/img/examples/example7.jpeg | Bin 0 -> 135194 bytes .../assets/img/examples/example8-300x300.jpg | Bin 0 -> 26516 bytes apps/static/assets/img/examples/example8.jpeg | Bin 0 -> 89649 bytes .../assets/img/examples/example9-300x300.jpg | Bin 0 -> 31053 bytes apps/static/assets/img/examples/example9.jpeg | Bin 0 -> 73924 bytes .../assets/img/examples/logoinvoice.svg | 1 + apps/static/assets/img/examples/product1.jpg | Bin 0 -> 41140 bytes .../static/assets/img/examples/product10.jpeg | Bin 0 -> 95472 bytes .../static/assets/img/examples/product11.jpeg | Bin 0 -> 77279 bytes .../static/assets/img/examples/product12.jpeg | Bin 0 -> 110275 bytes apps/static/assets/img/examples/product2.jpg | Bin 0 -> 93908 bytes apps/static/assets/img/examples/product3.jpg | Bin 0 -> 84929 bytes apps/static/assets/img/examples/product4.jpg | Bin 0 -> 83301 bytes apps/static/assets/img/examples/product5.jpg | Bin 0 -> 43064 bytes apps/static/assets/img/examples/product6.jpg | Bin 0 -> 52550 bytes apps/static/assets/img/examples/product7.jpg | Bin 0 -> 78165 bytes apps/static/assets/img/examples/product8.jpg | Bin 0 -> 61646 bytes apps/static/assets/img/flags/ad.png | Bin 0 -> 643 bytes apps/static/assets/img/flags/ae.png | Bin 0 -> 408 bytes apps/static/assets/img/flags/af.png | Bin 0 -> 604 bytes apps/static/assets/img/flags/ag.png | Bin 0 -> 591 bytes apps/static/assets/img/flags/ai.png | Bin 0 -> 643 bytes apps/static/assets/img/flags/al.png | Bin 0 -> 600 bytes apps/static/assets/img/flags/am.png | Bin 0 -> 497 bytes apps/static/assets/img/flags/an.png | Bin 0 -> 488 bytes apps/static/assets/img/flags/ao.png | Bin 0 -> 428 bytes apps/static/assets/img/flags/ar.png | Bin 0 -> 506 bytes apps/static/assets/img/flags/as.png | Bin 0 -> 647 bytes apps/static/assets/img/flags/at.png | Bin 0 -> 403 bytes apps/static/assets/img/flags/au.png | Bin 0 -> 673 bytes apps/static/assets/img/flags/aw.png | Bin 0 -> 524 bytes apps/static/assets/img/flags/ax.png | Bin 0 -> 663 bytes apps/static/assets/img/flags/az.png | Bin 0 -> 589 bytes apps/static/assets/img/flags/ba.png | Bin 0 -> 593 bytes apps/static/assets/img/flags/bb.png | Bin 0 -> 585 bytes apps/static/assets/img/flags/bd.png | Bin 0 -> 504 bytes apps/static/assets/img/flags/be.png | Bin 0 -> 449 bytes apps/static/assets/img/flags/bf.png | Bin 0 -> 497 bytes apps/static/assets/img/flags/bg.png | Bin 0 -> 462 bytes apps/static/assets/img/flags/bh.png | Bin 0 -> 457 bytes apps/static/assets/img/flags/bi.png | Bin 0 -> 675 bytes apps/static/assets/img/flags/bj.png | Bin 0 -> 486 bytes apps/static/assets/img/flags/bm.png | Bin 0 -> 611 bytes apps/static/assets/img/flags/bn.png | Bin 0 -> 639 bytes apps/static/assets/img/flags/bo.png | Bin 0 -> 500 bytes apps/static/assets/img/flags/br.png | Bin 0 -> 593 bytes apps/static/assets/img/flags/bs.png | Bin 0 -> 526 bytes apps/static/assets/img/flags/bt.png | Bin 0 -> 631 bytes apps/static/assets/img/flags/bv.png | Bin 0 -> 512 bytes apps/static/assets/img/flags/bw.png | Bin 0 -> 443 bytes apps/static/assets/img/flags/by.png | Bin 0 -> 514 bytes apps/static/assets/img/flags/bz.png | Bin 0 -> 600 bytes apps/static/assets/img/flags/ca.png | Bin 0 -> 628 bytes apps/static/assets/img/flags/catalonia.png | Bin 0 -> 398 bytes apps/static/assets/img/flags/cc.png | Bin 0 -> 625 bytes apps/static/assets/img/flags/cd.png | Bin 0 -> 528 bytes apps/static/assets/img/flags/cf.png | Bin 0 -> 614 bytes apps/static/assets/img/flags/cg.png | Bin 0 -> 521 bytes apps/static/assets/img/flags/ch.png | Bin 0 -> 367 bytes apps/static/assets/img/flags/ci.png | Bin 0 -> 453 bytes apps/static/assets/img/flags/ck.png | Bin 0 -> 586 bytes apps/static/assets/img/flags/cl.png | Bin 0 -> 450 bytes apps/static/assets/img/flags/cm.png | Bin 0 -> 525 bytes apps/static/assets/img/flags/cn.png | Bin 0 -> 472 bytes apps/static/assets/img/flags/co.png | Bin 0 -> 483 bytes apps/static/assets/img/flags/cr.png | Bin 0 -> 477 bytes apps/static/assets/img/flags/cs.png | Bin 0 -> 439 bytes apps/static/assets/img/flags/cu.png | Bin 0 -> 563 bytes apps/static/assets/img/flags/cv.png | Bin 0 -> 529 bytes apps/static/assets/img/flags/cx.png | Bin 0 -> 608 bytes apps/static/assets/img/flags/cy.png | Bin 0 -> 428 bytes apps/static/assets/img/flags/cz.png | Bin 0 -> 476 bytes apps/static/assets/img/flags/de.png | Bin 0 -> 545 bytes apps/static/assets/img/flags/dj.png | Bin 0 -> 572 bytes apps/static/assets/img/flags/dk.png | Bin 0 -> 495 bytes apps/static/assets/img/flags/dm.png | Bin 0 -> 620 bytes apps/static/assets/img/flags/do.png | Bin 0 -> 508 bytes apps/static/assets/img/flags/dz.png | Bin 0 -> 582 bytes apps/static/assets/img/flags/ec.png | Bin 0 -> 500 bytes apps/static/assets/img/flags/ee.png | Bin 0 -> 429 bytes apps/static/assets/img/flags/eg.png | Bin 0 -> 465 bytes apps/static/assets/img/flags/eh.png | Bin 0 -> 508 bytes apps/static/assets/img/flags/england.png | Bin 0 -> 496 bytes apps/static/assets/img/flags/er.png | Bin 0 -> 653 bytes apps/static/assets/img/flags/es.png | Bin 0 -> 469 bytes apps/static/assets/img/flags/et.png | Bin 0 -> 592 bytes .../static/assets/img/flags/europeanunion.png | Bin 0 -> 479 bytes apps/static/assets/img/flags/fam.png | Bin 0 -> 532 bytes apps/static/assets/img/flags/fi.png | Bin 0 -> 489 bytes apps/static/assets/img/flags/fj.png | Bin 0 -> 610 bytes apps/static/assets/img/flags/fk.png | Bin 0 -> 648 bytes apps/static/assets/img/flags/fm.png | Bin 0 -> 552 bytes apps/static/assets/img/flags/fo.png | Bin 0 -> 474 bytes apps/static/assets/img/flags/fr.png | Bin 0 -> 545 bytes apps/static/assets/img/flags/ga.png | Bin 0 -> 489 bytes apps/static/assets/img/flags/gb.png | Bin 0 -> 599 bytes apps/static/assets/img/flags/gd.png | Bin 0 -> 637 bytes apps/static/assets/img/flags/ge.png | Bin 0 -> 594 bytes apps/static/assets/img/flags/gf.png | Bin 0 -> 545 bytes apps/static/assets/img/flags/gh.png | Bin 0 -> 490 bytes apps/static/assets/img/flags/gi.png | Bin 0 -> 463 bytes apps/static/assets/img/flags/gl.png | Bin 0 -> 470 bytes apps/static/assets/img/flags/gm.png | Bin 0 -> 493 bytes apps/static/assets/img/flags/gn.png | Bin 0 -> 480 bytes apps/static/assets/img/flags/gp.png | Bin 0 -> 488 bytes apps/static/assets/img/flags/gq.png | Bin 0 -> 537 bytes apps/static/assets/img/flags/gr.png | Bin 0 -> 487 bytes apps/static/assets/img/flags/gs.png | Bin 0 -> 630 bytes apps/static/assets/img/flags/gt.png | Bin 0 -> 493 bytes apps/static/assets/img/flags/gu.png | Bin 0 -> 509 bytes apps/static/assets/img/flags/gw.png | Bin 0 -> 516 bytes apps/static/assets/img/flags/gy.png | Bin 0 -> 645 bytes apps/static/assets/img/flags/hk.png | Bin 0 -> 527 bytes apps/static/assets/img/flags/hm.png | Bin 0 -> 673 bytes apps/static/assets/img/flags/hn.png | Bin 0 -> 537 bytes apps/static/assets/img/flags/hr.png | Bin 0 -> 524 bytes apps/static/assets/img/flags/ht.png | Bin 0 -> 487 bytes apps/static/assets/img/flags/hu.png | Bin 0 -> 432 bytes apps/static/assets/img/flags/id.png | Bin 0 -> 430 bytes apps/static/assets/img/flags/ie.png | Bin 0 -> 481 bytes apps/static/assets/img/flags/il.png | Bin 0 -> 431 bytes apps/static/assets/img/flags/in.png | Bin 0 -> 503 bytes apps/static/assets/img/flags/io.png | Bin 0 -> 658 bytes apps/static/assets/img/flags/iq.png | Bin 0 -> 515 bytes apps/static/assets/img/flags/ir.png | Bin 0 -> 512 bytes apps/static/assets/img/flags/is.png | Bin 0 -> 532 bytes apps/static/assets/img/flags/it.png | Bin 0 -> 420 bytes apps/static/assets/img/flags/jm.png | Bin 0 -> 637 bytes apps/static/assets/img/flags/jo.png | Bin 0 -> 473 bytes apps/static/assets/img/flags/jp.png | Bin 0 -> 420 bytes apps/static/assets/img/flags/ke.png | Bin 0 -> 569 bytes apps/static/assets/img/flags/kg.png | Bin 0 -> 510 bytes apps/static/assets/img/flags/kh.png | Bin 0 -> 549 bytes apps/static/assets/img/flags/ki.png | Bin 0 -> 656 bytes apps/static/assets/img/flags/km.png | Bin 0 -> 577 bytes apps/static/assets/img/flags/kn.png | Bin 0 -> 604 bytes apps/static/assets/img/flags/kp.png | Bin 0 -> 561 bytes apps/static/assets/img/flags/kr.png | Bin 0 -> 592 bytes apps/static/assets/img/flags/kw.png | Bin 0 -> 486 bytes apps/static/assets/img/flags/ky.png | Bin 0 -> 643 bytes apps/static/assets/img/flags/kz.png | Bin 0 -> 616 bytes apps/static/assets/img/flags/la.png | Bin 0 -> 563 bytes apps/static/assets/img/flags/lb.png | Bin 0 -> 517 bytes apps/static/assets/img/flags/lc.png | Bin 0 -> 520 bytes apps/static/assets/img/flags/li.png | Bin 0 -> 537 bytes apps/static/assets/img/flags/lk.png | Bin 0 -> 627 bytes apps/static/assets/img/flags/lr.png | Bin 0 -> 466 bytes apps/static/assets/img/flags/ls.png | Bin 0 -> 628 bytes apps/static/assets/img/flags/lt.png | Bin 0 -> 508 bytes apps/static/assets/img/flags/lu.png | Bin 0 -> 481 bytes apps/static/assets/img/flags/lv.png | Bin 0 -> 465 bytes apps/static/assets/img/flags/ly.png | Bin 0 -> 419 bytes apps/static/assets/img/flags/ma.png | Bin 0 -> 432 bytes apps/static/assets/img/flags/mc.png | Bin 0 -> 380 bytes apps/static/assets/img/flags/md.png | Bin 0 -> 566 bytes apps/static/assets/img/flags/me.png | Bin 0 -> 448 bytes apps/static/assets/img/flags/mg.png | Bin 0 -> 453 bytes apps/static/assets/img/flags/mh.png | Bin 0 -> 628 bytes apps/static/assets/img/flags/mk.png | Bin 0 -> 664 bytes apps/static/assets/img/flags/ml.png | Bin 0 -> 474 bytes apps/static/assets/img/flags/mm.png | Bin 0 -> 483 bytes apps/static/assets/img/flags/mn.png | Bin 0 -> 492 bytes apps/static/assets/img/flags/mo.png | Bin 0 -> 588 bytes apps/static/assets/img/flags/mp.png | Bin 0 -> 597 bytes apps/static/assets/img/flags/mq.png | Bin 0 -> 655 bytes apps/static/assets/img/flags/mr.png | Bin 0 -> 569 bytes apps/static/assets/img/flags/ms.png | Bin 0 -> 614 bytes apps/static/assets/img/flags/mt.png | Bin 0 -> 420 bytes apps/static/assets/img/flags/mu.png | Bin 0 -> 496 bytes apps/static/assets/img/flags/mv.png | Bin 0 -> 542 bytes apps/static/assets/img/flags/mw.png | Bin 0 -> 529 bytes apps/static/assets/img/flags/mx.png | Bin 0 -> 574 bytes apps/static/assets/img/flags/my.png | Bin 0 -> 571 bytes apps/static/assets/img/flags/mz.png | Bin 0 -> 584 bytes apps/static/assets/img/flags/na.png | Bin 0 -> 647 bytes apps/static/assets/img/flags/nc.png | Bin 0 -> 591 bytes apps/static/assets/img/flags/ne.png | Bin 0 -> 537 bytes apps/static/assets/img/flags/nf.png | Bin 0 -> 602 bytes apps/static/assets/img/flags/ng.png | Bin 0 -> 482 bytes apps/static/assets/img/flags/ni.png | Bin 0 -> 508 bytes apps/static/assets/img/flags/nl.png | Bin 0 -> 453 bytes apps/static/assets/img/flags/no.png | Bin 0 -> 512 bytes apps/static/assets/img/flags/np.png | Bin 0 -> 443 bytes apps/static/assets/img/flags/nr.png | Bin 0 -> 527 bytes apps/static/assets/img/flags/nu.png | Bin 0 -> 572 bytes apps/static/assets/img/flags/nz.png | Bin 0 -> 639 bytes apps/static/assets/img/flags/om.png | Bin 0 -> 478 bytes apps/static/assets/img/flags/pa.png | Bin 0 -> 519 bytes apps/static/assets/img/flags/pe.png | Bin 0 -> 397 bytes apps/static/assets/img/flags/pf.png | Bin 0 -> 498 bytes apps/static/assets/img/flags/pg.png | Bin 0 -> 593 bytes apps/static/assets/img/flags/ph.png | Bin 0 -> 538 bytes apps/static/assets/img/flags/pk.png | Bin 0 -> 569 bytes apps/static/assets/img/flags/pl.png | Bin 0 -> 374 bytes apps/static/assets/img/flags/pm.png | Bin 0 -> 689 bytes apps/static/assets/img/flags/pn.png | Bin 0 -> 657 bytes apps/static/assets/img/flags/pr.png | Bin 0 -> 556 bytes apps/static/assets/img/flags/ps.png | Bin 0 -> 472 bytes apps/static/assets/img/flags/pt.png | Bin 0 -> 554 bytes apps/static/assets/img/flags/pw.png | Bin 0 -> 550 bytes apps/static/assets/img/flags/py.png | Bin 0 -> 473 bytes apps/static/assets/img/flags/qa.png | Bin 0 -> 450 bytes apps/static/assets/img/flags/re.png | Bin 0 -> 545 bytes apps/static/assets/img/flags/readme.txt | 9 + apps/static/assets/img/flags/ro.png | Bin 0 -> 495 bytes apps/static/assets/img/flags/rs.png | Bin 0 -> 423 bytes apps/static/assets/img/flags/ru.png | Bin 0 -> 420 bytes apps/static/assets/img/flags/rw.png | Bin 0 -> 533 bytes apps/static/assets/img/flags/sa.png | Bin 0 -> 551 bytes apps/static/assets/img/flags/sb.png | Bin 0 -> 624 bytes apps/static/assets/img/flags/sc.png | Bin 0 -> 608 bytes apps/static/assets/img/flags/scotland.png | Bin 0 -> 649 bytes apps/static/assets/img/flags/sd.png | Bin 0 -> 492 bytes apps/static/assets/img/flags/se.png | Bin 0 -> 542 bytes apps/static/assets/img/flags/sg.png | Bin 0 -> 468 bytes apps/static/assets/img/flags/sh.png | Bin 0 -> 645 bytes apps/static/assets/img/flags/si.png | Bin 0 -> 510 bytes apps/static/assets/img/flags/sj.png | Bin 0 -> 512 bytes apps/static/assets/img/flags/sk.png | Bin 0 -> 562 bytes apps/static/assets/img/flags/sl.png | Bin 0 -> 436 bytes apps/static/assets/img/flags/sm.png | Bin 0 -> 502 bytes apps/static/assets/img/flags/sn.png | Bin 0 -> 532 bytes apps/static/assets/img/flags/so.png | Bin 0 -> 527 bytes apps/static/assets/img/flags/sr.png | Bin 0 -> 513 bytes apps/static/assets/img/flags/st.png | Bin 0 -> 584 bytes apps/static/assets/img/flags/sv.png | Bin 0 -> 501 bytes apps/static/assets/img/flags/sy.png | Bin 0 -> 422 bytes apps/static/assets/img/flags/sz.png | Bin 0 -> 643 bytes apps/static/assets/img/flags/tc.png | Bin 0 -> 624 bytes apps/static/assets/img/flags/td.png | Bin 0 -> 570 bytes apps/static/assets/img/flags/tf.png | Bin 0 -> 527 bytes apps/static/assets/img/flags/tg.png | Bin 0 -> 562 bytes apps/static/assets/img/flags/th.png | Bin 0 -> 452 bytes apps/static/assets/img/flags/tj.png | Bin 0 -> 496 bytes apps/static/assets/img/flags/tk.png | Bin 0 -> 638 bytes apps/static/assets/img/flags/tl.png | Bin 0 -> 514 bytes apps/static/assets/img/flags/tm.png | Bin 0 -> 593 bytes apps/static/assets/img/flags/tn.png | Bin 0 -> 495 bytes apps/static/assets/img/flags/to.png | Bin 0 -> 426 bytes apps/static/assets/img/flags/tr.png | Bin 0 -> 492 bytes apps/static/assets/img/flags/tt.png | Bin 0 -> 617 bytes apps/static/assets/img/flags/tv.png | Bin 0 -> 536 bytes apps/static/assets/img/flags/tw.png | Bin 0 -> 465 bytes apps/static/assets/img/flags/tz.png | Bin 0 -> 642 bytes apps/static/assets/img/flags/ua.png | Bin 0 -> 446 bytes apps/static/assets/img/flags/ug.png | Bin 0 -> 531 bytes apps/static/assets/img/flags/um.png | Bin 0 -> 571 bytes apps/static/assets/img/flags/us.png | Bin 0 -> 609 bytes apps/static/assets/img/flags/uy.png | Bin 0 -> 532 bytes apps/static/assets/img/flags/uz.png | Bin 0 -> 515 bytes apps/static/assets/img/flags/va.png | Bin 0 -> 553 bytes apps/static/assets/img/flags/vc.png | Bin 0 -> 577 bytes apps/static/assets/img/flags/ve.png | Bin 0 -> 528 bytes apps/static/assets/img/flags/vg.png | Bin 0 -> 630 bytes apps/static/assets/img/flags/vi.png | Bin 0 -> 616 bytes apps/static/assets/img/flags/vn.png | Bin 0 -> 474 bytes apps/static/assets/img/flags/vu.png | Bin 0 -> 604 bytes apps/static/assets/img/flags/wales.png | Bin 0 -> 652 bytes apps/static/assets/img/flags/wf.png | Bin 0 -> 554 bytes apps/static/assets/img/flags/ws.png | Bin 0 -> 476 bytes apps/static/assets/img/flags/ye.png | Bin 0 -> 413 bytes apps/static/assets/img/flags/yt.png | Bin 0 -> 593 bytes apps/static/assets/img/flags/za.png | Bin 0 -> 642 bytes apps/static/assets/img/flags/zm.png | Bin 0 -> 500 bytes apps/static/assets/img/flags/zw.png | Bin 0 -> 574 bytes apps/static/assets/img/icon.ico | Bin 0 -> 4286 bytes apps/static/assets/img/icon.png | Bin 0 -> 673 bytes apps/static/assets/img/icon.svg | 1 + apps/static/assets/img/img-shadow.gvdesign | Bin 0 -> 1675 bytes apps/static/assets/img/img-shadow.png | Bin 0 -> 26085 bytes apps/static/assets/img/jm_denis.jpg | Bin 0 -> 3072 bytes apps/static/assets/img/logo.svg | 1 + apps/static/assets/img/logo2.svg | 1 + apps/static/assets/img/logoalternatif.svg | 1 + apps/static/assets/img/logoproduct.svg | 1 + apps/static/assets/img/logoproduct2.svg | 1 + apps/static/assets/img/logoproduct3.svg | 1 + apps/static/assets/img/mlane.jpg | Bin 0 -> 15450 bytes .../assets/img/productimg/product1.jpeg | Bin 0 -> 7730 bytes .../assets/img/productimg/product2.jpeg | Bin 0 -> 14555 bytes .../assets/img/productimg/product3.jpeg | Bin 0 -> 8851 bytes .../assets/img/productimg/product4.jpeg | Bin 0 -> 10747 bytes .../assets/img/productimg/product5.jpeg | Bin 0 -> 14627 bytes .../assets/img/productimg/product6.jpeg | Bin 0 -> 9740 bytes .../assets/img/productimg/product7.jpeg | Bin 0 -> 17044 bytes .../assets/img/productimg/product8.jpeg | Bin 0 -> 6857 bytes .../assets/img/productimg/product9.jpeg | Bin 0 -> 14775 bytes apps/static/assets/img/profile.jpg | Bin 0 -> 19934 bytes apps/static/assets/img/profile2.jpg | Bin 0 -> 11365 bytes apps/static/assets/img/sauro.jpg | Bin 0 -> 3341 bytes apps/static/assets/img/talha.jpg | Bin 0 -> 2865 bytes apps/static/assets/img/visa.svg | 1 + apps/static/assets/js/atlantis.js | 389 + apps/static/assets/js/atlantis.min.js | 1 + apps/static/assets/js/atlantis2.js | 449 + apps/static/assets/js/core/bootstrap.min.js | 6 + .../static/assets/js/core/jquery.3.2.1.min.js | 4 + apps/static/assets/js/core/popper.min.js | 5 + apps/static/assets/js/demo.js | 288 + .../bootstrap-notify/bootstrap-notify.min.js | 1 + .../js/plugin/chart-circle/circles.min.js | 2 + .../assets/js/plugin/chart.js/chart.min.js | 20 + .../js/plugin/datatables/datatables.min.js | 24 + .../jquery-scrollbar/jquery.scrollbar.min.js | 16 + .../jquery-ui-1.12.1.custom/jquery-ui.min.js | 8 + .../jquery.ui.touch-punch.min.js | 11 + .../jquery.sparkline/jquery.sparkline.min.js | 5 + .../js/plugin/jqvmap/jquery.vmap.min.js | 10 + .../maps/continents/jquery.vmap.africa.js | 2 + .../maps/continents/jquery.vmap.asia.js | 2 + .../maps/continents/jquery.vmap.australia.js | 2 + .../maps/continents/jquery.vmap.europe.js | 2 + .../continents/jquery.vmap.north-america.js | 2 + .../continents/jquery.vmap.south-america.js | 2 + .../plugin/jqvmap/maps/jquery.vmap.algeria.js | 2 + .../jqvmap/maps/jquery.vmap.argentina.js | 1 + .../plugin/jqvmap/maps/jquery.vmap.brazil.js | 2 + .../plugin/jqvmap/maps/jquery.vmap.canada.js | 2 + .../plugin/jqvmap/maps/jquery.vmap.croatia.js | 1 + .../plugin/jqvmap/maps/jquery.vmap.europe.js | 2 + .../plugin/jqvmap/maps/jquery.vmap.france.js | 1 + .../plugin/jqvmap/maps/jquery.vmap.germany.js | 2 + .../plugin/jqvmap/maps/jquery.vmap.greece.js | 1 + .../jqvmap/maps/jquery.vmap.indonesia.js | 5 + .../js/plugin/jqvmap/maps/jquery.vmap.iran.js | 6 + .../js/plugin/jqvmap/maps/jquery.vmap.iraq.js | 1 + .../maps/jquery.vmap.new_regions_france.js | 32 + .../plugin/jqvmap/maps/jquery.vmap.russia.js | 2 + .../plugin/jqvmap/maps/jquery.vmap.serbia.js | 6 + .../plugin/jqvmap/maps/jquery.vmap.tunisia.js | 2 + .../plugin/jqvmap/maps/jquery.vmap.turkey.js | 11 + .../plugin/jqvmap/maps/jquery.vmap.ukraine.js | 2 + .../jqvmap/maps/jquery.vmap.usa.counties.js | 2 + .../jqvmap/maps/jquery.vmap.usa.districts.js | 2 + .../js/plugin/jqvmap/maps/jquery.vmap.usa.js | 2 + .../plugin/jqvmap/maps/jquery.vmap.world.js | 2 + .../js/plugin/sweetalert/sweetalert.min.js | 1 + .../assets/js/plugin/webfont/webfont.min.js | 17 + apps/static/assets/js/setting-demo.js | 94 + apps/static/assets/js/setting-demo2.js | 94 + apps/static/assets/package.json | 42 + apps/static/assets/sass/atlantis.scss | 101 + .../assets/sass/atlantis/_background.scss | 225 + .../assets/sass/atlantis/_components.scss | 28 + .../assets/sass/atlantis/_flaticon.scss | 434 + .../assets/sass/atlantis/_font-awesome.scss | 4865 ++++++++++ .../assets/sass/atlantis/_layouts-colors.scss | 439 + .../static/assets/sass/atlantis/_layouts.scss | 1415 +++ .../static/assets/sass/atlantis/_opacity.scss | 29 + .../assets/sass/atlantis/_outlinefocus.scss | 5 + .../static/assets/sass/atlantis/_plugins.scss | 5 + .../sass/atlantis/_responsive-horizontal.scss | 497 ++ .../assets/sass/atlantis/_responsive.scss | 439 + .../assets/sass/atlantis/_typography.scss | 184 + .../assets/sass/atlantis/_variables.scss | 28 + .../atlantis/components/_activityfeed.scss | 71 + .../sass/atlantis/components/_alerts.scss | 86 + .../sass/atlantis/components/_avatars.scss | 191 + .../sass/atlantis/components/_badges.scss | 46 + .../atlantis/components/_breadcrumbs.scss | 31 + .../sass/atlantis/components/_buttons.scss | 307 + .../sass/atlantis/components/_cards.scss | 1078 +++ .../sass/atlantis/components/_charts.scss | 50 + .../atlantis/components/_colorinputs.scss | 42 + .../sass/atlantis/components/_dropdowns.scss | 334 + .../sass/atlantis/components/_gutters.scss | 69 + .../sass/atlantis/components/_imagecheck.scss | 95 + .../sass/atlantis/components/_inputs.scss | 727 ++ .../sass/atlantis/components/_listgroup.scss | 60 + .../sass/atlantis/components/_loader.scss | 146 + .../sass/atlantis/components/_maps.scss | 63 + .../sass/atlantis/components/_modals.scss | 11 + .../sass/atlantis/components/_navbars.scss | 208 + .../sass/atlantis/components/_navsearch.scss | 32 + .../sass/atlantis/components/_navtabs.scss | 165 + .../atlantis/components/_paginations.scss | 42 + .../sass/atlantis/components/_popovers.scss | 46 + .../sass/atlantis/components/_progress.scss | 14 + .../atlantis/components/_selectgroup.scss | 120 + .../sass/atlantis/components/_sliders.scss | 29 + .../sass/atlantis/components/_stamps.scss | 18 + .../sass/atlantis/components/_tables.scss | 177 + .../sass/atlantis/components/_timeline.scss | 170 + .../sass/atlantis/plugins/_animate.scss | 3549 ++++++++ .../sass/atlantis/plugins/_datatables.scss | 226 + .../atlantis/plugins/_jqueryscrollbar.scss | 801 ++ .../sass/atlantis/plugins/_jqueryui.scss | 270 + .../sass/atlantis/plugins/_sweetalert.scss | 6 + apps/templates/.gitkeep | 0 apps/templates/accounts/login.html | 97 + apps/templates/accounts/register.html | 120 + apps/templates/home/charts-sparkline.html | 128 + apps/templates/home/charts.html | 601 ++ apps/templates/home/forms.html | 493 ++ apps/templates/home/index.html | 631 ++ .../home/layout-compact-sidebar.html | 668 ++ apps/templates/home/layout-icon-menu.html | 666 ++ .../home/layout-overlay-sidebar.html | 668 ++ .../home/layout-sidebar-style-1.html | 671 ++ .../templates/home/layout-static-sidebar.html | 670 ++ apps/templates/home/login.html | 91 + apps/templates/home/maps-jqvmap.html | 67 + apps/templates/home/page-403.html | 40 + apps/templates/home/page-404.html | 40 + apps/templates/home/page-500.html | 40 + apps/templates/home/page-blank.html | 41 + apps/templates/home/register.html | 113 + apps/templates/home/tables-data.html | 1315 +++ apps/templates/home/tables-simple.html | 476 + apps/templates/home/ui-avatars.html | 150 + apps/templates/home/ui-buttons.html | 303 + apps/templates/home/ui-flaticons.html | 66 + apps/templates/home/ui-fontawesome.html | 66 + apps/templates/home/ui-gridsystem.html | 292 + apps/templates/home/ui-notifications.html | 143 + apps/templates/home/ui-panels.html | 278 + apps/templates/home/ui-simpleline.html | 66 + apps/templates/home/ui-sweetalert.html | 323 + apps/templates/home/ui-typography.html | 179 + apps/templates/home/widgets.html | 1294 +++ .../includes/configuration-plugin.html | 72 + apps/templates/includes/footer.html | 21 + apps/templates/includes/navigation.html | 270 + apps/templates/includes/scripts.html | 37 + apps/templates/includes/sidebar.html | 312 + apps/templates/layouts/base-fullscreen.html | 1 + apps/templates/layouts/base.html | 68 + docker-compose.yml | 28 + env.sample | 15 + gunicorn-cfg.py | 11 + log.json | 23 + ...flask-dashboard-atlantis-dark-card-low.jpg | Bin 0 -> 12156 bytes ...flask-dashboard-atlantis-dark-card-low.png | Bin 0 -> 1041 bytes media/flask-dashboard-atlantis-dark-card.jpg | Bin 0 -> 12718 bytes media/flask-dashboard-atlantis-dark-card.png | Bin 0 -> 13094 bytes ...hboard-atlantis-dark-content-image-low.png | Bin 0 -> 3042 bytes ...-dashboard-atlantis-dark-content-image.png | Bin 0 -> 25409 bytes media/flask-dashboard-atlantis-dark-intro.gif | Bin 0 -> 782686 bytes ...k-dashboard-atlantis-dark-screen-1-low.png | Bin 0 -> 6835 bytes ...flask-dashboard-atlantis-dark-screen-1.png | Bin 0 -> 31502 bytes ...k-dashboard-atlantis-dark-screen-2-low.png | Bin 0 -> 14512 bytes ...flask-dashboard-atlantis-dark-screen-2.png | Bin 0 -> 30334 bytes ...k-dashboard-atlantis-dark-screen-3-low.png | Bin 0 -> 6113 bytes ...flask-dashboard-atlantis-dark-screen-3.png | Bin 0 -> 31154 bytes ...k-dashboard-atlantis-dark-screen-4-low.png | Bin 0 -> 2608 bytes ...flask-dashboard-atlantis-dark-screen-4.png | Bin 0 -> 22025 bytes ...shboard-atlantis-dark-screen-login-low.png | Bin 0 -> 2244 bytes ...k-dashboard-atlantis-dark-screen-login.png | Bin 0 -> 9495 bytes ...ask-dashboard-atlantis-dark-screen-low.png | Bin 0 -> 4958 bytes ...oard-atlantis-dark-screen-register-low.png | Bin 0 -> 1872 bytes ...ashboard-atlantis-dark-screen-register.png | Bin 0 -> 9817 bytes .../flask-dashboard-atlantis-dark-screen.png | Bin 0 -> 30386 bytes nginx/appseed-app.conf | 15 + package.json | 20 + requirements.txt | 16 + run.py | 42 + 536 files changed, 55227 insertions(+) create mode 100644 .dockerignore create mode 100644 .env create mode 100644 .gitignore create mode 100644 CHANGELOG.md create mode 100644 Dockerfile create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 apps/__init__.py create mode 100644 apps/authentication/__init__.py create mode 100644 apps/authentication/forms.py create mode 100644 apps/authentication/models.py create mode 100644 apps/authentication/routes.py create mode 100644 apps/authentication/util.py create mode 100644 apps/config.py create mode 100644 apps/home/__init__.py create mode 100644 apps/home/routes.py create mode 100644 apps/static/assets/.gitkeep create mode 100644 apps/static/assets/css/atlantis.css create mode 100644 apps/static/assets/css/atlantis.css.map create mode 100644 apps/static/assets/css/atlantis.min.css create mode 100644 apps/static/assets/css/bootstrap.min.css create mode 100644 apps/static/assets/css/demo.css create mode 100644 apps/static/assets/css/fonts.css create mode 100644 apps/static/assets/css/fonts.min.css create mode 100644 apps/static/assets/fonts/flaticon/Flaticon.eot create mode 100644 apps/static/assets/fonts/flaticon/Flaticon.svg create mode 100644 apps/static/assets/fonts/flaticon/Flaticon.ttf create mode 100644 apps/static/assets/fonts/flaticon/Flaticon.woff create mode 100644 apps/static/assets/fonts/flaticon/_flaticon.scss create mode 100644 apps/static/assets/fonts/flaticon/flaticon.css create mode 100644 apps/static/assets/fonts/flaticon/flaticon.html create mode 100644 apps/static/assets/fonts/fontawesome/fa-brands-400.eot create mode 100644 apps/static/assets/fonts/fontawesome/fa-brands-400.svg create mode 100644 apps/static/assets/fonts/fontawesome/fa-brands-400.ttf create mode 100644 apps/static/assets/fonts/fontawesome/fa-brands-400.woff create mode 100644 apps/static/assets/fonts/fontawesome/fa-brands-400.woff2 create mode 100644 apps/static/assets/fonts/fontawesome/fa-regular-400.eot create mode 100644 apps/static/assets/fonts/fontawesome/fa-regular-400.svg create mode 100644 apps/static/assets/fonts/fontawesome/fa-regular-400.ttf create mode 100644 apps/static/assets/fonts/fontawesome/fa-regular-400.woff create mode 100644 apps/static/assets/fonts/fontawesome/fa-regular-400.woff2 create mode 100644 apps/static/assets/fonts/fontawesome/fa-solid-900.eot create mode 100644 apps/static/assets/fonts/fontawesome/fa-solid-900.svg create mode 100644 apps/static/assets/fonts/fontawesome/fa-solid-900.ttf create mode 100644 apps/static/assets/fonts/fontawesome/fa-solid-900.woff create mode 100644 apps/static/assets/fonts/fontawesome/fa-solid-900.woff2 create mode 100644 apps/static/assets/fonts/simple-line-icons/Simple-Line-Icons.eot create mode 100644 apps/static/assets/fonts/simple-line-icons/Simple-Line-Icons.svg create mode 100644 apps/static/assets/fonts/simple-line-icons/Simple-Line-Icons.ttf create mode 100644 apps/static/assets/fonts/simple-line-icons/Simple-Line-Icons.woff create mode 100644 apps/static/assets/fonts/simple-line-icons/Simple-Line-Icons.woff2 create mode 100644 apps/static/assets/fonts/summernote/summernote.eot create mode 100644 apps/static/assets/fonts/summernote/summernote.ttf create mode 100644 apps/static/assets/fonts/summernote/summernote.woff create mode 100644 apps/static/assets/gulpfile.js create mode 100644 apps/static/assets/img/arashmil.jpg create mode 100644 apps/static/assets/img/bg-404.jpeg create mode 100644 apps/static/assets/img/bg-abstract.png create mode 100644 apps/static/assets/img/bg-abstract2.png create mode 100644 apps/static/assets/img/blogpost.jpg create mode 100644 apps/static/assets/img/chadengle.jpg create mode 100644 apps/static/assets/img/examples/example1-300x300.jpg create mode 100644 apps/static/assets/img/examples/example1.jpeg create mode 100644 apps/static/assets/img/examples/example10-300x300.jpg create mode 100644 apps/static/assets/img/examples/example10.jpeg create mode 100644 apps/static/assets/img/examples/example11-300x300.jpg create mode 100644 apps/static/assets/img/examples/example11.jpeg create mode 100644 apps/static/assets/img/examples/example12-300x300.jpg create mode 100644 apps/static/assets/img/examples/example12.jpeg create mode 100644 apps/static/assets/img/examples/example2-300x300.jpg create mode 100644 apps/static/assets/img/examples/example2.jpeg create mode 100644 apps/static/assets/img/examples/example3-300x300.jpg create mode 100644 apps/static/assets/img/examples/example3.jpeg create mode 100644 apps/static/assets/img/examples/example4-300x300.jpg create mode 100644 apps/static/assets/img/examples/example4.jpeg create mode 100644 apps/static/assets/img/examples/example5-300x300.jpg create mode 100644 apps/static/assets/img/examples/example5.jpeg create mode 100644 apps/static/assets/img/examples/example6-300x300.jpg create mode 100644 apps/static/assets/img/examples/example6.jpeg create mode 100644 apps/static/assets/img/examples/example7-300x300.jpg create mode 100644 apps/static/assets/img/examples/example7.jpeg create mode 100644 apps/static/assets/img/examples/example8-300x300.jpg create mode 100644 apps/static/assets/img/examples/example8.jpeg create mode 100644 apps/static/assets/img/examples/example9-300x300.jpg create mode 100644 apps/static/assets/img/examples/example9.jpeg create mode 100644 apps/static/assets/img/examples/logoinvoice.svg create mode 100644 apps/static/assets/img/examples/product1.jpg create mode 100644 apps/static/assets/img/examples/product10.jpeg create mode 100644 apps/static/assets/img/examples/product11.jpeg create mode 100644 apps/static/assets/img/examples/product12.jpeg create mode 100644 apps/static/assets/img/examples/product2.jpg create mode 100644 apps/static/assets/img/examples/product3.jpg create mode 100644 apps/static/assets/img/examples/product4.jpg create mode 100644 apps/static/assets/img/examples/product5.jpg create mode 100644 apps/static/assets/img/examples/product6.jpg create mode 100644 apps/static/assets/img/examples/product7.jpg create mode 100644 apps/static/assets/img/examples/product8.jpg create mode 100644 apps/static/assets/img/flags/ad.png create mode 100644 apps/static/assets/img/flags/ae.png create mode 100644 apps/static/assets/img/flags/af.png create mode 100644 apps/static/assets/img/flags/ag.png create mode 100644 apps/static/assets/img/flags/ai.png create mode 100644 apps/static/assets/img/flags/al.png create mode 100644 apps/static/assets/img/flags/am.png create mode 100644 apps/static/assets/img/flags/an.png create mode 100644 apps/static/assets/img/flags/ao.png create mode 100644 apps/static/assets/img/flags/ar.png create mode 100644 apps/static/assets/img/flags/as.png create mode 100644 apps/static/assets/img/flags/at.png create mode 100644 apps/static/assets/img/flags/au.png create mode 100644 apps/static/assets/img/flags/aw.png create mode 100644 apps/static/assets/img/flags/ax.png create mode 100644 apps/static/assets/img/flags/az.png create mode 100644 apps/static/assets/img/flags/ba.png create mode 100644 apps/static/assets/img/flags/bb.png create mode 100644 apps/static/assets/img/flags/bd.png create mode 100644 apps/static/assets/img/flags/be.png create mode 100644 apps/static/assets/img/flags/bf.png create mode 100644 apps/static/assets/img/flags/bg.png create mode 100644 apps/static/assets/img/flags/bh.png create mode 100644 apps/static/assets/img/flags/bi.png create mode 100644 apps/static/assets/img/flags/bj.png create mode 100644 apps/static/assets/img/flags/bm.png create mode 100644 apps/static/assets/img/flags/bn.png create mode 100644 apps/static/assets/img/flags/bo.png create mode 100644 apps/static/assets/img/flags/br.png create mode 100644 apps/static/assets/img/flags/bs.png create mode 100644 apps/static/assets/img/flags/bt.png create mode 100644 apps/static/assets/img/flags/bv.png create mode 100644 apps/static/assets/img/flags/bw.png create mode 100644 apps/static/assets/img/flags/by.png create mode 100644 apps/static/assets/img/flags/bz.png create mode 100644 apps/static/assets/img/flags/ca.png create mode 100644 apps/static/assets/img/flags/catalonia.png create mode 100644 apps/static/assets/img/flags/cc.png create mode 100644 apps/static/assets/img/flags/cd.png create mode 100644 apps/static/assets/img/flags/cf.png create mode 100644 apps/static/assets/img/flags/cg.png create mode 100644 apps/static/assets/img/flags/ch.png create mode 100644 apps/static/assets/img/flags/ci.png create mode 100644 apps/static/assets/img/flags/ck.png create mode 100644 apps/static/assets/img/flags/cl.png create mode 100644 apps/static/assets/img/flags/cm.png create mode 100644 apps/static/assets/img/flags/cn.png create mode 100644 apps/static/assets/img/flags/co.png create mode 100644 apps/static/assets/img/flags/cr.png create mode 100644 apps/static/assets/img/flags/cs.png create mode 100644 apps/static/assets/img/flags/cu.png create mode 100644 apps/static/assets/img/flags/cv.png create mode 100644 apps/static/assets/img/flags/cx.png create mode 100644 apps/static/assets/img/flags/cy.png create mode 100644 apps/static/assets/img/flags/cz.png create mode 100644 apps/static/assets/img/flags/de.png create mode 100644 apps/static/assets/img/flags/dj.png create mode 100644 apps/static/assets/img/flags/dk.png create mode 100644 apps/static/assets/img/flags/dm.png create mode 100644 apps/static/assets/img/flags/do.png create mode 100644 apps/static/assets/img/flags/dz.png create mode 100644 apps/static/assets/img/flags/ec.png create mode 100644 apps/static/assets/img/flags/ee.png create mode 100644 apps/static/assets/img/flags/eg.png create mode 100644 apps/static/assets/img/flags/eh.png create mode 100644 apps/static/assets/img/flags/england.png create mode 100644 apps/static/assets/img/flags/er.png create mode 100644 apps/static/assets/img/flags/es.png create mode 100644 apps/static/assets/img/flags/et.png create mode 100644 apps/static/assets/img/flags/europeanunion.png create mode 100644 apps/static/assets/img/flags/fam.png create mode 100644 apps/static/assets/img/flags/fi.png create mode 100644 apps/static/assets/img/flags/fj.png create mode 100644 apps/static/assets/img/flags/fk.png create mode 100644 apps/static/assets/img/flags/fm.png create mode 100644 apps/static/assets/img/flags/fo.png create mode 100644 apps/static/assets/img/flags/fr.png create mode 100644 apps/static/assets/img/flags/ga.png create mode 100644 apps/static/assets/img/flags/gb.png create mode 100644 apps/static/assets/img/flags/gd.png create mode 100644 apps/static/assets/img/flags/ge.png create mode 100644 apps/static/assets/img/flags/gf.png create mode 100644 apps/static/assets/img/flags/gh.png create mode 100644 apps/static/assets/img/flags/gi.png create mode 100644 apps/static/assets/img/flags/gl.png create mode 100644 apps/static/assets/img/flags/gm.png create mode 100644 apps/static/assets/img/flags/gn.png create mode 100644 apps/static/assets/img/flags/gp.png create mode 100644 apps/static/assets/img/flags/gq.png create mode 100644 apps/static/assets/img/flags/gr.png create mode 100644 apps/static/assets/img/flags/gs.png create mode 100644 apps/static/assets/img/flags/gt.png create mode 100644 apps/static/assets/img/flags/gu.png create mode 100644 apps/static/assets/img/flags/gw.png create mode 100644 apps/static/assets/img/flags/gy.png create mode 100644 apps/static/assets/img/flags/hk.png create mode 100644 apps/static/assets/img/flags/hm.png create mode 100644 apps/static/assets/img/flags/hn.png create mode 100644 apps/static/assets/img/flags/hr.png create mode 100644 apps/static/assets/img/flags/ht.png create mode 100644 apps/static/assets/img/flags/hu.png create mode 100644 apps/static/assets/img/flags/id.png create mode 100644 apps/static/assets/img/flags/ie.png create mode 100644 apps/static/assets/img/flags/il.png create mode 100644 apps/static/assets/img/flags/in.png create mode 100644 apps/static/assets/img/flags/io.png create mode 100644 apps/static/assets/img/flags/iq.png create mode 100644 apps/static/assets/img/flags/ir.png create mode 100644 apps/static/assets/img/flags/is.png create mode 100644 apps/static/assets/img/flags/it.png create mode 100644 apps/static/assets/img/flags/jm.png create mode 100644 apps/static/assets/img/flags/jo.png create mode 100644 apps/static/assets/img/flags/jp.png create mode 100644 apps/static/assets/img/flags/ke.png create mode 100644 apps/static/assets/img/flags/kg.png create mode 100644 apps/static/assets/img/flags/kh.png create mode 100644 apps/static/assets/img/flags/ki.png create mode 100644 apps/static/assets/img/flags/km.png create mode 100644 apps/static/assets/img/flags/kn.png create mode 100644 apps/static/assets/img/flags/kp.png create mode 100644 apps/static/assets/img/flags/kr.png create mode 100644 apps/static/assets/img/flags/kw.png create mode 100644 apps/static/assets/img/flags/ky.png create mode 100644 apps/static/assets/img/flags/kz.png create mode 100644 apps/static/assets/img/flags/la.png create mode 100644 apps/static/assets/img/flags/lb.png create mode 100644 apps/static/assets/img/flags/lc.png create mode 100644 apps/static/assets/img/flags/li.png create mode 100644 apps/static/assets/img/flags/lk.png create mode 100644 apps/static/assets/img/flags/lr.png create mode 100644 apps/static/assets/img/flags/ls.png create mode 100644 apps/static/assets/img/flags/lt.png create mode 100644 apps/static/assets/img/flags/lu.png create mode 100644 apps/static/assets/img/flags/lv.png create mode 100644 apps/static/assets/img/flags/ly.png create mode 100644 apps/static/assets/img/flags/ma.png create mode 100644 apps/static/assets/img/flags/mc.png create mode 100644 apps/static/assets/img/flags/md.png create mode 100644 apps/static/assets/img/flags/me.png create mode 100644 apps/static/assets/img/flags/mg.png create mode 100644 apps/static/assets/img/flags/mh.png create mode 100644 apps/static/assets/img/flags/mk.png create mode 100644 apps/static/assets/img/flags/ml.png create mode 100644 apps/static/assets/img/flags/mm.png create mode 100644 apps/static/assets/img/flags/mn.png create mode 100644 apps/static/assets/img/flags/mo.png create mode 100644 apps/static/assets/img/flags/mp.png create mode 100644 apps/static/assets/img/flags/mq.png create mode 100644 apps/static/assets/img/flags/mr.png create mode 100644 apps/static/assets/img/flags/ms.png create mode 100644 apps/static/assets/img/flags/mt.png create mode 100644 apps/static/assets/img/flags/mu.png create mode 100644 apps/static/assets/img/flags/mv.png create mode 100644 apps/static/assets/img/flags/mw.png create mode 100644 apps/static/assets/img/flags/mx.png create mode 100644 apps/static/assets/img/flags/my.png create mode 100644 apps/static/assets/img/flags/mz.png create mode 100644 apps/static/assets/img/flags/na.png create mode 100644 apps/static/assets/img/flags/nc.png create mode 100644 apps/static/assets/img/flags/ne.png create mode 100644 apps/static/assets/img/flags/nf.png create mode 100644 apps/static/assets/img/flags/ng.png create mode 100644 apps/static/assets/img/flags/ni.png create mode 100644 apps/static/assets/img/flags/nl.png create mode 100644 apps/static/assets/img/flags/no.png create mode 100644 apps/static/assets/img/flags/np.png create mode 100644 apps/static/assets/img/flags/nr.png create mode 100644 apps/static/assets/img/flags/nu.png create mode 100644 apps/static/assets/img/flags/nz.png create mode 100644 apps/static/assets/img/flags/om.png create mode 100644 apps/static/assets/img/flags/pa.png create mode 100644 apps/static/assets/img/flags/pe.png create mode 100644 apps/static/assets/img/flags/pf.png create mode 100644 apps/static/assets/img/flags/pg.png create mode 100644 apps/static/assets/img/flags/ph.png create mode 100644 apps/static/assets/img/flags/pk.png create mode 100644 apps/static/assets/img/flags/pl.png create mode 100644 apps/static/assets/img/flags/pm.png create mode 100644 apps/static/assets/img/flags/pn.png create mode 100644 apps/static/assets/img/flags/pr.png create mode 100644 apps/static/assets/img/flags/ps.png create mode 100644 apps/static/assets/img/flags/pt.png create mode 100644 apps/static/assets/img/flags/pw.png create mode 100644 apps/static/assets/img/flags/py.png create mode 100644 apps/static/assets/img/flags/qa.png create mode 100644 apps/static/assets/img/flags/re.png create mode 100644 apps/static/assets/img/flags/readme.txt create mode 100644 apps/static/assets/img/flags/ro.png create mode 100644 apps/static/assets/img/flags/rs.png create mode 100644 apps/static/assets/img/flags/ru.png create mode 100644 apps/static/assets/img/flags/rw.png create mode 100644 apps/static/assets/img/flags/sa.png create mode 100644 apps/static/assets/img/flags/sb.png create mode 100644 apps/static/assets/img/flags/sc.png create mode 100644 apps/static/assets/img/flags/scotland.png create mode 100644 apps/static/assets/img/flags/sd.png create mode 100644 apps/static/assets/img/flags/se.png create mode 100644 apps/static/assets/img/flags/sg.png create mode 100644 apps/static/assets/img/flags/sh.png create mode 100644 apps/static/assets/img/flags/si.png create mode 100644 apps/static/assets/img/flags/sj.png create mode 100644 apps/static/assets/img/flags/sk.png create mode 100644 apps/static/assets/img/flags/sl.png create mode 100644 apps/static/assets/img/flags/sm.png create mode 100644 apps/static/assets/img/flags/sn.png create mode 100644 apps/static/assets/img/flags/so.png create mode 100644 apps/static/assets/img/flags/sr.png create mode 100644 apps/static/assets/img/flags/st.png create mode 100644 apps/static/assets/img/flags/sv.png create mode 100644 apps/static/assets/img/flags/sy.png create mode 100644 apps/static/assets/img/flags/sz.png create mode 100644 apps/static/assets/img/flags/tc.png create mode 100644 apps/static/assets/img/flags/td.png create mode 100644 apps/static/assets/img/flags/tf.png create mode 100644 apps/static/assets/img/flags/tg.png create mode 100644 apps/static/assets/img/flags/th.png create mode 100644 apps/static/assets/img/flags/tj.png create mode 100644 apps/static/assets/img/flags/tk.png create mode 100644 apps/static/assets/img/flags/tl.png create mode 100644 apps/static/assets/img/flags/tm.png create mode 100644 apps/static/assets/img/flags/tn.png create mode 100644 apps/static/assets/img/flags/to.png create mode 100644 apps/static/assets/img/flags/tr.png create mode 100644 apps/static/assets/img/flags/tt.png create mode 100644 apps/static/assets/img/flags/tv.png create mode 100644 apps/static/assets/img/flags/tw.png create mode 100644 apps/static/assets/img/flags/tz.png create mode 100644 apps/static/assets/img/flags/ua.png create mode 100644 apps/static/assets/img/flags/ug.png create mode 100644 apps/static/assets/img/flags/um.png create mode 100644 apps/static/assets/img/flags/us.png create mode 100644 apps/static/assets/img/flags/uy.png create mode 100644 apps/static/assets/img/flags/uz.png create mode 100644 apps/static/assets/img/flags/va.png create mode 100644 apps/static/assets/img/flags/vc.png create mode 100644 apps/static/assets/img/flags/ve.png create mode 100644 apps/static/assets/img/flags/vg.png create mode 100644 apps/static/assets/img/flags/vi.png create mode 100644 apps/static/assets/img/flags/vn.png create mode 100644 apps/static/assets/img/flags/vu.png create mode 100644 apps/static/assets/img/flags/wales.png create mode 100644 apps/static/assets/img/flags/wf.png create mode 100644 apps/static/assets/img/flags/ws.png create mode 100644 apps/static/assets/img/flags/ye.png create mode 100644 apps/static/assets/img/flags/yt.png create mode 100644 apps/static/assets/img/flags/za.png create mode 100644 apps/static/assets/img/flags/zm.png create mode 100644 apps/static/assets/img/flags/zw.png create mode 100644 apps/static/assets/img/icon.ico create mode 100644 apps/static/assets/img/icon.png create mode 100644 apps/static/assets/img/icon.svg create mode 100644 apps/static/assets/img/img-shadow.gvdesign create mode 100644 apps/static/assets/img/img-shadow.png create mode 100644 apps/static/assets/img/jm_denis.jpg create mode 100644 apps/static/assets/img/logo.svg create mode 100644 apps/static/assets/img/logo2.svg create mode 100644 apps/static/assets/img/logoalternatif.svg create mode 100644 apps/static/assets/img/logoproduct.svg create mode 100644 apps/static/assets/img/logoproduct2.svg create mode 100644 apps/static/assets/img/logoproduct3.svg create mode 100644 apps/static/assets/img/mlane.jpg create mode 100644 apps/static/assets/img/productimg/product1.jpeg create mode 100644 apps/static/assets/img/productimg/product2.jpeg create mode 100644 apps/static/assets/img/productimg/product3.jpeg create mode 100644 apps/static/assets/img/productimg/product4.jpeg create mode 100644 apps/static/assets/img/productimg/product5.jpeg create mode 100644 apps/static/assets/img/productimg/product6.jpeg create mode 100644 apps/static/assets/img/productimg/product7.jpeg create mode 100644 apps/static/assets/img/productimg/product8.jpeg create mode 100644 apps/static/assets/img/productimg/product9.jpeg create mode 100644 apps/static/assets/img/profile.jpg create mode 100644 apps/static/assets/img/profile2.jpg create mode 100644 apps/static/assets/img/sauro.jpg create mode 100644 apps/static/assets/img/talha.jpg create mode 100644 apps/static/assets/img/visa.svg create mode 100644 apps/static/assets/js/atlantis.js create mode 100644 apps/static/assets/js/atlantis.min.js create mode 100644 apps/static/assets/js/atlantis2.js create mode 100644 apps/static/assets/js/core/bootstrap.min.js create mode 100644 apps/static/assets/js/core/jquery.3.2.1.min.js create mode 100644 apps/static/assets/js/core/popper.min.js create mode 100644 apps/static/assets/js/demo.js create mode 100644 apps/static/assets/js/plugin/bootstrap-notify/bootstrap-notify.min.js create mode 100644 apps/static/assets/js/plugin/chart-circle/circles.min.js create mode 100644 apps/static/assets/js/plugin/chart.js/chart.min.js create mode 100644 apps/static/assets/js/plugin/datatables/datatables.min.js create mode 100644 apps/static/assets/js/plugin/jquery-scrollbar/jquery.scrollbar.min.js create mode 100644 apps/static/assets/js/plugin/jquery-ui-1.12.1.custom/jquery-ui.min.js create mode 100644 apps/static/assets/js/plugin/jquery-ui-touch-punch/jquery.ui.touch-punch.min.js create mode 100644 apps/static/assets/js/plugin/jquery.sparkline/jquery.sparkline.min.js create mode 100644 apps/static/assets/js/plugin/jqvmap/jquery.vmap.min.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/continents/jquery.vmap.africa.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/continents/jquery.vmap.asia.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/continents/jquery.vmap.australia.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/continents/jquery.vmap.europe.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/continents/jquery.vmap.north-america.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/continents/jquery.vmap.south-america.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/jquery.vmap.algeria.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/jquery.vmap.argentina.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/jquery.vmap.brazil.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/jquery.vmap.canada.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/jquery.vmap.croatia.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/jquery.vmap.europe.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/jquery.vmap.france.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/jquery.vmap.germany.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/jquery.vmap.greece.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/jquery.vmap.indonesia.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/jquery.vmap.iran.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/jquery.vmap.iraq.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/jquery.vmap.new_regions_france.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/jquery.vmap.russia.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/jquery.vmap.serbia.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/jquery.vmap.tunisia.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/jquery.vmap.turkey.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/jquery.vmap.ukraine.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/jquery.vmap.usa.counties.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/jquery.vmap.usa.districts.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/jquery.vmap.usa.js create mode 100644 apps/static/assets/js/plugin/jqvmap/maps/jquery.vmap.world.js create mode 100644 apps/static/assets/js/plugin/sweetalert/sweetalert.min.js create mode 100644 apps/static/assets/js/plugin/webfont/webfont.min.js create mode 100644 apps/static/assets/js/setting-demo.js create mode 100644 apps/static/assets/js/setting-demo2.js create mode 100644 apps/static/assets/package.json create mode 100644 apps/static/assets/sass/atlantis.scss create mode 100644 apps/static/assets/sass/atlantis/_background.scss create mode 100644 apps/static/assets/sass/atlantis/_components.scss create mode 100644 apps/static/assets/sass/atlantis/_flaticon.scss create mode 100644 apps/static/assets/sass/atlantis/_font-awesome.scss create mode 100644 apps/static/assets/sass/atlantis/_layouts-colors.scss create mode 100644 apps/static/assets/sass/atlantis/_layouts.scss create mode 100644 apps/static/assets/sass/atlantis/_opacity.scss create mode 100644 apps/static/assets/sass/atlantis/_outlinefocus.scss create mode 100644 apps/static/assets/sass/atlantis/_plugins.scss create mode 100644 apps/static/assets/sass/atlantis/_responsive-horizontal.scss create mode 100644 apps/static/assets/sass/atlantis/_responsive.scss create mode 100644 apps/static/assets/sass/atlantis/_typography.scss create mode 100644 apps/static/assets/sass/atlantis/_variables.scss create mode 100644 apps/static/assets/sass/atlantis/components/_activityfeed.scss create mode 100644 apps/static/assets/sass/atlantis/components/_alerts.scss create mode 100644 apps/static/assets/sass/atlantis/components/_avatars.scss create mode 100644 apps/static/assets/sass/atlantis/components/_badges.scss create mode 100644 apps/static/assets/sass/atlantis/components/_breadcrumbs.scss create mode 100644 apps/static/assets/sass/atlantis/components/_buttons.scss create mode 100644 apps/static/assets/sass/atlantis/components/_cards.scss create mode 100644 apps/static/assets/sass/atlantis/components/_charts.scss create mode 100644 apps/static/assets/sass/atlantis/components/_colorinputs.scss create mode 100644 apps/static/assets/sass/atlantis/components/_dropdowns.scss create mode 100644 apps/static/assets/sass/atlantis/components/_gutters.scss create mode 100644 apps/static/assets/sass/atlantis/components/_imagecheck.scss create mode 100644 apps/static/assets/sass/atlantis/components/_inputs.scss create mode 100644 apps/static/assets/sass/atlantis/components/_listgroup.scss create mode 100644 apps/static/assets/sass/atlantis/components/_loader.scss create mode 100644 apps/static/assets/sass/atlantis/components/_maps.scss create mode 100644 apps/static/assets/sass/atlantis/components/_modals.scss create mode 100644 apps/static/assets/sass/atlantis/components/_navbars.scss create mode 100644 apps/static/assets/sass/atlantis/components/_navsearch.scss create mode 100644 apps/static/assets/sass/atlantis/components/_navtabs.scss create mode 100644 apps/static/assets/sass/atlantis/components/_paginations.scss create mode 100644 apps/static/assets/sass/atlantis/components/_popovers.scss create mode 100644 apps/static/assets/sass/atlantis/components/_progress.scss create mode 100644 apps/static/assets/sass/atlantis/components/_selectgroup.scss create mode 100644 apps/static/assets/sass/atlantis/components/_sliders.scss create mode 100644 apps/static/assets/sass/atlantis/components/_stamps.scss create mode 100644 apps/static/assets/sass/atlantis/components/_tables.scss create mode 100644 apps/static/assets/sass/atlantis/components/_timeline.scss create mode 100644 apps/static/assets/sass/atlantis/plugins/_animate.scss create mode 100644 apps/static/assets/sass/atlantis/plugins/_datatables.scss create mode 100644 apps/static/assets/sass/atlantis/plugins/_jqueryscrollbar.scss create mode 100644 apps/static/assets/sass/atlantis/plugins/_jqueryui.scss create mode 100644 apps/static/assets/sass/atlantis/plugins/_sweetalert.scss create mode 100644 apps/templates/.gitkeep create mode 100644 apps/templates/accounts/login.html create mode 100644 apps/templates/accounts/register.html create mode 100644 apps/templates/home/charts-sparkline.html create mode 100644 apps/templates/home/charts.html create mode 100644 apps/templates/home/forms.html create mode 100644 apps/templates/home/index.html create mode 100644 apps/templates/home/layout-compact-sidebar.html create mode 100644 apps/templates/home/layout-icon-menu.html create mode 100644 apps/templates/home/layout-overlay-sidebar.html create mode 100644 apps/templates/home/layout-sidebar-style-1.html create mode 100644 apps/templates/home/layout-static-sidebar.html create mode 100644 apps/templates/home/login.html create mode 100644 apps/templates/home/maps-jqvmap.html create mode 100644 apps/templates/home/page-403.html create mode 100644 apps/templates/home/page-404.html create mode 100644 apps/templates/home/page-500.html create mode 100644 apps/templates/home/page-blank.html create mode 100644 apps/templates/home/register.html create mode 100644 apps/templates/home/tables-data.html create mode 100644 apps/templates/home/tables-simple.html create mode 100644 apps/templates/home/ui-avatars.html create mode 100644 apps/templates/home/ui-buttons.html create mode 100644 apps/templates/home/ui-flaticons.html create mode 100644 apps/templates/home/ui-fontawesome.html create mode 100644 apps/templates/home/ui-gridsystem.html create mode 100644 apps/templates/home/ui-notifications.html create mode 100644 apps/templates/home/ui-panels.html create mode 100644 apps/templates/home/ui-simpleline.html create mode 100644 apps/templates/home/ui-sweetalert.html create mode 100644 apps/templates/home/ui-typography.html create mode 100644 apps/templates/home/widgets.html create mode 100644 apps/templates/includes/configuration-plugin.html create mode 100644 apps/templates/includes/footer.html create mode 100644 apps/templates/includes/navigation.html create mode 100644 apps/templates/includes/scripts.html create mode 100644 apps/templates/includes/sidebar.html create mode 100644 apps/templates/layouts/base-fullscreen.html create mode 100644 apps/templates/layouts/base.html create mode 100644 docker-compose.yml create mode 100644 env.sample create mode 100644 gunicorn-cfg.py create mode 100644 log.json create mode 100644 media/flask-dashboard-atlantis-dark-card-low.jpg create mode 100644 media/flask-dashboard-atlantis-dark-card-low.png create mode 100644 media/flask-dashboard-atlantis-dark-card.jpg create mode 100644 media/flask-dashboard-atlantis-dark-card.png create mode 100644 media/flask-dashboard-atlantis-dark-content-image-low.png create mode 100644 media/flask-dashboard-atlantis-dark-content-image.png create mode 100644 media/flask-dashboard-atlantis-dark-intro.gif create mode 100644 media/flask-dashboard-atlantis-dark-screen-1-low.png create mode 100644 media/flask-dashboard-atlantis-dark-screen-1.png create mode 100644 media/flask-dashboard-atlantis-dark-screen-2-low.png create mode 100644 media/flask-dashboard-atlantis-dark-screen-2.png create mode 100644 media/flask-dashboard-atlantis-dark-screen-3-low.png create mode 100644 media/flask-dashboard-atlantis-dark-screen-3.png create mode 100644 media/flask-dashboard-atlantis-dark-screen-4-low.png create mode 100644 media/flask-dashboard-atlantis-dark-screen-4.png create mode 100644 media/flask-dashboard-atlantis-dark-screen-login-low.png create mode 100644 media/flask-dashboard-atlantis-dark-screen-login.png create mode 100644 media/flask-dashboard-atlantis-dark-screen-low.png create mode 100644 media/flask-dashboard-atlantis-dark-screen-register-low.png create mode 100644 media/flask-dashboard-atlantis-dark-screen-register.png create mode 100644 media/flask-dashboard-atlantis-dark-screen.png create mode 100644 nginx/appseed-app.conf create mode 100644 package.json create mode 100644 requirements.txt create mode 100644 run.py diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..72e294c --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +.git +__pycache__ +*.pyc +*.pyo +*.pyd \ No newline at end of file diff --git a/.env b/.env new file mode 100644 index 0000000..b5269d5 --- /dev/null +++ b/.env @@ -0,0 +1,13 @@ +DEBUG=True + +FLASK_APP=run.py +FLASK_ENV=development + +ASSETS_ROOT=/static/assets + +# DB_ENGINE=mysql +# DB_HOST=localhost +# DB_NAME=appseed_db +# DB_USERNAME=appseed_db_usr +# DB_PASS=pass +# DB_PORT=3306 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9fc790f --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +# byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] + +# tests and coverage +*.pytest_cache +.coverage + +# database & logs +*.db +*.sqlite3 +*.log + +# venv +env +venv + +# other +.DS_Store + +# sphinx docs +_build +_static +_templates + +# javascript +package-lock.json +.vscode/symbols.json + +apps/static/assets/node_modules +apps/static/assets/yarn.lock +apps/static/assets/.temp + diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..1cabee4 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,58 @@ +# Change Log + +## [1.0.6] 2021-06-09 +### Improvements + +- Built with [Atlantis Dark Generator](https://appseed.us/generator/atlantis-dark/) + - Timestamp: `2022-06-09 11:53` + +## [1.0.5] 2022-01-16 +### Improvements + +- Bump Flask Codebase to [v2stable.0.1](https://github.com/app-generator/boilerplate-code-flask-dashboard/releases) +- Dependencies update (all packages) + - Flask==2.0.2 (latest stable version) + - flask_wtf==1.0.0 + - jinja2==3.0.3 + - flask-restx==0.5.1 +- Forms Update: + - Replace `TextField` (deprecated) with `StringField` + +## [1.0.4] 2021-11-08 +### Improvements + +- Bump Codebase: [Flask Dashboard](https://github.com/app-generator/boilerplate-code-flask-dashboard) v2.0.0 + - Dependencies update (all packages) + - Flask==2.0.1 (latest stable version) +- Better Code formatting +- Improved Files organization +- Optimize imports +- Docker Scripts Update +- Gulp Tooling (SASS Compilation) +- Fix **ImportError: cannot import name 'TextField' from 'wtforms'** + - Problem caused by `WTForms-3.0.0` + - Fix: use **WTForms==2.3.3** + +## [1.0.3] 2021-05-16 +### Dependencies Update + +- Bump Codebase: [Flask Dashboard](https://github.com/app-generator/boilerplate-code-flask-dashboard) v1.0.6 +- Freeze used versions in `requirements.txt` + - jinja2 = 2.11.3 + +## [1.0.2] 2021-03-18 +### Improvements + +- Bump Codebase: [Flask Dashboard](https://github.com/app-generator/boilerplate-code-flask-dashboard) v1.0.5 +- Freeze used versions in `requirements.txt` + - flask_sqlalchemy = 2.4.4 + - sqlalchemy = 1.3.23 + +## [1.0.1] 2021-01-21 + +- Bump UI: [Jinja Atlantis Dark](https://github.com/app-generator/jinja-atlantis-dark/releases) 1.0.1 +- [Atlantis Lite](https://github.com/themekita/Atlantis-Lite): 2021-01-05 Snapshot +- Codebase: [Flask Dashboard](https://github.com/app-generator/boilerplate-code-flask-dashboard/releases) v1.0.4 + +## [1.0.0] 2020-02-07 +### Initial Release diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..5568250 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,16 @@ +FROM python:3.9 + +# set environment variables +ENV PYTHONDONTWRITEBYTECODE 1 +ENV PYTHONUNBUFFERED 1 + +COPY requirements.txt . + +# install python dependencies +RUN pip install --upgrade pip +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +# gunicorn +CMD ["gunicorn", "--config", "gunicorn-cfg.py", "run:app"] diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..5012dd9 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,32 @@ +# MIT License + +Copyright (c) 2019 - present [AppSeed](http://appseed.us/) + +
+ +## Licensing Information + +
+ +| Item | - | +| ---------------------------------- | --- | +| License Type | MIT | +| Use for print | **YES** | +| Create single personal website/app | **YES** | +| Create single website/app for client | **YES** | +| Create multiple website/apps for clients | **YES** | +| Create multiple SaaS applications | **YES** | +| End-product paying users | **YES** | +| Product sale | **YES** | +| Remove footer credits | **YES** | +| --- | --- | +| Remove copyright mentions from source code | NO | +| Production deployment assistance | NO | +| Create HTML/CSS template for sale | NO | +| Create Theme/Template for CMS for sale | NO | +| Separate sale of our UI Elements | NO | + +
+ +--- +For more information regarding licensing, please contact the AppSeed Service < *support@appseed.us* > diff --git a/README.md b/README.md new file mode 100644 index 0000000..39572be --- /dev/null +++ b/README.md @@ -0,0 +1,204 @@ +# [Atlantis Dark Flask](https://appseed.us/product/atlantis-dark/flask/) + +Open-source **Flask Dashboard** generated by `AppSeed` on top of a modern `Bootstrap` design. **[Atlantis Dark](https://appseed.us/product/atlantis-dark/flask/)** is a free bootstrap 4 admin dashboard that is beautifully and elegantly designed to display various metrics, numbers or data visualization. Atlantis Lite admin dashboard has 2 layouts, many plugins and UI components to help developers create dashboards quickly and effectively so they can save development time and also help users to make the right and fast decisions based on existing data. + +- 👉 [Atlantis Dark Flask](https://appseed.us/product/atlantis-dark/flask/) - Product page +- 👉 [Atlantis Dark Flask](https://flask-atlantis-dark.appseed-srv1.com/) - LIVE Demo +- 👉 [Complete documentation](https://docs.appseed.us/products/flask-dashboards/atlantis-dark) - `Learn how to use and update the product` + +
+ +> 🚀 Built with [App Generator](https://appseed.us/generator/), Timestamp: `2022-06-09 11:53` + +- `Up-to-date dependencies` +- Database: `sqlite` +- `DB Tools`: SQLAlchemy ORM, Flask-Migrate (schema migrations) +- Session-Based authentication (via **flask_login**), Forms validation + +
+ +![Atlantis Dark - Starter generated by AppSeed.](https://user-images.githubusercontent.com/51070104/172799909-4cbc8eed-fdde-4408-ab61-123f235212d0.png) + +
+ +## ✨ Start the app in Docker + +> **Step 1** - Download the code from the GH repository (using `GIT`) + +```bash +$ git clone https://github.com/app-generator/flask-atlantis-dark.git +$ cd flask-atlantis-dark +``` + +
+ +> **Step 2** - Start the APP in `Docker` + +```bash +$ docker-compose up --build +``` + +Visit `http://localhost:5085` in your browser. The app should be up & running. + +
+ +## ✨ How to use it + +> Download the code + +```bash +$ git clone https://github.com/app-generator/flask-atlantis-dark.git +$ cd flask-atlantis-dark +``` + +
+ +### 👉 Set Up for `Unix`, `MacOS` + +> Install modules via `VENV` + +```bash +$ virtualenv env +$ source env/bin/activate +$ pip3 install -r requirements.txt +``` + +
+ +> Set Up Flask Environment + +```bash +$ export FLASK_APP=run.py +$ export FLASK_ENV=development +``` + +
+ +> Start the app + +```bash +$ flask run +``` + +At this point, the app runs at `http://127.0.0.1:5000/`. + +
+ +### 👉 Set Up for `Windows` + +> Install modules via `VENV` (windows) + +``` +$ virtualenv env +$ .\env\Scripts\activate +$ pip3 install -r requirements.txt +``` + +
+ +> Set Up Flask Environment + +```bash +$ # CMD +$ set FLASK_APP=run.py +$ set FLASK_ENV=development +$ +$ # Powershell +$ $env:FLASK_APP = ".\run.py" +$ $env:FLASK_ENV = "development" +``` + +
+ +> Start the app + +```bash +$ flask run +``` + +At this point, the app runs at `http://127.0.0.1:5000/`. + +
+ +### 👉 Create Users + +By default, the app redirects guest users to authenticate. In order to access the private pages, follow this set up: + +- Start the app via `flask run` +- Access the `registration` page and create a new user: + - `http://127.0.0.1:5000/register` +- Access the `sign in` page and authenticate + - `http://127.0.0.1:5000/login` + +
+ +## ✨ Code-base structure + +The project is coded using blueprints, app factory pattern, dual configuration profile (development and production) and an intuitive structure presented bellow: + +```bash +< PROJECT ROOT > + | + |-- apps/ + | | + | |-- home/ # A simple app that serve HTML files + | | |-- routes.py # Define app routes + | | + | |-- authentication/ # Handles auth routes (login and register) + | | |-- routes.py # Define authentication routes + | | |-- models.py # Defines models + | | |-- forms.py # Define auth forms (login and register) + | | + | |-- static/ + | | |-- # CSS files, Javascripts files + | | + | |-- templates/ # Templates used to render pages + | | |-- includes/ # HTML chunks and components + | | | |-- navigation.html # Top menu component + | | | |-- sidebar.html # Sidebar component + | | | |-- footer.html # App Footer + | | | |-- scripts.html # Scripts common to all pages + | | | + | | |-- layouts/ # Master pages + | | | |-- base-fullscreen.html # Used by Authentication pages + | | | |-- base.html # Used by common pages + | | | + | | |-- accounts/ # Authentication pages + | | | |-- login.html # Login page + | | | |-- register.html # Register page + | | | + | | |-- home/ # UI Kit Pages + | | |-- index.html # Index page + | | |-- 404-page.html # 404 page + | | |-- *.html # All other pages + | | + | config.py # Set up the app + | __init__.py # Initialize the app + | + |-- requirements.txt # App Dependencies + | + |-- .env # Inject Configuration via Environment + |-- run.py # Start the app - WSGI gateway + | + |-- ************************************************************************ +``` + +
+ +## ✨ PRO Version + +> For more components, pages and priority on support, feel free to take a look at this amazing starter: + +Black Dashboard is a premium Bootstrap Design now available for download in Flask. Made of hundred of elements, designed blocks, and fully coded pages, Black Dashboard PRO is ready to help you create stunning websites and web apps. + +- 👉 [Atlantis Dark PRO Flask](https://appseed.us/product/atlantis-dark-pro/flask/) - Product Page +- 👉 [Atlantis Dark PRO Flask](https://flask-atlantis-dark-pro.appseed-srv1.com/) - LIVE Demo + +
+ +![Atlantis Dark PRO - Starter generated by AppSeed.](https://user-images.githubusercontent.com/51070104/172800034-4d3adb79-d05e-430d-8ffe-f6860fc755f1.png) + +
+ +--- +Atlantis Lite Flask - Open-source starter generated by **[AppSeed Generator](https://appseed.us/generator/)**. diff --git a/apps/__init__.py b/apps/__init__.py new file mode 100644 index 0000000..f23857d --- /dev/null +++ b/apps/__init__.py @@ -0,0 +1,44 @@ +# -*- encoding: utf-8 -*- +""" +Copyright (c) 2019 - present AppSeed.us +""" + +from flask import Flask +from flask_login import LoginManager +from flask_sqlalchemy import SQLAlchemy +from importlib import import_module + + +db = SQLAlchemy() +login_manager = LoginManager() + + +def register_extensions(app): + db.init_app(app) + login_manager.init_app(app) + + +def register_blueprints(app): + for module_name in ('authentication', 'home'): + module = import_module('apps.{}.routes'.format(module_name)) + app.register_blueprint(module.blueprint) + + +def configure_database(app): + + @app.before_first_request + def initialize_database(): + db.create_all() + + @app.teardown_request + def shutdown_session(exception=None): + db.session.remove() + + +def create_app(config): + app = Flask(__name__) + app.config.from_object(config) + register_extensions(app) + register_blueprints(app) + configure_database(app) + return app diff --git a/apps/authentication/__init__.py b/apps/authentication/__init__.py new file mode 100644 index 0000000..25243ec --- /dev/null +++ b/apps/authentication/__init__.py @@ -0,0 +1,12 @@ +# -*- encoding: utf-8 -*- +""" +Copyright (c) 2019 - present AppSeed.us +""" + +from flask import Blueprint + +blueprint = Blueprint( + 'authentication_blueprint', + __name__, + url_prefix='' +) diff --git a/apps/authentication/forms.py b/apps/authentication/forms.py new file mode 100644 index 0000000..89f43da --- /dev/null +++ b/apps/authentication/forms.py @@ -0,0 +1,31 @@ +# -*- encoding: utf-8 -*- +""" +Copyright (c) 2019 - present AppSeed.us +""" + +from flask_wtf import FlaskForm +from wtforms import StringField, PasswordField +from wtforms.validators import Email, DataRequired + +# login and registration + + +class LoginForm(FlaskForm): + username = StringField('Username', + id='username_login', + validators=[DataRequired()]) + password = PasswordField('Password', + id='pwd_login', + validators=[DataRequired()]) + + +class CreateAccountForm(FlaskForm): + username = StringField('Username', + id='username_create', + validators=[DataRequired()]) + email = StringField('Email', + id='email_create', + validators=[DataRequired(), Email()]) + password = PasswordField('Password', + id='pwd_create', + validators=[DataRequired()]) diff --git a/apps/authentication/models.py b/apps/authentication/models.py new file mode 100644 index 0000000..cf152ef --- /dev/null +++ b/apps/authentication/models.py @@ -0,0 +1,48 @@ +# -*- encoding: utf-8 -*- +""" +Copyright (c) 2019 - present AppSeed.us +""" + +from flask_login import UserMixin + +from apps import db, login_manager + +from apps.authentication.util import hash_pass + +class Users(db.Model, UserMixin): + + __tablename__ = 'Users' + + id = db.Column(db.Integer, primary_key=True) + username = db.Column(db.String(64), unique=True) + email = db.Column(db.String(64), unique=True) + password = db.Column(db.LargeBinary) + + def __init__(self, **kwargs): + for property, value in kwargs.items(): + # depending on whether value is an iterable or not, we must + # unpack it's value (when **kwargs is request.form, some values + # will be a 1-element list) + if hasattr(value, '__iter__') and not isinstance(value, str): + # the ,= unpack of a singleton fails PEP8 (travis flake8 test) + value = value[0] + + if property == 'password': + value = hash_pass(value) # we need bytes here (not plain str) + + setattr(self, property, value) + + def __repr__(self): + return str(self.username) + + +@login_manager.user_loader +def user_loader(id): + return Users.query.filter_by(id=id).first() + + +@login_manager.request_loader +def request_loader(request): + username = request.form.get('username') + user = Users.query.filter_by(username=username).first() + return user if user else None diff --git a/apps/authentication/routes.py b/apps/authentication/routes.py new file mode 100644 index 0000000..c2a4d42 --- /dev/null +++ b/apps/authentication/routes.py @@ -0,0 +1,123 @@ +# -*- encoding: utf-8 -*- +""" +Copyright (c) 2019 - present AppSeed.us +""" + +from flask import render_template, redirect, request, url_for +from flask_login import ( + current_user, + login_user, + logout_user +) + +from apps import db, login_manager +from apps.authentication import blueprint +from apps.authentication.forms import LoginForm, CreateAccountForm +from apps.authentication.models import Users + +from apps.authentication.util import verify_pass + + +@blueprint.route('/') +def route_default(): + return redirect(url_for('authentication_blueprint.login')) + + +# Login & Registration + +@blueprint.route('/login', methods=['GET', 'POST']) +def login(): + login_form = LoginForm(request.form) + if 'login' in request.form: + + # read form data + username = request.form['username'] + password = request.form['password'] + + # Locate user + user = Users.query.filter_by(username=username).first() + + # Check the password + if user and verify_pass(password, user.password): + + login_user(user) + return redirect(url_for('authentication_blueprint.route_default')) + + # Something (user or pass) is not ok + return render_template('accounts/login.html', + msg='Wrong user or password', + form=login_form) + + if not current_user.is_authenticated: + return render_template('accounts/login.html', + form=login_form) + return redirect(url_for('home_blueprint.index')) + + +@blueprint.route('/register', methods=['GET', 'POST']) +def register(): + create_account_form = CreateAccountForm(request.form) + if 'register' in request.form: + + username = request.form['username'] + email = request.form['email'] + + # Check usename exists + user = Users.query.filter_by(username=username).first() + if user: + return render_template('accounts/register.html', + msg='Username already registered', + success=False, + form=create_account_form) + + # Check email exists + user = Users.query.filter_by(email=email).first() + if user: + return render_template('accounts/register.html', + msg='Email already registered', + success=False, + form=create_account_form) + + # else we can create the user + user = Users(**request.form) + db.session.add(user) + db.session.commit() + + # Delete user from session + logout_user() + + return render_template('accounts/register.html', + msg='User created successfully.', + success=True, + form=create_account_form) + + else: + return render_template('accounts/register.html', form=create_account_form) + + +@blueprint.route('/logout') +def logout(): + logout_user() + return redirect(url_for('authentication_blueprint.login')) + + +# Errors + +@login_manager.unauthorized_handler +def unauthorized_handler(): + return render_template('home/page-403.html'), 403 + + +@blueprint.errorhandler(403) +def access_forbidden(error): + return render_template('home/page-403.html'), 403 + + +@blueprint.errorhandler(404) +def not_found_error(error): + return render_template('home/page-404.html'), 404 + + +@blueprint.errorhandler(500) +def internal_error(error): + return render_template('home/page-500.html'), 500 diff --git a/apps/authentication/util.py b/apps/authentication/util.py new file mode 100644 index 0000000..9130da8 --- /dev/null +++ b/apps/authentication/util.py @@ -0,0 +1,34 @@ +# -*- encoding: utf-8 -*- +""" +Copyright (c) 2019 - present AppSeed.us +""" + +import os +import hashlib +import binascii + +# Inspiration -> https://www.vitoshacademy.com/hashing-passwords-in-python/ + + +def hash_pass(password): + """Hash a password for storing.""" + + salt = hashlib.sha256(os.urandom(60)).hexdigest().encode('ascii') + pwdhash = hashlib.pbkdf2_hmac('sha512', password.encode('utf-8'), + salt, 100000) + pwdhash = binascii.hexlify(pwdhash) + return (salt + pwdhash) # return bytes + + +def verify_pass(provided_password, stored_password): + """Verify a stored password against one provided by user""" + + stored_password = stored_password.decode('ascii') + salt = stored_password[:64] + stored_password = stored_password[64:] + pwdhash = hashlib.pbkdf2_hmac('sha512', + provided_password.encode('utf-8'), + salt.encode('ascii'), + 100000) + pwdhash = binascii.hexlify(pwdhash).decode('ascii') + return pwdhash == stored_password diff --git a/apps/config.py b/apps/config.py new file mode 100644 index 0000000..76efb75 --- /dev/null +++ b/apps/config.py @@ -0,0 +1,49 @@ +# -*- encoding: utf-8 -*- +""" +Copyright (c) 2019 - present AppSeed.us +""" + +import os + +class Config(object): + + basedir = os.path.abspath(os.path.dirname(__file__)) + + # Set up the App SECRET_KEY + # SECRET_KEY = config('SECRET_KEY' , default='S#perS3crEt_007') + SECRET_KEY = os.getenv('SECRET_KEY', 'S#perS3crEt_007') + + # This will create a file in FOLDER + SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'db.sqlite3') + SQLALCHEMY_TRACK_MODIFICATIONS = False + + # Assets Management + ASSETS_ROOT = os.getenv('ASSETS_ROOT', '/static/assets') + +class ProductionConfig(Config): + DEBUG = False + + # Security + SESSION_COOKIE_HTTPONLY = True + REMEMBER_COOKIE_HTTPONLY = True + REMEMBER_COOKIE_DURATION = 3600 + + # PostgreSQL database + SQLALCHEMY_DATABASE_URI = '{}://{}:{}@{}:{}/{}'.format( + os.getenv('DB_ENGINE' , 'mysql'), + os.getenv('DB_USERNAME' , 'appseed_db_usr'), + os.getenv('DB_PASS' , 'pass'), + os.getenv('DB_HOST' , 'localhost'), + os.getenv('DB_PORT' , 3306), + os.getenv('DB_NAME' , 'appseed_db') + ) + +class DebugConfig(Config): + DEBUG = True + + +# Load all possible configurations +config_dict = { + 'Production': ProductionConfig, + 'Debug' : DebugConfig +} diff --git a/apps/home/__init__.py b/apps/home/__init__.py new file mode 100644 index 0000000..dec76db --- /dev/null +++ b/apps/home/__init__.py @@ -0,0 +1,12 @@ +# -*- encoding: utf-8 -*- +""" +Copyright (c) 2019 - present AppSeed.us +""" + +from flask import Blueprint + +blueprint = Blueprint( + 'home_blueprint', + __name__, + url_prefix='' +) diff --git a/apps/home/routes.py b/apps/home/routes.py new file mode 100644 index 0000000..49ca9ba --- /dev/null +++ b/apps/home/routes.py @@ -0,0 +1,54 @@ +# -*- encoding: utf-8 -*- +""" +Copyright (c) 2019 - present AppSeed.us +""" + +from apps.home import blueprint +from flask import render_template, request +from flask_login import login_required +from jinja2 import TemplateNotFound + + +@blueprint.route('/index') +@login_required +def index(): + + return render_template('home/index.html', segment='index') + + +@blueprint.route('/