Skip to content

Commit

Permalink
Merge pull request martijnvanbrummelen#500 from PartialVolume/PDF_Gen…
Browse files Browse the repository at this point in the history
…37_single_column_smart_data

PDF_Gen37_single_column_smart_data
  • Loading branch information
PartialVolume authored Oct 15, 2023
2 parents 0bb9ee3 + 508a6d2 commit ab9d269
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 85 deletions.
1 change: 0 additions & 1 deletion src/conf.c
Original file line number Diff line number Diff line change
Expand Up @@ -434,7 +434,6 @@ int nwipe_conf_read_setting( char* group_name_setting_name, const char** setting
/* Retrieve data from nwipe.conf */
if( CONFIG_TRUE == config_setting_lookup_string( setting, setting_name, setting_value ) )
{
nwipe_log( NWIPE_LOG_INFO, "setting_value = %s", *setting_value );
return_status = 0; /* Success */
}
else
Expand Down
187 changes: 104 additions & 83 deletions src/create_pdf.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,15 @@
#define text_size_data 10

struct pdf_doc* pdf;
struct pdf_object* page_2;
struct pdf_object* page;

char model_header[50] = ""; /* Model text in the header */
char serial_header[30] = ""; /* Serial number text in the header */
char barcode[100] = ""; /* Contents of the barcode, i.e model:serial */
char pdf_footer[MAX_PDF_FOOTER_TEXT_LENGTH];
float height;
float page_width;
int status_icon;

int create_pdf( nwipe_context_t* ptr )
{
Expand All @@ -60,13 +68,13 @@ int create_pdf( nwipe_context_t* ptr )
extern config_t nwipe_cfg;
extern char nwipe_config_file[];

char pdf_footer[MAX_PDF_FOOTER_TEXT_LENGTH];
// char pdf_footer[MAX_PDF_FOOTER_TEXT_LENGTH];
nwipe_context_t* c;
c = ptr;
char model_header[50] = ""; /* Model text in the header */
char serial_header[30] = ""; /* Serial number text in the header */
// char model_header[50] = ""; /* Model text in the header */
// char serial_header[30] = ""; /* Serial number text in the header */
char device_size[100] = ""; /* Device size in the form xMB (xxxx bytes) */
char barcode[100] = ""; /* Contents of the barcode, i.e model:serial */
// char barcode[100] = ""; /* Contents of the barcode, i.e model:serial */
char verify[20] = ""; /* Verify option text */
char blank[10] = ""; /* blanking pass, none, zeros, ones */
char rounds[50] = ""; /* rounds ASCII numeric */
Expand All @@ -80,10 +88,10 @@ int create_pdf( nwipe_context_t* ptr )
char throughput_txt[50] = "";
char bytes_percent_str[7] = "";

int status_icon;
// int status_icon;

float height;
float page_width;
// float height;
// float page_width;

struct pdf_info info = { .creator = "https://github.com/PartialVolume/shredos.x86_64",
.producer = "https://github.com/martijnvanbrummelen/nwipe",
Expand Down Expand Up @@ -137,7 +145,7 @@ int create_pdf( nwipe_context_t* ptr )
pdf_add_text_wrap( pdf, NULL, "Disk Erasure Report", 24, 0, 695, PDF_BLACK, page_width, PDF_ALIGN_CENTER, &height );
snprintf( barcode, sizeof( barcode ), "%s:%s", c->device_model, c->device_serial_no );
pdf_add_text_wrap(
pdf, NULL, "Page 1 of 2 - Erasure Status", 14, 0, 670, PDF_BLACK, page_width, PDF_ALIGN_CENTER, &height );
pdf, NULL, "Page 1 - Erasure Status", 14, 0, 670, PDF_BLACK, page_width, PDF_ALIGN_CENTER, &height );
pdf_add_barcode( pdf, NULL, PDF_BARCODE_128A, 100, 790, 400, 25, barcode, PDF_BLACK );

/* ------------------------ */
Expand Down Expand Up @@ -768,67 +776,10 @@ int create_pdf( nwipe_context_t* ptr )
}
pdf_set_font( pdf, "Helvetica" );

/***************************************************************
* Create Page 2 of the report. This shows the drives smart data
*/

// struct pdf_object* page_2 = pdf_append_page( pdf );
// Create page two
page_2 = pdf_append_page( pdf );

/*********************************************************************
* Create header and footer on page 1, with the exception of the green
* tick/red icon which is set from the 'status' section below
*/
pdf_add_text_wrap( pdf, NULL, pdf_footer, 12, 0, 30, PDF_BLACK, page_width, PDF_ALIGN_CENTER, &height );
pdf_add_line( pdf, NULL, 50, 50, 550, 50, 3, PDF_BLACK );
pdf_add_line( pdf, NULL, 50, 650, 550, 650, 3, PDF_BLACK );
pdf_add_image_data( pdf, NULL, 45, 665, 100, 100, bin2c_shred_db_jpg, 27063 );
pdf_set_font( pdf, "Helvetica-Bold" );
snprintf( model_header, sizeof( model_header ), " %s: %s ", "Model", c->device_model );
pdf_add_text_wrap( pdf, NULL, model_header, 14, 0, 755, PDF_BLACK, page_width, PDF_ALIGN_CENTER, &height );
snprintf( serial_header, sizeof( serial_header ), " %s: %s ", "S/N", c->device_serial_no );
pdf_add_text_wrap( pdf, NULL, serial_header, 14, 0, 735, PDF_BLACK, page_width, PDF_ALIGN_CENTER, &height );
pdf_set_font( pdf, "Helvetica" );

pdf_add_text_wrap( pdf, NULL, "Disk Erasure Report", 24, 0, 695, PDF_BLACK, page_width, PDF_ALIGN_CENTER, &height );
snprintf( barcode, sizeof( barcode ), "%s:%s", c->device_model, c->device_serial_no );
pdf_add_text_wrap(
pdf, NULL, "Page 2 of 2 - Smart Data", 14, 0, 670, PDF_BLACK, page_width, PDF_ALIGN_CENTER, &height );
pdf_add_barcode( pdf, NULL, PDF_BARCODE_128A, 100, 790, 400, 25, barcode, PDF_BLACK );

/**********************************************************
* Display the appropriate status icon, top right on page 2
*/
switch( status_icon )
{
case STATUS_ICON_GREEN_TICK:

/* Display the green tick icon in the header */
pdf_add_image_data( pdf, NULL, 450, 665, 100, 100, bin2c_te_jpg, 54896 );
break;

case STATUS_ICON_YELLOW_EXCLAMATION:

/* Display the yellow exclamation icon in the header */
pdf_add_image_data( pdf, NULL, 450, 665, 100, 100, bin2c_nwipe_exclamation_jpg, 65791 );
break;

case STATUS_ICON_RED_CROSS:

// Display the red cross in the header
pdf_add_image_data( pdf, NULL, 450, 665, 100, 100, bin2c_redcross_jpg, 60331 );
break;

default:

break;
}

/*********************************
* Populate page 2 with smart data
/***************************************
* Populate page 2 and 3 with smart data
*/
nwipe_get_smart_data( c->device_name );
nwipe_get_smart_data( c );

/*****************************
* Create the reports filename
Expand All @@ -852,11 +803,12 @@ int create_pdf( nwipe_context_t* ptr )
return 0;
}

int nwipe_get_smart_data( char* device )
int nwipe_get_smart_data( nwipe_context_t* c )
{
FILE* fp;

char* pdata;
char page_title[50];

char smartctl_command[] = "smartctl -a %s";
char smartctl_command2[] = "/sbin/smartctl -a %s";
Expand All @@ -870,6 +822,7 @@ int nwipe_get_smart_data( char* device )
int idx, idx2, idx3;
int x, y;
int set_return_value;
int page_number;

final_cmd_smartctl[0] = 0;

Expand All @@ -885,17 +838,17 @@ int nwipe_get_smart_data( char* device )
}
else
{
sprintf( final_cmd_smartctl, smartctl_command3, device );
sprintf( final_cmd_smartctl, smartctl_command3, c->device_name );
}
}
else
{
sprintf( final_cmd_smartctl, smartctl_command2, device );
sprintf( final_cmd_smartctl, smartctl_command2, c->device_name );
}
}
else
{
sprintf( final_cmd_smartctl, smartctl_command, device );
sprintf( final_cmd_smartctl, smartctl_command, c->device_name );
}

if( final_cmd_smartctl[0] != 0 )
Expand All @@ -910,8 +863,18 @@ int nwipe_get_smart_data( char* device )
}
else
{
x = 50;
y = 630;
x = 50; // left side of page
y = 630; // top row of page
page_number = 2;

/* Create Page 2 of the report. This shows the drives smart data
*/
page = pdf_append_page( pdf );

/* Create the header and footer for page 2, the start of the smart data */
snprintf( page_title, sizeof( page_title ), "Smart Data - Page %i", page_number );
create_header_and_footer( c, page_title );

/* Read the output a line at a time - output it. */
while( fgets( result, sizeof( result ) - 1, fp ) != NULL )
{
Expand All @@ -932,13 +895,6 @@ int nwipe_get_smart_data( char* device )
idx++;
}

if( !strncmp( "smart attributes", result, 16 ) )
{
// move to right column on page, starting at top
x = 270;
y = 630;
}

if( nwipe_options.quiet == 1 )
{
for( idx2 = 0; idx2 < 3; idx2++ )
Expand All @@ -962,8 +918,21 @@ int nwipe_get_smart_data( char* device )
}

pdf_set_font( pdf, "Courier" );
pdf_add_text( pdf, page_2, result, 6, x, y, PDF_BLACK );
pdf_add_text( pdf, NULL, result, 8, x, y, PDF_BLACK );
y -= 9;

/* Have we reached the bottom of the page yet */
if( y < 60 )
{
/* Append an extra page */
page = pdf_append_page( pdf );
page_number++;
y = 630;

/* create the header and footer for the next page */
snprintf( page_title, sizeof( page_title ), "Smart Data - Page %i", page_number );
create_header_and_footer( c, page_title );
}
}
set_return_value = 0;
}
Expand All @@ -974,3 +943,55 @@ int nwipe_get_smart_data( char* device )
}
return set_return_value;
}

