Professional Documents
Culture Documents
$this->add_cachedJavascript('pages/dashboard', 'file',
'body:end', [
'isLogin' => is_login()
]);
$this->addViews('template/dore', $data);
$this->render();
}
Controller untuk web service
<?php defined('BASEPATH') or exit('No direct script access
allowed');
use PhpOffice\PhpWord\Element\Text;
use PhpOffice\PhpWord\IOFactory;
use PhpOffice\PhpWord\PhpWord;
use PhpOffice\PhpWord\Settings;
use Smalot\PdfParser\Parser;
use Xrsa\XRsa;
function login()
{
if (is_login())
redirect(base_url());
$this->load->library('Authentication');
if (!httpmethod())
response("Metode akses ilegal");
list($input) = $this->authentication->persiapan($_POST);
$this->authentication->login($input);
}
function register(){
$post = $this->input->post();
$input = fieldmapping('user', $post);
if($input['password'] != $post['repassword'])
response("'Password' dan 'Konfirmasi Password' tidak
sama", 403);
$input['id'] = random(8);
$input['password'] = password_hash($input['password'],
PASSWORD_DEFAULT);
$this->db->insert('users', $input);
response("Berhasil mendaftar");
}
function update_profile()
{
if (!httpmethod())
response("Metode akses ilegal", 403);
if (!is_login())
response("Anda belum login", 403);
$post = $_POST;
$dataUser = fieldmapping('user', $post);
if (is_login('member')) {
$dataMember = fieldmapping('member', $_POST);
$dataMember['penanggung_jawab'] = $dataUser['nama'];
$dataUser['member'] = $post['memberid'];
}
if (isset($dataUser['password']) && !
empty($dataUser['password']))
$dataUser['password'] =
password_hash($dataUser['password'], PASSWORD_DEFAULT);
else
unset($dataUser['password']);
// Update in localdata
$tmp = sessiondata();
if (is_login('member')) {
foreach ($dataMember as $key => $value) {
if (sessiondata('login', $key) != $value)
$tmp[$key] = $value;
}
}
foreach ($dataUser as $key => $value) {
if ($key == 'password') continue;
if (sessiondata('login', $key) != $value)
$tmp[$key] = $value;
}
$this->session->set_userdata('login', $tmp);
response("Berhasil update profile");
}
function cek_username()
{
if (!httpmethod()) response("Ilegal Akses", 403);
if (is_login()) response("Anda sudah login", 403);
// if (sessiondata('login', 'username') ==
$_POST['username']) response(['boleh' => true]);
if (!isset($_POST['username']) ||
empty($_POST['username'])) response(['boleh' => false]);
$usernameBaru = $_POST['username'];
$user = $this->db->select('*')->where('username',
$usernameBaru)->get('users')->result();
if (!empty($user))
response(['boleh' => false]);
else
response(['boleh' => true]);
}
function logout()
{
if (!is_login())
response(['message' => 'Anda belum login', 'type' =>
'error'], 401);
try {
$this->session->unset_userdata('login');
response(['message' => 'Anda berhasil logout', 'type'
=> 'success'], 200);
} catch (\Throwable $th) {
response(['message' => 'Gagal, Terjadi kesalahan',
'type' => 'error', 'err' => $th], 500);
}
}
function deletekey(){
if(!is_login())
response("Anda tidak memiliki akses", 403);
$id = $this->input->post('id');
$keys = $this->db->where('id', $id)->delete('rsa_keys');
}
function rsakey_get(){
if(!is_login())
response("Anda tidak memiliki akses", 403);
$id = sessiondata('login', 'id');
$keys = $this->db->select('private, public, dibuat, id')-
>where('user', $id)->get('rsa_keys')->result();
response(['data' => $keys]);
}
function rsakey_post()
{
// Cek apakah sudah login/tidak
if(!is_login())
response("Anda tidak memiliki akses", 403);
require_once get_path(APPPATH .
'/third_party/liamylian/Xrsa.php');
$key = Xrsa::createKeys();
$nama = random(8);
//Ambil username
$id = sessiondata('login', 'id');
function key_get($nama)
{
$files = array($nama . '-private.key' =>
get_path(DOCS_PATH . 'pkeys/' . $nama . '-private.key'), $nama .
'-public.key' => get_path(DOCS_PATH . 'pkeys/' . $nama . '-
public.key'));
$zipname = $nama . '.zip';
$zip = new ZipArchive;
$zip->open(get_path(DOCS_PATH . 'pkeys/' . $zipname),
ZipArchive::CREATE);
foreach ($files as $key => $file) {
$zip->addFile($file, $key);
}
$zip->close();
function enkripsi_post()
{
try {
$this->load->helper('file_upload_helper');
$this->load->model('Steganografi');
$time_end = microtime(true);
$time = $time_end - $time_start;
unlink(get_path($fpath . $tmpName));
response(['url' => base_url('public/docs/tmp/docs/' .
$finalName), 'eta' => number_format($time, 2)]);
} catch (\Throwable $th) {
response(['err' => $th->getMessage()] + $th-
>getTrace(), 500);
}
}
function deskripsi_post()
{
try {
$this->load->helper('file_upload_helper');
$this->load->model('Steganografi');
$time_end = microtime(true);
$time = $time_end - $time_start;
unlink(get_path($fpath . $tmpName));
response(['url' => base_url('public/docs/tmp/docs/' .
$finalName), 'eta' => number_format($time, 2)]);
} catch (\Throwable $th) {
response(['err' => $th->getMessage()], 500);
}
}
function embed_post()
{
try {
$this->load->model('Steganografi');
$time_end = microtime(true);
$time = $time_end - $time_start;
function ekstraksi_post()
{
$this->load->model('Steganografi');
try {
if ($_FILES['video']['error'] == UPLOAD_ERR_OK &&
is_uploaded_file($_FILES['video']['tmp_name'])) {
$videoContent = file_get_contents($_FILES['video']
['tmp_name']);
} else {
response("Terjadi kesalahan, periksa kembali video
yang di upload");
}
// hitung execution time
$time_start = microtime(true);
$fname = $this->Steganografi->ekstract($videoContent);
$time_end = microtime(true);
$time = $time_end - $time_start;
$time_start = microtime(true);
if($act == 'enkrip'){
$fname = $this->Steganografi->embed($_FILES, true,
$this->input->post('public_key'));
$time_end = microtime(true);
$time = $time_end - $time_start;
$fname = $this->Steganografi->ekstract($videoContent,
true, $this->input->post('private_key'));
$time_end = microtime(true);
$time = $time_end - $time_start;
function file_get($name)
{
$name = urldecode($name);
$tmp = explode(".", $name);
$ext = end($tmp);
$ctype = getMimeType($ext);
$this->load->helper('download');
$data = file_get_contents($fpath);
$data = explode('-separator-', $data);
$name2 = urldecode($data[0]);
$tmp2 = explode(".", $name2);
$ext2 = end($tmp2);
force_download($name2, $data[1]);
exit;
if($ext2 == 'pdf'){
$this->load->library('Dompdf_gen');
$this->dompdf_gen->display_pdf($data[1], $data[0]);
}elseif(in_array($ext, ['mp4', 'mkv'])){
$ctype = getMimeType($ext2);
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0,
pre-check=0");
header("Cache-Control: private",false); // required
for certain browsers
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".
$name."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($fpath));
ob_clean();
flush();
readfile($fpath);
}
else{
if(empty($data[1])){
$fpath2 = get_path(DOCS_PATH . 'tmp/docs/');
file_put_contents($fpath2 . $data[0], $data[1]);
$ctype = getMimeType($ext2);
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-
check=0, pre-check=0");
header("Cache-Control: private",false); //
required for certain browsers
header("Content-Type: $ctype");
header("Content-Disposition: attachment;
filename=\"".$data[0]."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($fpath2 .
$data[0]));
ob_clean();
flush();
readfile( $fpath2 . $data[0] );
unlink($fpath2 . $data[0]);
}else{
force_download($data[0], $data[1]);
}
unlink($fpath);
}
return $c;
}
}
Model steganografi
Kumpulan function yang dibutuhkan untuk steganografi
(enkripsi dan deskripsi rsa-eof)
<?php
use PhpOffice\PhpWord\Element\Text;
use Xrsa\XRsa;
if($enkrip){
if(empty($pub_key))
response("Public key harus dikirimkan", 403);
$xrsa = new Xrsa($pub_key);
$content1 = $xrsa->publicEncrypt($content1);
}
write_file(get_path($this->vpath . $finalName),
$content2 . '-separator-' . $contentName . '-separator-' .
$content1);
return $finalName;
} catch (\Throwable $th) {
response(['err' => $th->getMessage(), 'trace' => $th-
>getTrace()], 401);
}
}
$fileName = $tmp[1];
$fileData = $tmp[2];
$fileExt = getExt($fileName);
$finalName = random(5) . ' '. $fileExt['filename'] . '
extracted.'. $fileExt['extension'];
if($deskrip){
if(empty($priv_key))
response("Private key harus dikirimkan", 403);
$fileData = XRsa::privateDecryptCustom($fileData,
$priv_key);
}
write_file(get_path($this->fpath . $finalName),
$fileData);
return $finalName;
}
if($ext == 'pdf'){
$c = readPdf(get_path($fpath . $fname));
$content = $c['text'];
}elseif($ext == 'docx'){
$this->load->library('Phpword');
$objReader = \PhpOffice\PhpWord\
IOFactory::createReader();
$phpWord = $objReader->load(get_path($fpath .
$fname)); // instance of \PhpOffice\PhpWord\PhpWord
$text = '';
foreach ($phpWord->getSections() as $section) {
foreach ($section->getElements() as $element) {
if ($element instanceof Text) {
$text .= $element->getText();
}
// and so on for other element types (see
src/PhpWord/Element)
}
}
$content = $text;
}else{
$content = file_get_contents(get_path($fpath .
$fname));
}
return $content;
}