void create_header_and_footer( nwipe_context_t* c, char* page_title )
{
/**************************************************************************
* Create header and footer on most recently added page, with the exception
* of the green tick/red icon which is set from the 'status' section below.
*/
pdf_add_text_wrap( pdf, NULL, pdf_footer, 12, 0, 30, PDF_BLACK, page_width, PDF_ALIGN_CENTER, &height );
pdf_add_line( pdf, NULL, 50, 50, 550, 50, 3, PDF_BLACK );
pdf_add_line( pdf, NULL, 50, 650, 550, 650, 3, PDF_BLACK );
pdf_add_image_data( pdf, NULL, 45, 665, 100, 100, bin2c_shred_db_jpg, 27063 );
pdf_set_font( pdf, "Helvetica-Bold" );
snprintf( model_header, sizeof( model_header ), " %s: %s ", "Model", c->device_model );
pdf_add_text_wrap( pdf, NULL, model_header, 14, 0, 755, PDF_BLACK, page_width, PDF_ALIGN_CENTER, &height );
snprintf( serial_header, sizeof( serial_header ), " %s: %s ", "S/N", c->device_serial_no );
pdf_add_text_wrap( pdf, NULL, serial_header, 14, 0, 735, PDF_BLACK, page_width, PDF_ALIGN_CENTER, &height );
pdf_set_font( pdf, "Helvetica" );

pdf_add_text_wrap( pdf, NULL, "Disk Erasure Report", 24, 0, 695, PDF_BLACK, page_width, PDF_ALIGN_CENTER, &height );
snprintf( barcode, sizeof( barcode ), "%s:%s", c->device_model, c->device_serial_no );
pdf_add_text_wrap( pdf, NULL, page_title, 14, 0, 670, PDF_BLACK, page_width, PDF_ALIGN_CENTER, &height );
pdf_add_barcode( pdf, NULL, PDF_BARCODE_128A, 100, 790, 400, 25, barcode, PDF_BLACK );

/**********************************************************
* Display the appropriate status icon, top right on page on
* most recently added page.
*/
switch( status_icon )
{
case STATUS_ICON_GREEN_TICK:

/* Display the green tick icon in the header */
pdf_add_image_data( pdf, NULL, 450, 665, 100, 100, bin2c_te_jpg, 54896 );
break;

case STATUS_ICON_YELLOW_EXCLAMATION:

/* Display the yellow exclamation icon in the header */
pdf_add_image_data( pdf, NULL, 450, 665, 100, 100, bin2c_nwipe_exclamation_jpg, 65791 );
break;

case STATUS_ICON_RED_CROSS:

// Display the red cross in the header
pdf_add_image_data( pdf, NULL, 450, 665, 100, 100, bin2c_redcross_jpg, 60331 );
break;

default:

break;
}
}
4 changes: 3 additions & 1 deletion src/create_pdf.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@
*/
int create_pdf( nwipe_context_t* ptr );

int nwipe_get_smart_data( char* );
int nwipe_get_smart_data( nwipe_context_t* );

void create_header_and_footer( nwipe_context_t*, char* );

#endif /* CREATE_PDF_H_ */

0 comments on commit ab9d269

Please sign in to comment.